Populating Picklist Values From Apex (Managed Package)

For the managed package runtime, you can populate Select, Multi-select, and Radio elements from an Apex class that implements Callable and Vlocity Open Interface. The values for the element are obtained during the Omniscript's activation.

Managed Package app icon This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see Omnistudio Help.

To populate a picklist from an Apex class, make sure to enable Fetch Picklist Values at Script Load for the Omniscript from Setup.

To populate the options of an element, a List<Map<String, String>> is returned from the Apex class. The Map Options are Name, the Language Independent Option, and Value, the UI Display value.

Sample Apex Code for Populating a Picklist:

global with sharing class SelectOptionsCallableAndVoi implements omnistudio.VlocityOpenInterface, Callable
{
    public Object call(String action, Map<String, Object> args) {
       Map<String, Object> input = (Map<String, Object>)args.get('input');
       Map<String, Object> output = (Map<String, Object>)args.get('output');
       Map<String, Object> options = (Map<String, Object>)args.get('options');
       return invokeMethod(action, input, output, options);
    }

    public Boolean invokeMethod(String methodName, Map<String,Object> inputMap, Map<String,Object> outMap, Map<String,Object> options)
    {
        try {
            if (methodName.equals('SelectOptions'))
            {
                SelectOptions(inputMap, outMap, options);
            }
        }
        catch(Exception e) {
            System.debug(LoggingLevel.ERROR, 'Exception: ' + e.getMessage() + ' ' + e.getStackTraceString());
        }
        return true;
    }
   
    private List<Map<String, Object>> SelectOptions(Map<String, Object> inputMap, Map<String, Object> outMap, Map<String, Object> options)
    {
        List<Map<String, Object>> optionList = new List<Map<String, Object>>();
        for (Account acc : [ Select Id, Name from Account limit 8])
        {
             Map<String, Object> option = new Map<String, Object>();
             option.put('name', acc.Id);
             option.put('value', acc.Name);
             optionList.add(option);
        }
        
        outMap.put('options', optionList);
                
        return optionList;
    }

}

For information on populating dependent picklists, see Populating Dependent Picklist Values with Apex (Managed Package).