Update Data
Im Workflow Builder kannst du als Service Update Data hinzufügen.
Für jedes Feld kann hier eine VM Execution verwendet werden.
Die Grundfunktion der VM sieht wie folgt aus, wobei der return value immer an das entsprechende Feld angepasst werden muss:
(function(data){
return "";
})
Das data Object enthält den kompletten betreffenden Datensatz für den das Update ausgeführt wird.
Wenn man zum Beispiel ein Anrede-Feld aus Titel, Vorname und Nachname zusammensetzen möchte, würde es wie folgt aussehen:
(function(data){
let salutationParts = [];
if (data.title && data.title.length) {
salutationParts.push(data.title);
}
if (data.firstname && data.firstname.length) {
salutationParts.push(data.firstname);
}
if (data.lastname && data.lastname.length) {
salutationParts.push(data.lastname);
}
return salutationParts.join(" ");
})
Zusätzlich zu dem Datensatz können weitere Informationen in data übergeben werden. Diese Informationen sind abhängig davon, wo und wie die Action ausgelöst wird.
Wenn ein Datensatz erstellt oder aktualisiert wird, stehen zwei dieser zusätzlichen Informationen zur Verfügung.
data._triggerData: _triggerData enthält die Informationen, die eine Action ausgelöst haben. Falls es durch die Listeneinstellungen dazu führt, dass Daten nicht automatisch aktualisiert werden, können hier einzelne Informationen aus den data._triggerData geprüft werden, um damit Conditions aufzubauen und händisch Felder zu aktualisieren.
data._query: Wenn Daten über die API oder ein Formular übertragen werden. können die URL Query Parameter hinzugefügt werden, die den Datensatz nicht beeinflussen, aber für weitere Verarbeitungen als data._query Parameter zur Verfügung stehen.
Dies kann zum Beispiel hilfreich sein, wenn Daten aus unterschiedlichen Quellen kommen und man sie über eine Condition unterschiedlich verarbeiten will.
Wenn man Daten über einen Webhook-Service abholen und verarbeiten will, steht einem data._lastIntegrationData zur Verfügung. Wichtig ist, dass bei der Action Run Services Sequentially aktiviert ist. So können die Services in der angezeigten Reihenfolge ablaufen und es wird sichergestellt, dass die Daten zur Verfügung stehen, bevor man sie verarbeitet.
Damit kann man z. B. nachdem sich ein Shop-User angemeldet hat die API des Shops mit einem Webhook ansprechen um einen Gutschein zu generieren und diesen Gutschein dann mit einem Update Data zum Benutzer hinzufügen.
Anwendungsbeispiel: Die API des Shops wird mit einem Webhook angesprochen, um einen Gutschein zu generieren, nachdem sich ein User angemeldet hat. Der Gutschein wird mit durch Update Data zum User hinzugefügt.
Condition: Code Execution
In den Bedingungen kann man ebenfalls die VM benutzen, um Javascript anhand des Datensatzes auszuführen, dass ein true/false zurück gibt, um die Bedingung zu bestätigen oder zu verneinen.
(function(data){
return (data.email.substr(-3)==="gov");
})
In dieser VM hat man ebenfalls Zugriff auf data._query und data._triggerData.
Zusätzliche Informationen (Metrics & Tags)
Es gibt noch eine zusätzliche Information im data Object, das die Aktivitäten des Users und die internen JUNE Tags beinhaltet.
data._metrics = {
activity: {
website_tracking: [
{
action:"goal",
created_at:"2023-07-19T11:38:04.408Z",
name:"order-placed",
reference_type:"list",
reference_id:"649ea3eb410bdec9553884b3"
},
...
],
list_action: [
{
trigger:"on_website_goal",
id:"64a6c83489c9f9ef0984a7a9",
created_at:"2023-07-19T11:38:04.753Z"
},
...
],
campaign: [
{
action: "link",
created_at: "2023-07-19T14:46:10.742Z",
id: "64b7f69bc3ac24f1f1f909b8",
value: "https://juneapp.com/"
},
...
]
},
tags: [
"my-first-tag",
...
]
}
In einer VM arbeiten (Tips&Tricks)
Da du in einer VM arbeitest, hast du keinen Zugriff auf "normale" globals und prototypes wie in einem Browser. Versuche den Code möglichst simpel im ES5 Standard zu schreiben.
Du kannst keinen console.log() oder Ähnliches benutzen, um die Ausführung zu debugen/testen.
Um gechainte Variablen aufzurufen, sollte der Optional chaining Operator benutzt werden.
let firstname = data?._triggerData?.user?.first_name;
Datumsfelder sind in ISO Format abgespeichert. Wenn man mit einem Datum arbeiten, oder ein neues Datum speichern will, sollte man also das ISO Format returnen.
let now = new Date().toISOString();
Die API hinter der VM vertraut auf den Return-Wert, der zurückgegeben wird. Wenn hier also beispielsweise für den firstname:string ein NULL, oder undefined übergeben wird, wird daraus ein string gecastet. Im Datensatz wird dann für den firstname also "null", oder "undefined" stehen.