Processar Registros de Destino Condicionalmente
Caso de Uso
Registro de entrada definido com vários registros e um subconjunto de registros deve ser processado. A payload do conjunto de registros pode ser resultado de uma consultar, mas é necessária uma filtragem adicional.
Exemplo
A operação 0101 Query SF Accounts
executa uma consultar de contas SFDC e, em seguida, cria clientes no NetSuite, que por sua vez atualiza a conta SFDC. Um processo de erro atualiza contas em uma condição de erro associada ao tipo de modelo de PDF.
Os registros de Contas devem ser avaliados registro a registro e, dependendo do valor de um campo, processados no cenário principal de sucesso ou passados para processamento de erro.
O uso de uma condição em uma transformação permite avaliar cada registro. Se a condição for avaliada como verdadeira, como neste caso, o registro será gravado no arquivo temporário. Se falso, é ignorado.
Especificamente, os valores são passados para RunScript()
, que retornará uma string de "Error" se a pesquisa falhar. Portanto, se a variável local "resultado" for igual a "Error", a operação de falha será executada, a variável local "cond" será definida como falsa e o registro será ignorado.
// 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
Para completar o exemplo, este é o RunScript()
chamar. Interessante é o uso de ArgumentList()
, que permite que esse script se comporte como uma função reutilizável:
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 também: Atualizando vários destinos a partir de um único registro de origem