You need to sign in to do that
Don't have an account?
gkreddy
adding picklist values using metadata api
Hello,
I have a requirement to set custom picklist values from product objects with all the active products.
The picklist values always need to sync with product data incase of any additions or deletion on product object.
I have written below code to add picklist value to custom field. There are no compile errors but the value is not inserted as picklist value after running the code.
Can you tell what am doing wrong in the below code?
public class BU_MetadataAPI {
// @future (callout = true)
public static void AddValues()
{
String picklistapiname = 'Contact.testPicklist__c' ;
MetadataService.MetadataPort service = createService();
//MetadataService.CustomField customField = new MetadataService.CustomField();
MetadataService.CustomField customField = (MetadataService.CustomField) service.readMetadata('CustomField', new String[] { picklistapiname}).getRecords()[0];
System.debug ('Custom Field : '+customField);
//Add values
List<MetadataService.CustomValue> values = new List<MetadataService.CustomValue>();
MetadataService.CustomValue v1 = new MetadataService.CustomValue();
v1.fullName = 'SegmentA';
v1.description = 'segmentA';
v1.isActive = true;
values.add(v1);
//valueSetDefinition
MetadataService.ValueSetValuesDefinition vsd = new MetadataService.ValueSetValuesDefinition();
vsd.value = values;
vsd.sorted = true;
//valueSet
MetadataService.ValueSet vs = new MetadataService.ValueSet();
vs.valueSetDefinition = vsd;
//Set valueSet
customField.valueSet = vs;
// Update Custom Field
MetadataService.SaveResult saveResult = service.updateMetadata( new MetadataService.Metadata[] { customField })[0];
}
public static MetadataService.MetadataPort createService()
{
MetadataService.MetadataPort service = new MetadataService.MetadataPort();
service.SessionHeader = new MetadataService.SessionHeader_element();
service.SessionHeader.sessionId = UserInfo.getSessionId();
return service;
}
}
I have a requirement to set custom picklist values from product objects with all the active products.
The picklist values always need to sync with product data incase of any additions or deletion on product object.
I have written below code to add picklist value to custom field. There are no compile errors but the value is not inserted as picklist value after running the code.
Can you tell what am doing wrong in the below code?
public class BU_MetadataAPI {
// @future (callout = true)
public static void AddValues()
{
String picklistapiname = 'Contact.testPicklist__c' ;
MetadataService.MetadataPort service = createService();
//MetadataService.CustomField customField = new MetadataService.CustomField();
MetadataService.CustomField customField = (MetadataService.CustomField) service.readMetadata('CustomField', new String[] { picklistapiname}).getRecords()[0];
System.debug ('Custom Field : '+customField);
//Add values
List<MetadataService.CustomValue> values = new List<MetadataService.CustomValue>();
MetadataService.CustomValue v1 = new MetadataService.CustomValue();
v1.fullName = 'SegmentA';
v1.description = 'segmentA';
v1.isActive = true;
values.add(v1);
//valueSetDefinition
MetadataService.ValueSetValuesDefinition vsd = new MetadataService.ValueSetValuesDefinition();
vsd.value = values;
vsd.sorted = true;
//valueSet
MetadataService.ValueSet vs = new MetadataService.ValueSet();
vs.valueSetDefinition = vsd;
//Set valueSet
customField.valueSet = vs;
// Update Custom Field
MetadataService.SaveResult saveResult = service.updateMetadata( new MetadataService.Metadata[] { customField })[0];
}
public static MetadataService.MetadataPort createService()
{
MetadataService.MetadataPort service = new MetadataService.MetadataPort();
service.SessionHeader = new MetadataService.SessionHeader_element();
service.SessionHeader.sessionId = UserInfo.getSessionId();
return service;
}
}