Loading
Índice de materias
Seleccionar filtros

          No hay resultados
          No hay resultados
          Estas son algunas sugerencias de búsqueda

          Compruebe la ortografía de sus palabras clave.
          Utilice términos de búsqueda más generales.
          Seleccione menos filtros para ampliar su búsqueda.

          Buscar en toda la Ayuda de Salesforce
          Entrada y salida personalizadas para Asignadores de datos de OmniStudio en OmniStudio

          Entrada y salida personalizadas para Asignadores de datos de OmniStudio en OmniStudio

          De forma predeterminada, los Asignadores de datos gestionan datos JSON y XML. Para gestionar otros formatos de datos, puede configurar un Asignador de datos para utilizar una entrada o salida personalizada que implemente como una clase personalizada. Por ejemplo, puede definir una Transformación de asignador de datos que acepta datos con formato CSV y los genera como JSON.

          Las opciones son las siguientes:

          • Carga del asignador de datos: Entrada personalizada (la salida es siempre un objeto de Salesforce)

          • Transformación de asignador de datos: Entrada y salida personalizadas

          • Extracto del asignador de datos: Entrada y salida personalizadas

          Para configurar un Asignador de datos para utilizar una entrada o salida personalizada, establezca su tipo como Personalizado. A continuación especifique la clase que contiene los métodos serializar y deserializar que realizan la operación. La siguiente tabla muestra propiedades para una transformación de Asignador de datos configurada con una entrada y salida personalizadas.

          Propiedad Valor
          Nombre de interfaz de asignador de datos Transformación de serialización personalizada
          Tipo de interfaz Transformación
          Tipo de entrada Personalizar
          Clase de entrada personalizada CSVProcessor
          Tipo de salida Personalizar
          Clase de salida personalizada CSVProcessor

          Para facilitar la asignación, puede pegar entrada de muestra en los paneles Entrada prevista y Salida prevista.

          Para crear la lógica necesaria para personalizar la entrada y la salida, debe definir una clase personalizada que implemente Llamar. Para el resultado personalizado, implemente el método serializar. Para la entrada personalizada, implemente el método deserializar. No puede cambiar el nombre de los parámetros de entrada y salida.

          El siguiente ejemplo muestra la estructura básica de una clase de serialización y deserialización de clientes.

          global with sharing class PreprocessorClassExample implements 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);
              }
              private Object invokeMethod(String methodName, Map<String,Object> input, Map<String,Object> output, Map<String,Object> options) {
                  if (methodName == 'serialize') {
                      return serialize(input, output);
                  }
                  else if (methodName == 'deserialize') {
                      return deserialize(input, output);
                  }
                  return false;
              }
              /*
                  Serializes Apex objects into JSON content. Return String json
              */
              global Boolean serialize(Map<String, Object> input, Map<String, Object> output) {
                  String jsonString = '';            
                  // code
                  output.put('output', jsonString); // JSON String
                  return true;
              }
              /*
                  Deserializes the specified JSON string into collections of primitive data types. Return Object ((Map<String, Object>))
              */
              global Boolean deserialize(Map<String, Object> input, Map<String, Object> output) {
                  Map<String, Object> returnMap = new Map<String, Object>();
                  // code
                  output.put('output', returnMap); // ---> collections of primitive data types Map<String, Object>, List<Map<String, Object>>()
                  return true;
              }
          }

          El siguiente ejemplo serializa y deserializa datos CSV.

          global with sharing class CSVProcessor implements 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);
             }
             private Object invokeMethod(String methodName, Map<String,Object> input, Map<String,Object> output, Map<String,Object> options)
             {
             System.debug('METHOD NAME >>> ' + methodName);
                 if (methodName == 'deserialize')
                 {
                     return deserialize(input, output);
                 }
                 return false;
             }
             /*
             Example Output: 'Column2,Column1\nvalue0,value1.0\nvalue0.1,value1.1';
             */
             /*
             Deserializes the specified JSON string into collections of primitive data types. Return Object ((Map<String, Object>))
             Input: 'Column2,Column1\nvalue0,value1.0\nvalue0.1,value1.1';
             Output:
             [
                 {
                     "Column1Test": "value1.0",
                     "Column2Test": "value0"
                 },
                 {
                     "Column1Test": "value1.1sl",
                     "Column2Test": "value0.1"
                 }
             ]
             */
                  public class csvInput {
                      @AuraEnabled
                      public string VersionData;
                  }
                  global Boolean deserialize(Map<String, Object> input, Map<String, Object> output)
             {
                 System.debug(input);
                 System.debug(input.get('input'));
                 System.debug(input.toString());
                 //csvInput s = (csvInput)JSON.deserialize((string)input.get('input'), csvInput.class);
                 Object data = input.get('input');
                 csvInput s;
                 if(data instanceof String) {
                     s = (csvInput)JSON.deserialize(String.valueOf(data), csvInput.class);
                 } else { // try to preserve the source formatting
                     s = (csvInput)JSON.deserialize(JSON.serialize(data), csvInput.class);
                 }
                 Blob decodedInputBlob = System.EncodingUtil.base64Decode(s.VersionData);
                 String decodedCsvString = decodedInputBlob.toString();
                 Object inputValue = decodedCsvString;
                 System.debug(inputValue);
                 if (inputValue != null && inputValue InstanceOf String)
                 {
                     List<String> valueSet = ((String)inputValue).split('\n');
                     List<Map<String, String>> csvList = new List<Map<String, String>>();
                     List<String> columns = new List<String>();
                     for (Integer i = 0; i < valueSet.size(); i++)
                     {
                         String value = valueSet[i];
                         if (String.isBlank(value))
                         {
                             continue;
                         }
                         if (i == 0)
                         {
                             List<String> valSet = value.split(',');
                             for (Integer y = 0; y < valSet.size(); y++)
                             {
                                 columns.add(valSet[y]);
                             }
                         }
                         else
                         {
                             List<String> valSet = value.split(',');
                             if (columns.size() >= valSet.size())
                             {
                                 Map<String, String> rows = new Map<String, String>();
                                 for (Integer z = 0; z < valSet.size(); z++)
                                 {
                                     rows.put(columns[z], valSet[z]);
                                 }
                                 csvList.add(rows);
                             }
                         }
                     }
                     output.put('output', csvList);
                     //Map<String, Object> returnMap = new Map<String, Object>();
                     //output.put('output', returnMap);
                     System.debug(output);
                     return True;
                 }
                 return False;
             }
          }

          Por ejemplo, supongamos que su archivo CSV tiene este contenido:

          Nombre

          Correo electrónico

          Teléfono

          Mary Baker

          mbaker@example.com

          415-555-3331

          Joe Baker

          jbaker@example.com

          415-555-3332

          Russell Baker

          rbaker@example.com

          415-555-3333

          La clase CSVProcessor de ejemplo la convierte en esta entrada JSON:

          [
            {
              "Name": "Mary Baker",
              "Email": "mbaker@example.com",
              "Phone": "415-555-3331"
            },
            {
              "Name": "Joe Baker",
              "Email": "jbaker@example.com",
              "Phone": "415-555-3332"
            },
            {
              "Name": "Russell Baker",
              "Email": "rbaker@example.com",
              "Phone": "415-555-3333"
            }
          ]
           
          Cargando
          Salesforce Help | Article