
For e,g update 'Closed' to Close.
Can someone please help. Thank you.
Hi Jane, (Modify your API name and old/new value and give it a test from the developer console for one value "Closed".)
String picklistapiname = 'Lead.Status__c';
MetadataService.MetadataPort service = new MetadataService.MetadataPort();
service.SessionHeader = new MetadataService.SessionHeader_element();
service.SessionHeader.sessionId = UserInfo.getSessionId();
MetadataService.CustomField customField = (MetadataService.CustomField) service.readMetadata('CustomField', new String[] { picklistapiname}).getRecords()[0];
// For each on: customField > Get valueset > Get valueSetDefinition > get values
for(MetadataService.CustomValue objCustomValue : customField.valueSet.valueSetDefinition.value){
if(objCustomValue.fullName == 'Closed'){ // API Name
objCustomValue.fullName = 'Close'; // New API Value
objCustomValue.label = 'Close'; // New Label value
}
}
// Update
List<MetadataService.SaveResult> lstResults = service.updateMetadata( new MetadataService.Metadata[] { customField });
for (MetadataService.SaveResult objResult : lstResults) {
if (objResult.success) {
System.debug('Successfully updated');
}
else {
if(objResult.errors.size() > 0){
System.debug('eror : ' + objResult.errors[0].message);
}
}
}