Zum Inhalt springen

Aktualisieren Sie mehrere Ziele aus einem einzigen Quelldatensatz in Jitterbit Design Studio

Anwendungsfall

Wenn eine Abfrage oder eingehende Payload Daten enthält, die mehrere Aktualisierungen eines einzelnen Zielobjekts erfordern.

Beispiel

Das eingehende SAP IDoc enthält einen einzelnen Preis und das Ziel-SFDC-System hat einen oder mehrere Preisbucheinträge, die aktualisiert werden müssen. In diesem Beispiel werden 3 Vorgänge verwendet. Der erste empfängt ein eingehendes IDoc von SAP, der zweite führt eine Aktualisierung für SFDC durch und der dritte führt ein Upsert durch.

Anhang

Die IDoc-Antwort wird einer flachen Datei zugeordnet. Beachten Sie, dass die Quelle hierarchisch ist, während das Ziel flach ist. Die dunkelschwarze Generatorlinie stammt vom untersten Knoten in der Quelle. Wenn die Quelle 1 Datensatz auf der ersten Ebene, zwei Datensätze auf der zweiten Ebene und drei Datensätze auf der dritten Ebene hat, werden sechs Datensätze generiert.

Anhang

Jeder Knoten im Ziel weist den Wert einer globalen Variable zu. Dies ist der „Schlüssel“-Wert:

$key=OUTPUT$COND_A01.IDOC$E1KOMG$VAKEY$

Durch die Verwendung globaler Variablen können wir Operationen einzeln über Skripting aufrufen und die Werte übergeben. Normalerweise haben Operationen dieser Art keine Quelle.

Da Jitterbit Skriptaktionen im Ziel sequenziell ausführt, muss sich das Script, das Operationen aufruft, im letzten Knoten befinden. Eine alternative und möglicherweise bevorzugte Methode besteht darin, eine neue Bedingung zu erstellen und die Zuweisungen im Bedingungsknoten auszuführen (nicht mit der Registerkarte „Bedingung“ verwechseln). In diesem Fall schrieb die ursprüngliche Transformation in eine Textdatei und es war einfacher, die Wertzuweisungen einzeln vorzunehmen. (Wenn Sie einen Bedingungsknoten verwenden, vergessen Sie nicht, einen wahren Wert als Ausgabe zu übergeben, da er sonst möglicherweise nie ausgeführt wird!)

Kommen wir zum Script in Currency - es gibt zwei Anforderungen. Wenn ein Bedingungswert 923 ist, führen Sie das Upsert aus. Wenn ein Bedingungswert 304 ist, führen Sie das Update aus.

Zuerst wird der Wert für diesen Datensatz einer globalen Variable zugewiesen und in das Operation geschrieben. Dann wird geprüft, ob es sich um 923 oder 304 handelt. Wenn es sich um 923 handelt, eine Operation Durchführen aus. Wenn es sich um 304 handelt, müssen wir weitere Verarbeitungsschritte durchführen. Da möglicherweise mehr als ein Preisbuch aktualisiert werden muss, müssen wir SFDC Abfrage, um eine Liste zu erhalten, die $pbeList zugewiesen wird. Dies ist ein Array, also durchlaufen wir als Nächstes das Array und rufen die Operation auf. Beachten Sie, dass SFLookupAll ein Array zurückgibt, während SFLookup einen einzelnen Wert zurückgibt.

$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++)
)

Upsert-Operation

Als dieser Upsert mithilfe des Assistenten erstellt wurde, lautete die getroffene Auswahl an der Stelle, an der eine Quelle ausgewählt wird, „Keine“ (dies ist die letzte Auswahl und wird häufig übersehen). Dadurch wird eine Transformation erstellt, die nicht aus einer Quelldatei oder einer Datenbank liest, sondern globale Variablen verwendet.

Anhang

Der Kunde hat sich entschieden, SFLookup zu verwenden, um die IDs für Konto und Produkt abzurufen. Script für SBQQ_Account__c:

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

Die Alternative hierzu besteht darin, die globale Variable an die Beziehungen im Mapping zu übergeben und die Felder leer zu lassen. Das heißt, öffnen Sie SAP_Key__c und fügen Sie $material hinzu. SFDC führt die Suche nach Konto und Produkt automatisch durch und füllt die Felder Account__c und Product__c aus. (Sie werden feststellen, dass es in Jitterbit normalerweise mehr als eine Möglichkeit gibt, dasselbe zu tun!)

Operation

Dies ist dem vorherigen Beispiel sehr ähnlich. Da es sich um ein Update handelt, ist die ID erforderlich.

Anhang

Siehe auch: Bedingte Verarbeitung von Zieldatensätzen