Skip to content

Commit

Permalink
Added example and support for adding and updating FieldSets
Browse files Browse the repository at this point in the history
See StackExchange,
http://salesforce.stackexchange.com/questions/16836/can-we-insert-or-upd
ate-fieldsets-using-apex-code
  • Loading branch information
afawcettffdc committed Sep 17, 2013
1 parent f80b168 commit c3b1a39
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 2 deletions.
8 changes: 6 additions & 2 deletions apex-mdapi/src/classes/MetadataService.cls
Original file line number Diff line number Diff line change
Expand Up @@ -1667,17 +1667,21 @@ public class MetadataService {
private String[] apex_schema_type_info = new String[]{'http://soap.sforce.com/2006/04/metadata','true','false'};
private String[] field_order_type_info = new String[]{'connector','faultConnector','filters','object_x','outputAssignments','sortField','sortOrder'};
}
public class FieldSet {
public class FieldSet extends Metadata {
public String type = 'FieldSet';
public String fullName;
public MetadataService.FieldSetItem[] availableFields;
public String description;
public MetadataService.FieldSetItem[] displayedFields;
public String label;
private String[] type_att_info = new String[]{'xsi:type'};
private String[] fullName_type_info = new String[]{'fullName','http://www.w3.org/2001/XMLSchema','string','0','1','false'};
private String[] availableFields_type_info = new String[]{'availableFields','http://soap.sforce.com/2006/04/metadata','FieldSetItem','0','-1','false'};
private String[] description_type_info = new String[]{'description','http://www.w3.org/2001/XMLSchema','string','1','1','false'};
private String[] displayedFields_type_info = new String[]{'displayedFields','http://soap.sforce.com/2006/04/metadata','FieldSetItem','0','-1','false'};
private String[] label_type_info = new String[]{'label','http://www.w3.org/2001/XMLSchema','string','1','1','false'};
private String[] apex_schema_type_info = new String[]{'http://soap.sforce.com/2006/04/metadata','true','false'};
private String[] field_order_type_info = new String[]{'availableFields','description','displayedFields','label'};
private String[] field_order_type_info = new String[]{'fullName','availableFields','description','displayedFields','label'};
}
public class AccountCriteriaBasedSharingRule {
public String accountAccessLevel;
Expand Down
53 changes: 53 additions & 0 deletions apex-mdapi/src/classes/MetadataServiceExamples.cls
Original file line number Diff line number Diff line change
Expand Up @@ -488,6 +488,59 @@ public with sharing class MetadataServiceExamples
new MetadataCreateJob.Item(new List<MetadataService.Metadata> { customField1, customField2 }, null, true) }, // Set wait to true, to process after object creation
new MetadataCreateJob.EmailNotificationMetadataAsyncCallback());
}

public static void createFieldSet()
{
MetadataService.MetadataPort service = createService();

// FieldSet
MetadataService.FieldSet fieldSet = new MetadataService.FieldSet();
fieldSet.fullName = 'Test__c.MyFieldSet';
fieldSet.label = 'My FieldSet';
fieldSet.description = 'Used by my VF page';
MetadataService.FieldSetItem myAvailableField = new MetadataService.FieldSetItem();
myAvailableField.field = 'TestField__c';
myAvailableField.isFieldManaged = true;
myAvailableField.isRequired = true;
fieldSet.availableFields = new List<MetadataService.FieldSetItem>();
fieldSet.availableFields.add(myAvailableField);

// Create
MetadataService.AsyncResult[] results = service.create(new List<MetadataService.Metadata> { fieldSet });
}

public static void updateFieldSet()
{
MetadataService.MetadataPort service = createService();

// FieldSet
MetadataService.FieldSet fieldSet = new MetadataService.FieldSet();
fieldSet.fullName = 'Test__c.MyFieldSet';
fieldSet.label = 'My FieldSet';
fieldSet.description = 'Used by my VF page';
MetadataService.FieldSetItem myAvailableField = new MetadataService.FieldSetItem();
myAvailableField.field = 'TestField__c';
myAvailableField.isFieldManaged = true;
myAvailableField.isRequired = true;
MetadataService.FieldSetItem myAvailableFieldNew = new MetadataService.FieldSetItem();
myAvailableFieldNew.field = 'ExternalField__c';
myAvailableFieldNew.isFieldManaged = true;
myAvailableFieldNew.isRequired = true;
fieldSet.availableFields = new List<MetadataService.FieldSetItem>();
fieldSet.availableFields.add(myAvailableField);
fieldSet.availableFields.add(myAvailableFieldNew);
MetadataService.FieldSetItem myDisplayField = new MetadataService.FieldSetItem();
myDisplayField.field = 'TestField__c';
myDisplayField.isFieldManaged = true;
myDisplayField.isRequired = true;

// Update
List<MetadataService.UpdateMetadata> updateMetadataList = new List<MetadataService.UpdateMetadata>();
updateMetadataList.add(new MetadataService.UpdateMetadata());
updateMetadataList[0].currentName = 'Test__c.MyFieldSet';
updateMetadataList[0].metadata = fieldSet;
MetadataService.AsyncResult[] results = service.updateMetadata(updateMetadataList);
}

public static MetadataService.MetadataPort createService()
{
Expand Down

1 comment on commit c3b1a39

@peeriyagama
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was wondering how to use API to add an input field under a certain section.

Please sign in to comment.