fork download
  1. public class CustomFieldCreator {
  2.  
  3. // Create a single custom field
  4. public static void createCustomField(String objectName, String fieldName, String label, String type, Integer length, String description) {
  5. MetadataService.MetadataPort service = createMetadataService();
  6.  
  7. MetadataService.CustomField customField = new MetadataService.CustomField();
  8. customField.fullName = objectName + '.' + fieldName;
  9. customField.label = label;
  10. customField.type_x = type;
  11. customField.length = length;
  12. customField.description = description;
  13.  
  14. if (type == 'Picklist') {
  15. customField.valueSet = new MetadataService.ValueSet();
  16. customField.valueSet.valueSetDefinition = new MetadataService.ValueSetValuesDefinition();
  17. customField.valueSet.valueSetDefinition.value = new List<MetadataService.CustomValue>();
  18. }
  19.  
  20. List<MetadataService.SaveResult> results = service.createMetadata(new List<MetadataService.Metadata> { customField });
  21. handleSaveResults(results);
  22. }
  23.  
  24. // Add field permissions
  25. public static void addFieldPermission(String profileName, String objectName, String fieldName, Boolean readable, Boolean editable) {
  26. MetadataService.MetadataPort service = createMetadataService();
  27.  
  28. MetadataService.Profile profile = (MetadataService.Profile) service.readMetadata('Profile', new String[] { profileName }).getRecords()[0];
  29.  
  30. MetadataService.ProfileFieldLevelSecurity fieldPermission = new MetadataService.ProfileFieldLevelSecurity();
  31. fieldPermission.field = objectName + '.' + fieldName;
  32. fieldPermission.readable = readable;
  33. fieldPermission.editable = editable;
  34.  
  35. if (profile.fieldPermissions == null) {
  36. profile.fieldPermissions = new List<MetadataService.ProfileFieldLevelSecurity>();
  37. }
  38. profile.fieldPermissions.add(fieldPermission);
  39.  
  40. List<MetadataService.SaveResult> results = service.updateMetadata(new List<MetadataService.Metadata> { profile });
  41. handleSaveResults(results);
  42. }
  43.  
  44. // Add validation rule
  45. public static void addValidationRule(String objectName, String ruleName, String errorCondition, String errorMessage, String errorLocation) {
  46. MetadataService.MetadataPort service = createMetadataService();
  47.  
  48. MetadataService.CustomObject customObject = (MetadataService.CustomObject) service.readMetadata('CustomObject', new String[] { objectName }).getRecords()[0];
  49.  
  50. MetadataService.ValidationRule validationRule = new MetadataService.ValidationRule();
  51. validationRule.fullName = objectName + '.' + ruleName;
  52. validationRule.active = true;
  53. validationRule.errorConditionFormula = errorCondition;
  54. validationRule.errorMessage = errorMessage;
  55. validationRule.errorDisplayField = errorLocation;
  56.  
  57. if (customObject.validationRules == null) {
  58. customObject.validationRules = new List<MetadataService.ValidationRule>();
  59. }
  60. customObject.validationRules.add(validationRule);
  61.  
  62. List<MetadataService.SaveResult> results = service.updateMetadata(new List<MetadataService.Metadata> { customObject });
  63. handleSaveResults(results);
  64. }
  65.  
  66. // Helper method to create MetadataService instance
  67. private static MetadataService.MetadataPort createMetadataService() {
  68. MetadataService.MetadataPort service = new MetadataService.MetadataPort();
  69. service.SessionHeader = new MetadataService.SessionHeader_element();
  70. service.SessionHeader.sessionId = UserInfo.getSessionId();
  71. return service;
  72. }
  73.  
  74. // Helper method to handle save results
  75. private static void handleSaveResults(List<MetadataService.SaveResult> results) {
  76. for (MetadataService.SaveResult result : results) {
  77. if (result.success) {
  78. System.debug('Operation successful: ' + result.fullName);
  79. } else {
  80. for (MetadataService.Error error : result.errors) {
  81. System.debug('Error: ' + error.message);
  82. }
  83. }
  84. }
  85. }
  86. }
Success #stdin #stdout #stderr 0.01s 8956KB
stdin
Standard input is empty
stdout
Object: UndefinedObject error: did not understand #CustomFieldCreator
MessageNotUnderstood(Exception)>>signal (ExcHandling.st:254)
UndefinedObject class(Object)>>doesNotUnderstand: #CustomFieldCreator (SysExcept.st:1448)
UndefinedObject>>executeStatements (prog:1)
stderr
./prog:3: parse error, expected '}'