Q&A

Q&A

Wie bekomme ich den XML-Inhalt aus einem BASE64-Parameter?

Namespace rc.lib enthält entsprechende Funktionen:

Beispiel

// 1 => Uint8Array const outputParameterBin = job.outputParams.get("utfUserList").getBinaryValue(1); // 2 => UTF-8 const outputParameterStr = rc.lib.byteArrayToString(outputParameterBin,"utf-8"); rc.console.log(outputParameterStr);

Siehe auch IV8AppsParameter und rc.lib

Kann ich aus Skripten auch auf das Dateisystem zugreifen?

Ja, das ist möglich. Nachfolgend eine JS library, die verwendet werden kann, um sowohl auf UNICODE, als auch auf ASCII-Dateien lesend oder schreibend zuzugreifen:

fileHelper

// filehelper library // // library uses COM object FileSystemObject, installed in each windows and exports // basic reading and writing functions for ASCII or UNICODE data // code can be used as is on your own risk global.FSO = new rc.com.ActiveXObject("Scripting.FileSystemObject"); // function reads ANSI or UNICODE strings from file depends on given parameter unicode: true/false function readFile(fileName, unicode = true) { var stream; try { if(unicode) stream = FSO.OpenTextFile(fileName, 1, false, -1); // open only for reading, not create file if not exist, read unicode data else stream = FSO.OpenTextFile(fileName, 1, false, 0); // open only for reading, not create file if not exist, read ascii data } catch (e) { throw new Error('error occurs in FSO.OpenTextFile:\r\n' + e.message + "\r\nfileName: " + fileName); } var text = stream.ReadAll(); stream.Close(); return text; } // function creates ANSI or UNICODE file depends on given parameter unicode: true/false function writeFile(fileName, content, unicode = true) { var responseFile = FSO.CreateTextFile(fileName, true, unicode); // overwrite file if exists responseFile.Write(content); responseFile.Close(); } // exported functions of current java libray module.exports = { readFile: readFile, writeFile:writeFile, };

Wie initialisiere ich Variablen und Konstanten am besten zentral an einer Stelle?
In VB wird dieser Konstrukt gerne über Konstanten-Definitionen in den Global Scripts gemacht.

 In JS empfiehlt sich der Weg mit dem global-Objekt zu arbeiten und die Initialisierung von Konstanten und Variablen in eine Funktion auszulagern. Beispiel eines Ausschnitts aus einem WF-Script:

Code (Workflow Event)

... // do something initGlobals(); if(global.C_DEBUGLEVEL < 3) { writeLogging("something to log"); } // continue doing ...

mit folgender Definition der globalen Parameter im Global Workflow Script:

Code (Workflow, global script)

function initGlobals() { global.C_DEBUGLEVEL = 0 } function writeLogging(msg) { rc.apps.logger.flowEx("mylogfile.evn", "", "from script", global.C_DEBUGLEVEL, msg) }

Technical background: Die übliche Vorgehensweise aus VBS muss in JS anders geregelt werden, da der Script-Interpreter anderen Logiken folgt. In JS werden nicht zuerst Eventskript und Global Script geparst und alle Varianten- und Konstantendefinitionen ausgewertet. Der Scriptcode wird von oben bis unten durchlaufen. Das hat zur Folge, dass Variablen und Konstanten, die im Global Script definiert werden, im Eventscript und den darin enthaltenen Aufrufen von Global-Script-Funktionen nicht bekannt sind. Daher muss in JS das global-Objekt verwendet und dies um die nötigen Konstantendefinitionen angereichert werden.

Wie greife ich in workflowseitigen Serverskripten auf die Workflowvariablen eines Modells zu?

Um auf die Variablen eines Modells zuzugreifen, gibt es in JS-Skripten des Workflow folgende Möglichkeiten:

Beispiel

// if you named WF Variable in WF-Editor as DayOfTheWeek var myValue = wfVariables.DayOfTheWeek.Value; var myValue2 = wfVariables.Items("DayOfTheWeek").Value;