Loading
Table of Contents
Select Filters

          No results
          No results
          Here are some search tips

          Check the spelling of your keywords.
          Use more general search terms.
          Select fewer filters to broaden your search.

          Search all of Salesforce Help
          Sample Apex Code for Custom Functions

          Sample Apex Code for Custom Functions

          Develop Apex classes to implement custom functions for use with Omnistudio Data Mappers and Integration Procedures. A sample Apex class implements three methods that can be called as custom functions in Omnistudio formulas. The class includes code that passes a list to a custom function.

          Data Mappers and Integration Procedures can invoke these functions to convert a list to an array, replace one character with another, or reformat phone numbers. The class and invokeMethod of custom functions must be global.

          The convert function

          The first custom function, convert, converts a list of values without keys to an array of values with keys. The function signature is:

          FUNCTION('MyCustomFunctions', 'convert', LIST(%Inputlist%), %ListKey%)

          If the list key is "Item" and the input list is:

          {
            "InputList": [ "abc", "def", "ghi" ]
          }

          The result is:

          {
            [
              {
                "Item": "abc"
              },
              {
                "Item": "def"
              },
              {
                "Item": "ghi"
              }
            ]
          }

          The replace function

          The second function, replace, replaces a character in a string with another character. The function signature is:

          FUNCTION('MyCustomFunctions', 'replace', %InputString%, %ToReplace%, %ReplaceWith%)

          If the input string is my-input-string, the character to replace is -, and the character to replace it with is _, the result is my_input_string.

          The formatPhoneNumber function

          The third function, formatPhoneNumber, converts a phone number to the format (nnn) nnn-nnnn. The number must have no country code, a 3-digit area code, a three-digit exchange, and an overall length of at least nine digits. The function signature is:

          FUNCTION('MyCustomFunctions', 'formatPhoneNumber', %Phone%)

          If the input is 123.456.7890, 123-456-7890, or 1234567890, the result is (123) 456-7890.

          Passing a list to a custom function

          If input to your custom function is of the type List<Object>, Apex saves the input to a VLOCITY-FORMULA-LIST key. To retrieve the input, use code that retrieves this key.

          static List<Map<String, Object>> FUNCTION(List<Object> inputs)
          {
            List<Object> listInput = ((Map<String, Object>)inputs[0]).get('VLOCITY-FORMULA-LIST');
            Object variableInput = inputs[1];
                        
            // Rest of function
          }

          For a working example that passes a list to a custom function, see the implementation of the convert function in the example code.

          The Apex class

          The custom functions just described are defined as methods of the class MyCustomFunctions. For more information about calling custom functions and examples of the three custom functions defined in the class, see Omnistudio Invocation Functions.

          global class MyCustomFunctions implements Callable
          {
                  
              /*
               * input  - arguments - List<Object> of arguments passed to the function
               * output - result    - The function supports single Object values, List<Object>,
               *                      or Map<String, Object>
               */
                  
              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);
              }
                  
              global Boolean invokeMethod(String methodName, Map<String, Object> inputs,
                  Map<String, Object> output, Map<String, Object> options)
              {
                  if (methodName == 'convert') {
                      List<Object> arguments = (List<Object>) inputs.get('arguments');
                      output.put('result', convert(arguments));
                  } else if (methodName == 'replace') {
                      List<Object> arguments = (List<Object>) inputs.get('arguments');
                      output.put('result', replace(arguments));
                  } else if (methodName == 'formatPhoneNumber') {
                      List<Object> arguments = (List<Object>) inputs.get('arguments');
                      output.put('result', formatPhoneNumber(arguments));
                  }
                  return true;
              }
                  
              private LIST<Map<String, Object>> convert(List<Object> arguments)
              {
                  try {
                      LIST<Map<String, Object>> result = new LIST<Map<String, Object>>();
                      Map<String, Object> inputlist = (Map<String, Object>) arguments[0];
                      String key = (String) arguments[1];
                      List<Object> listofElements = (List<Object>) inputlist.get('VLOCITY-FORMULA-LIST');
                      for (Object str : listofElements) {
                          result.add(new Map<String, Object>{key => str});
                      }
                      return result;
                  } catch(Exception e) {
                      return new LIST<Map<String, Object>>(); 
                  }
              }
                  
              private String replace(List<Object> arguments)
              {
                  String result = '';
                  String inputlist = (String) arguments[0];
                  String toreplace = (String) arguments[1];
                  String replaceby = (String) arguments[2];
                  result = inputlist.replaceAll(toreplace, replaceby);
                  return result;
              }
                  
              public string formatPhoneNumber(List<Object> arguments)
              {
                  String Phoneno = arguments[0] + '';
                  String formattedPhone = Phoneno.replaceAll('[^0-9+]', '');
                  String NewFormat;
                  if (String.isNotBlank(formattedPhone) && formattedPhone.length() >= 9) {
                      String first = formattedPhone.subString(0, 3);
                      String second = formattedPhone.subString(3, 6);
                      String third = formattedPhone.subString(6);
                      NewFormat = '(' + first + ')' + ' ' + second + '-' + third;
                  }
                  return NewFormat;
              }
                  
          }
           
          Loading
          Salesforce Help | Article