DataRaptor Extract: no siempre retorna un Array de Objetos

Desarrollando un Integration Procedure dentro de Vlocity para un proyecto de trabajo me topé con un comportamiento estándar de Salesforce, específicamente del DataRaptor Extract, y ya que cuando se solicita que devuelva una lista de objetos, configurando un objeto de este tipo, sencillo sería como sigue:

En la sección EXTRACT simplemente indicamos de dónde vendrá la información, para este caso en particular de un Custom sObject con_ins_RiskComplianceProvider__c, validando que todos los registros tengan el field isActive__c en verdadero.



Los fields a obtener son Id, HttpMethod__c, Name, ServiceName__c.




En este punto y al ejecutar el PREVIEW podemos observar que para 2 registros devuelve un ARRAY, este comportamiento se repite si la cantidad de resultados es mayor a 2.

Pero, que sucede si la cantidad de registros devueltos es menor a 2? ahora lo veremos.


Si detallamos el Response, podemos observar que cuando la cantidad de registros es igual a uno, ya nuestra response deja de ser un ARRAY y se convierte en un sólo sObject

Pero y si no hay nada que devolver, que nos arroja el Response?


En este punto, ya nos podemos dar una idea de qué tenemos un problema, si la cantidad de elementos es menos a 2 el DataRaptor no interpreta y devuelve un Array, sino un Objeto individual. Lamentablemente este es el comportamiento estándar al momento de obtener datos que proviene del DataRaptor en Salesforce.

Si quisiéramos iterar sobre los elemento devueltos por el DataRaptor no podríamos, ya que no siempre tenemos un ARRAY o estructura donde iterar, por lo que solamente podremos hacer un LOOP siempre que tengamos 2 o más elementos devueltos, si sólo devolviera un registros no se ejecutaría nuestro LOOP.

Revisando si alguien mas a podido encontrarse con este inconveniente he llegado únicamente a este enlace: https://ufthelp.com/2020/06/17/how-to-enable-debug-mode-for-lightning-web-components/

Acá es donde nos tenemos que valer de algunos trucos o artimañas, en este caso de las FORMULAS para forzar a que siempre nos retorne un ARRAY sobre el cual podamos operar luego de ejecutado el DataRaptor.

El cual me dio una idea de lo que puedo hacer para aplicar modificaciones en la estructura del DataRaptor, entonces ahora si vamos con la solución:

1.- En la pestaña FORMULAS de nuestro DataRaptor agregaremos una nueva y en el campo Formula Result Path colocaremos el valor "providers",  como se muestra en la siguiente imagen:



2.- En la pestaña OUTPUT agregaremos los siguiente:


 La primera fila contiene lo que queremos recibir en nuestra devolución del DataRaptor, es decir, un atributo "providers" que deberá contener, siempre un ARRAY, no importa la cantidad de elementos que se devuelvan en la consulta, sea 0 registros, 1 registros o N registros.

Por lo que en la definición de Providers debemos indicar en Output Data Type, que será una Lista<Map> y en Default Value unos corchetes []




Para las siguientes filas bastará con indicar qué queremos que se devuelva en providers:id, para el caso de RiskComplianceActiveProvider:Id, que es el registro, estos hará que el valor se agregue dentro del ARRAY de providers

Quedando de la siguiente manera:


El resto de las filas las llenamos usando como modelo la de Id.

Ya podemos ir a la pestaña PREVIEW y ejecutar nuestro DataRaptor, podemos comprobar que revuelve lo que queremos correctamente para los siguiente casos:

1.- Sin registros devueltos:

2.- 1 registro devuelto:

3.- 2 o más registros devueltos:


Este es el comportamiento esperado, siempre retornar un ARRAY sin importar la cantidad de elementos que se consigan durante la ejecución del DataRaptor.

Comentarios

Entradas más populares de este blog

Cómo implementar una CUSTOMFUNCTION de Salesforce

Salesforce INVALID_FIELD_FOR_INSERT_UPDATE al actualizar Cuentas

Salesforce en Safari siempre cambia a modo tradicional en Salesforce