13. Februar 2024Script ActionWorkflow Designer
Aufrufen von Actions innerhalb der „Script Action“
- Startseite
- /iTWO Insights
- /Aufrufen von Actions innerhalb der „Script Action“
Sinn und Zweck
Mit der „Script Action“ können wir Parameter in Form von lokalen und globale Variablen (im Context Objekt) definieren. Wir können auch Funktionen erstellen – diese können aber nur lokal, also innerhalb einer Script-Action Instanz verwendet werden. Im Gegensatz dazu können die von iTwo bereitgestellten Actions als globale Funktionen in jeder Script Action aufgerufen werden (statt diese wie üblich als grafische Elemente in den Workflow einzufügen). Mehrere Actions können so innerhalb einer Script-Action Instanz verknüpft werden.
Workflow Action Details
Relevante Details wie Funktionsparameter, Datentypen und ‚Use Cases’ zu sämtlichen Actions finden wir in der Hilfe unter: Administration -> Workflow Designer -> Designer/ Workflow Action Detail.
Beispiel: Daten von der DB abrufen, verarbeiten und speichern
Angenommen wir haben ein neues Angebot für einen Kunden erstellt und brauchen Information zum dazugehörigen Bauprojekt. Hierzu können wir in einer Script-Action direkt auf die Datenbank per SQL-Action zugreifen und die benötigten Daten laden:
var selectProjectData = "select ID, PROJECTNO, PROJECT_NAME from PRJ_PROJECT where ID=" + Context.Entity.ProjectFk;
Context.linkedProject = ActionUtil.ExecuteAction(
Actions.SQL_Action_First_Object,
{ SQL: selectProjectData,
Params: "" }
).Output;
Die Projektdaten können wir nun verarbeiten, gegebenenfalls umformatieren, die Werte in den entsprechenden Felder in der Datenbank aktualisieren und im Anschluss etwa per Email an den Kunden weiterleiten.
Wir stellen fest, dass die Datumsangaben bezüglich Projektbeginn und Abschluss im falschen Format vorliegen (z.B. als ISO-String) und formatieren die Daten entsprechend um, um diese in die Email einzufügen:
Etwa so:
var formattedStartDate = new Date(Context.linkedProject.START_DATE).toLocaleDateString('de-DE');
var formattedEndDate = new Date(Context.linkedProject.END_DATE).toLocaleDateString('de-DE');
Bevor wir die Email versenden, schreiben wir die formatierten Datenstrings zurück in die DB, indem wir ein entsprechendes Update-Statement ausführen.
Hierzu verwenden wir wieder die SQL-Action, z. B.:
var updateMyFields = “update PRJ_HEADER set START_DATE = ‘ “ + formattedStartDate + ” ’, END_DATE = ‘ “ + formattedEndDate + ” ‘ where ID=" + Context.Entity.ProjectFk”;
Beachte, dass wir JavaScript ES5 verwenden und StringLiterals nicht akzeptiert werden. Im SQL-Statement müssen die Datumsangaben wie alle Strings in „single quotes“ (‘) eingefügt werden.
und dann:
Context.updateResult = ActionUtil.ExecuteAction(
Actions.SQL_Action,
{ SQL: updateMyFields,
Params: "" }
).Output;
Jetzt können wir die Email versenden. Betreff und den Emailtext packen wir in Variablen und übergeben diese an die Email-Action:
var emailSubject = “Das neue Projekt {{Context.projectDetails}}”;
var emailBody = “<p>Hallo Kunde XY, Lorem ipsum … </p> <table> \
<tr> \
<td><strong>Projektbeginn:</strong></td> \
<td>{{formattedStartDate}}</td> \
</tr> \
<tr> \
<td><strong>Abschluss:</strong></td> \
<td>{{formattedEndDate}}</td> \
</tr> \
</table> \
. <p>Lorem ipsum</p> \
“;
Dann übergeben wir sämtliche E-Mail-Parameter an die Email-Action, also:
From: Absenderadresse als String (benötigt),
Receivers: Empfängeradresse als String bzw. mehrere Adressen als List. (benötigt)
CC, BCC: wie oben (optional),
Body: Emailtext als String, kann HTML Tags enthalten und entsprechend formatiert werden
Subject: Betreffzeile als String,
Attachements, ReplyToList, HTML, SaveMail: ignorieren wir
Also zum Beispiel:
Context.SafeLinkUrl = ActionUtil.ExecuteAction('a4efd9866b2b424b9e37f5f681d58bd8',
{
From: "no-reply@mycompany.com",
Receivers: "kundexy@mycustomer.org",
CC: "myboss@mycompany.com",
BCC: "",
Body: emailBody,
Subject: emailSubject,
Attachements: "",
ReplyToList: "",
HTML: "",
SaveMail: ""
}).DocId;
Fertig! ;)
zurück zur Übersicht