Skip to content

Instantly share code, notes, and snippets.

@abeyer
Created August 24, 2016 21:22
Show Gist options
  • Save abeyer/cf9ddfec8f9d3bf5f3284f29d5de81fe to your computer and use it in GitHub Desktop.
Save abeyer/cf9ddfec8f9d3bf5f3284f29d5de81fe to your computer and use it in GitHub Desktop.
Set or clear multiselect picklist values from process builder
public class PBClearMultiPicklist {
public class Params {
@InvocableVariable(label='Object ID' required=true)
public String sobjectId;
@InvocableVariable(label='Picklist Field API Name' required=true)
public String fieldName;
@InvocableVariable(label='Value' required=true)
public String value;
}
@InvocableMethod(
label='Clear a multiselect picklist value'
description='Removes a selected value from a multiselect picklist without changing other selected values.'
)
public static void clearPicklistValue(List<Params> ps){
Params p = ps[0];
Id sobjectId = (Id)(p.sobjectId);
String fieldName = p.fieldName;
String value = p.value;
// Fetch object by ID
Schema.SObjectType sobjectType = sobjectId.getSObjectType();
String sobjectName = sobjectType.getDescribe().getName();
SObject record = Database.query('Select Id,' + fieldName + ' From ' + sobjectName + ' Where Id = :sobjectId');
// Get existing field values into set
String prevStr = (String)record.get(fieldName);
Set<String> values = new Set<String>(prevStr.split(';'));
// Add new value
values.remove(value);
// Rebuild value string from set
List<String> sorted = new List<String>(values);
sorted.sort();
String newStr = String.join(sorted, ';');
record.put(fieldName, newStr);
update record;
}
}
public class PBSetMultiPicklist {
public class Params {
@InvocableVariable(label='Object ID' required=true)
public String sobjectId;
@InvocableVariable(label='Picklist Field API Name' required=true)
public String fieldName;
@InvocableVariable(label='Value' required=true)
public String value;
}
@InvocableMethod(
label='Set a multiselect picklist value'
description='Adds a selected value to a multiselect picklist without changing other selected values.'
)
public static void setPicklistValue(List<Params> ps){
Params p = ps[0];
Id sobjectId = (Id)(p.sobjectId);
String fieldName = p.fieldName;
String value = p.value;
// Fetch object by ID
Schema.SObjectType sobjectType = sobjectId.getSObjectType();
String sobjectName = sobjectType.getDescribe().getName();
SObject record = Database.query('Select Id,' + fieldName + ' From ' + sobjectName + ' Where Id = :sobjectId');
// Get existing field values into set
String prevStr = (String)record.get(fieldName);
Set<String> values = new Set<String>(prevStr.split(';'));
// Add new value
values.add(value);
// Rebuild value string from set
List<String> sorted = new List<String>(values);
sorted.sort();
String newStr = String.join(sorted, ';');
record.put(fieldName, newStr);
update record;
}
}
@mazz44
Copy link

mazz44 commented Aug 30, 2016

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment