Saltar al contenido

Procesar Registros de Destino Condicionalmente

Caso de Uso

Se debe procesar un conjunto de registros entrantes con varios registros y un subconjunto de registros. La carga útil del conjunto de registros puede ser el resultado de una consultar, pero se necesita un filtrado adicional.

Nota

Este patrón de diseño usa Design Studio como ejemplo; puede aplicar los mismos conceptos en Cloud Studio usando pasos similares.

Ejemplo

adjunto

La operación 0101 Query SF Accounts realiza una consultar de cuentas SFDC, luego crea clientes en NetSuite, que a su vez actualiza la cuenta SFDC. Un proceso de error actualiza las cuentas en una condición de error asociada con el tipo de plantilla PDF.

Los registros de Cuentas deben evaluarse registro por registro y, según el valor de un campo, procesarse en el escenario de éxito principal o pasar al procesamiento de errores.

adjunto

El uso de una condición en una transformación le permite evaluar cada registro. Si la condición se evalúa como verdadera, como en este caso, el registro se escribe en el archivo temporal. Si es falso, se salta.

Específicamente, los valores se pasan a RunScript(), que devolverá una cadena de "Error" si falla la búsqueda. Entonces, si la variable local "resultado" es igual a "Error", entonces se ejecuta la operación de falla, la variable local "condición" se establece en falso y se omite el registro.

// Skip records where the pdf template lookup is incorrect
result = RunScript("<TAG>Scripts/PDF Template Lookup</TAG>",
root$transaction.response$body$queryResponse$result$records.Account$CccccccAaaaaaaa_Entity__c$,
root$transaction.response$body$queryResponse$result$records.Account$CurrencyIsoCode$,
root$transaction.response$body$queryResponse$result$records.Account$Payment_Method__c$,
root$transaction.response$body$queryResponse$result$records.Account$BillingCountry$);
// Set Sync Error Code to 3 if cannot find a match. Determine if returned an "Error" or not.
WriteToOperationLog("Template Lookup: "+result);
If(result=="Error",
$Id = root$transaction.response$body$queryResponse$result$records.Account$Id$;
RunOperation("<TAG>Operations/01 SF->NS Create Customer/0199 Update Accounts PDF Template Error</TAG>");
 cond=false, cond=true);
cond

En aras de la exhaustividad del ejemplo, este es el RunScript() llamar. De interés es el uso de ArgumentList(), lo que permite que este secuencia de comandos se comporte como una función reutilizable:

ArgumentList(Sub,Cur,Pay,Cnt);
Case(
Sub=='CccccccAaaaaaa AU' && Cur=='AUD' && (Pay =='Check'||Pay =='Wire/EFT/BACS'||Pay == 'PayPal'),2,
Sub=='CccccccAaaaaaa AU' && Cur=='AUD' && (Pay =='Credit Card'||Pay == 'Bank Draft'||Pay == 'Direct Debit'),3,
Sub=='CccccccAaaaaaa Brands UK' && (Cur=='USD'||Cur=='EUR'||Cur=='GBP'),26,
Sub=='CccccccAaaaaaa YY LTDA' && Cur=='BRL',17,
Sub=='CccccccAaaaaaa Corporation' && Cur=='USD' && (Pay =='Check'||Pay =='Wire/EFT/BACS' ||Pay == 'PayPal') && Cnt != 'CccccccAaaaaaa',4,
Sub=='CccccccAaaaaaa Corporation' && Cur=='USD' && Cnt == 'CccccccAaaaaaa',5,
Sub=='CccccccAaaaaaa Corporation' && Cur=='USD' && (Pay =='Credit Card'||Pay == 'Bank Draft'||Pay == 'Direct Debit'),1,
Sub=='CccccccAaaaaaa Hong Kong' && Cur=='USD',19,
Sub=='CccccccAaaaaaa UK' && Cur=='GBP' && (Pay =='Check'||Pay =='Wire/EFT/BACS' ||Pay == 'PayPal'),6,
Sub=='CccccccAaaaaaa UK' && Cur=='EUR' && (Pay =='Credit Card'||Pay == 'Bank Draft'||Pay == 'Direct Debit'),24,
Sub=='CccccccAaaaaaa UK' && Cur=='GBP' && (Pay =='Credit Card'||Pay == 'Bank Draft'||Pay == 'Direct Debit'),7,
Sub=='CccccccAaaaaaa UK' && Cur=='EUR' && (Pay =='Check'||Pay =='Wire/EFT/BACS' ||Pay == 'PayPal'),8,
Sub=='CccccccAaaaaaa Washington LLC' && Cur=='USD' && (Pay =='Credit Card'||Pay == 'Bank Draft'||Pay == 'Direct Debit'),9,
Sub=='CccccccAaaaaaa Washington LLC' && Cur=='USD' && (Pay =='Check'||Pay =='Wire/EFT/BACS' ||Pay == 'PayPal'),10,
true,"Error"
)

Consulte también: Actualización de objetivos múltiples desde un único registro de origen