diff --git a/.vs/CustomMetadataLoader/v15/.suo b/.vs/CustomMetadataLoader/v15/.suo new file mode 100644 index 0000000..8a0b3d1 Binary files /dev/null and b/.vs/CustomMetadataLoader/v15/.suo differ diff --git a/custom_md_loader/classes/CustomMetadataUploadController.cls b/custom_md_loader/classes/CustomMetadataUploadController.cls index 44c2351..4bf3e8c 100644 --- a/custom_md_loader/classes/CustomMetadataUploadController.cls +++ b/custom_md_loader/classes/CustomMetadataUploadController.cls @@ -44,6 +44,33 @@ public class CustomMetadataUploadController { } } } + + public PageReference deleteCustomMetaData() { + ApexPages.getMessages().clear(); + showRecordsTable = false; + deleteCustomMetadtaRecords(); + // TODO: Add Success Message / Display Errors + return null; + } + + private void deleteCustomMetadtaRecords() { + if(selectedType == 'Select type') { + ApexPages.Message errorMessage = new ApexPages.Message(ApexPages.severity.ERROR, 'Please choose a valid custom metadata type.'); + ApexPages.addMessage(errorMessage); + return; + } + + String query = 'SELECT DeveloperName FROM ' + selectedType; + + List customRecords = Database.query(query); + List recordsToDelete = new List(); + + for (sObject record : customRecords) { + recordsToDelete.add(selectedType + '.' + record.get('DeveloperName')); + } + + MetadataUtil.deleteMetadata('CustomMetadata', recordsToDelete); + } public PageReference upsertCustomMetadata() { ApexPages.getMessages().clear(); diff --git a/custom_md_loader/classes/MetadataUtil.cls b/custom_md_loader/classes/MetadataUtil.cls index a1e6650..19c9082 100644 --- a/custom_md_loader/classes/MetadataUtil.cls +++ b/custom_md_loader/classes/MetadataUtil.cls @@ -87,10 +87,6 @@ public class MetadataUtil { List fieldValueList = new List(); for (String singleRowFieldValues :singleRowOfValues) { - if (String.isBlank(singleRowFieldValues)) { - continue; - } - fieldValueList.addAll(singleRowFieldValues.split(';')); } for(String fieldName : fieldNameSet) { @@ -152,6 +148,34 @@ public class MetadataUtil { customMetadata.values = customMetadataValues; return customMetadata; } + + public static void deleteMetadata(String type_x,String[] fullNames) { + List results = getPort().deleteMetadata(type_x, fullNames); + if (results!=null) { + for (MetadataService.DeleteResult deleteResult : results) { + if (deleteResult==null || deleteResult.success) { + continue; + } + // Construct error message and throw an exception + if (deleteResult.errors!=null) { + List messages = new List(); + messages.add((deleteResult.errors.size()==1 ? 'Error ' : 'Errors ') + 'occured processing component ' + deleteResult.fullName + '.'); + for(MetadataService.Error error : deleteResult.errors){ + messages.add(error.message + ' (' + error.statusCode + ').' + ( error.fields!=null && error.fields.size()>0 ? ' Fields ' + String.join(error.fields, ',') + '.' : '' ) ); + } + if(messages.size()>0){ + ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.Error, String.join(messages, ' '))); + System.debug(LoggingLevel.ERROR, String.join(messages, '')); + return; + } + } + if(!deleteResult.success){ + ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.Error, 'Request failed with no specified error.')); + return; + } + } + } + } private static void upsertMetadataAndValidate(MetadataService.Metadata[] records) { diff --git a/custom_md_loader/pages/CustomMetadataRecordUploader.page b/custom_md_loader/pages/CustomMetadataRecordUploader.page index d22a11b..7da6003 100644 --- a/custom_md_loader/pages/CustomMetadataRecordUploader.page +++ b/custom_md_loader/pages/CustomMetadataRecordUploader.page @@ -22,6 +22,15 @@ + +
+ + + + +
+
+