Saltar al contenido

Actualice Varios Objetivos Desde un Solo Registro de Origen

Caso de Uso

Donde una consultar o carga útil entrante contiene datos que requieren múltiples actualizaciones de un solo objeto de destino.

Nota

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

Ejemplo

El IDoc de SAP entrante contiene un precio único y el sistema SFDC de destino tiene una o más entradas del libro de precios que deben actualizarse. Este ejemplo utiliza 3 operaciones. El primero recibe un IDoc entrante de SAP, el segundo realiza una actualización a SFDC y el tercero realiza una inserción.

adjunto

La respuesta de IDoc se asigna a un archivo sin formato. Tenga en cuenta que el origen es jerárquico, mientras que el destino es plano. La línea generadora de color negro oscuro proviene del nodo más bajo de la fuente. Si la fuente tiene 1 registro en el primer nivel, dos registros en el segundo nivel y tres registros en el tercero, se generarán seis registros.

adjunto

Cada nodo en el destino asigna el valor a una variable global. Este es el valor 'Clave':

$clave=SALIDA$COND_A01.IDOC$E1KOMG$VAKEY$

Mediante el uso de variables globales, podemos llamar operaciones individualmente a través de secuencias de comandos y pasar los valores. Por lo general, las operaciones de este tipo no tienen origen.

Dado que Jitterbit realiza secuencias de comandos en el objetivo de forma secuencial, el secuencia de comandos que llama a las operaciones debe estar en el último nodo. Un método alternativo, y quizás el preferido, es crear una nueva condición y realizar las asignaciones en el nodo de condición (no confundir con la pestaña Condición). En este caso, la transformación original escribía en un archivo de texto y era más fácil hacer las asignaciones de valores individualmente. (Si usa un nodo de condición, no olvide pasar un valor verdadero como salida, o de lo contrario nunca se ejecutará.)

Volviendo al secuencia de comandos en Moneda, hay dos requisitos. Si un valor de condición es 923, ejecute upsert. Si un valor de condición es 304, ejecute la actualización.

Primero, el valor de este registro se asigna a una variable global y se escribe en el registro de operación. Luego evalúe si es un 923 o un 304. Si es un 923, entonces ejecutar una operación. Si es un 304, necesitamos hacer más procesamiento. Dado que puede haber más de un libro de precios que necesite una actualización, debemos consultar SFDC para obtener una lista, que se asigna a $pbeList. Esta es una matriz, por lo que a continuación iteramos a través de la matriz y llamamos a la operación de actualización. Tenga en cuenta que SFLookupAll devolverá una matriz, mientras que SFLookup devuelve un solo valor.

$currency=OUTPUT$COND_A01.IDOC$E1KOMG$E1KONH.E1KONP.KONWA$;
writetooperationlog("Currency "+$currency);
if($ConditionValue == "923", RunOperation("<TAG>Operations/Jitterbit Connect™/Salesforce Upserts/Upsert Contracted Prices</TAG>"));
if($ConditionValue == "304",
 $soql="SELECT Id from PricebookEntry WHERE Product2.ProductCode = '" + Right($material,4) + "' AND UseStandardPrice = TRUE";
 $pbeList = SfLookupAll("<TAG>Salesforce Orgs/jitterbit@XXXXX.com.devpro1 (Sandbox)</TAG>",$soql);
 WriteToOperationLog('PbeList=' + $pbeList);
 $c = length($pbeList);
 $i = 0;
 while( $i < $c,
 $pbeId = $pbeList[$i][0];
 WriteToOperationLog('PbeList=' + $pbeId + ' Price=' + $price);
 RunOperation("<TAG>Operations/Jitterbit Connect™/Salesforce Updates/Update Price Book Entries</TAG>");
 $i++)
)

Operación Upsert

Cuando este upsert se creó con el asistente, en el punto donde se selecciona una fuente, la elección realizada fue 'Ninguno' (es la última selección y se pasa por alto con frecuencia). Esto genera una transformación que no leerá desde un archivo de origen o una base de datos, sino que utiliza variables globales.

adjunto

El cliente eligió usar SFLookup para obtener las identificaciones de Cuenta y Producto. Secuencia de Comandos para SBQQ_Cuenta__c:

$material;
$soql="select id from Account where SAP_Key__c='"+$material+"'";
SfLookup("<TAG>Salesforce Orgs/jitterbit@XXXXX.com.devpro1 (Sandbox)</TAG>",$soql)

La alternativa a esto es pasar la variable global a las relaciones en el mapeo y dejar los campos en blanco. Es decir, abra SAP_Key__c y agregue $material. SFDC realizará la búsqueda de Cuenta y Producto automáticamente y completará los campos Cuenta__c y Producto__c. (Descubrirá que en Jitterbit, generalmente hay más de una forma de hacer lo mismo.)

Actualizar Operación

Esto es muy similar al ejemplo anterior. Dado que es una actualización, se requiere la identificación.

adjunto

Consulte también: Procesamiento de registros objetivo condicionalmente