/
rc.apps

rc.apps

In diesem Javascript-Objekt werden die Möglichkeiten für eine Skriptsteuerung von Serverjobs (für KDE, JDE, krn.RunScript) bereitgestellt. Es enthält außerdem Funktionen für den Zugriff auf wichtige Eigenschaften von enaio®.

rc.apps ist ein COM-Objekt (IV8Apps), dessen TypInfo bei Bedarf mit rc.com.typeInfo(rc.apps) analysiert werden kann. 

rc.apps hat folgende Propertys, die zum Teil in eigenen Artikeln beschrieben werden:

Name

Typ

get

put

Name

Typ

get

put

misc

IV8AppsMisc

+

 

logger

IV8AppsLogger

+

 

server

IV8AppsServer

+

 

session

IV8AppsSession

+

 

registry

IV8AppsRegistry

+

 

jobs

IV8AppsJobs

+

 

inputParams

IV8AppsParameterList

+

 

outputParams

IV8AppsParameterList

+

 

inputFiles

array of string

+

+

outputFiles

array of string

+

+

responseResult

LONG

+

+

errorText

string

+

+

Code

rc.console.log(JSON.stringify(rc.apps,null,3));
{ "__Type": "IV8Apps", "session": { "userName": "root", "userID": 14, "userGUID": "7DBDAFA4734A4A1CA87DB3C28FB5D571", "supervisor": -1, "statName": "127.0.0.1", "statGUID": "A8114731FA4A411488B6F56FD43232A5", "sessGUID": "FB5AF7EF389341ABA0B50529B5084E4D", "langID": 7, "instName": "node" }, "server": { "userDir": "D:\\as\\as1010\\u_1\\Data\\etc\\user\\", "tempDir": "d:\\dvp\\as1010\\appserver\\debug\\runw64\\ostemp\\", "state": 1, "service": "as1010u_1", "serverID": 3, "rootDir": "d:\\dvp\\as1010\\appserver\\debug\\runw64\\", "logDir": "D:\\dvp\\AS1010\\appserver\\debug\\log\\", "groupID": 3, "dataDir": "D:\\as\\as1010\\u_1\\Data\\", "connect": "127.0.0.1#4000", "confDir": "D:\\as\\as1010\\u_1\\Data\\etc\\" }, "responseResult": 0, "registry": {}, "outputParams": { "names": [], "length": 0 }, "outputFiles": [], "misc": { "useNewDB": false, "threadID": 22340, "jobsStack": [ { "parameters": { "names": [ "CtxName", "Eval", "Flags", "GUI", "IsJS", "Script" ], "length": 6 }, "name": "krn.RunScript" } ], "jobNumber": 17, "isAnsiDB": false }, "logger": {}, "jobs": {}, "inputParams": { "names": [], "length": 0 }, "inputFiles": [], "errorText": "" }

misc

Siehe IV8AppsMisc. Hier werden verschiedene Funktionen zum Arbeiten mit enaio® vorgehalten.  

logger

Siehe IV8AppsLogger. Hier werden Funktionen zum Schreiben von Protokolleinträgen aus Skripten zur Verfügung gestellt.

server

Siehe IV8AppsServer. Dieser Bereich beinhaltet Funktionen zum Auslesen von zentralen Servereigenschaften.

session

Siehe IV8AppsSession. Dieser Bereich beinhaltet Funktionen zum Auslesen der Eigenschaften der aktuellen Benutzersession.

registry

Siehe IV8AppsRegistry. Hier werden Funktionen zum Lesen und Ändern der Serverregistry zur Verfügung gestellt.

jobs

Siehe IV8AppsJobs. Hier werden Funktionen für den skriptseitigen Aufruf weiterer Serverjobs vorgehalten.

inputParams

Siehe IV8AppsParameterList. Der Inhalt der Liste hängt davon ab, in welchem Kontext das Skript aufgerufen wird.

  • KDE-Before-Skripte: Eingabeparameter des Jobs. Nachdem das Skript ausgeführt wurde und ggf. diese Parameterliste manipuliert wurde, wird die Liste als Eingangsparameter für die Ausführung des eigentlichen Jobs verwendet.

  • KDE-After-Skripte: Eingabeparameter des Jobs. Diese Liste ist schreibgeschützt. Da die Jobausführung bereits beendet ist, lassen sich in diesem Skript keine Eingangsparameter wirksam manipulieren.

  • JDE-Skripte: In diesem Fall wird diese Liste pro JDE unterschiedlich befüllt, s. Dokumentation zu enaio® server-api.

  • krn.RunScript: Hier ist auch möglich, inputParams zu definieren, s. Dokumentation zu enaio® server-api (in der Beschreibung von krn.RunScript).

outputParams

Siehe IV8AppsParameterList. Der Inhalt der Liste hängt davon ab, in welchem Kontext das Skript aufgerufen wird.

  • KDE-Before Skripte: Da der Job zur Laufzeit des Skripts noch nicht ausgeführt wurde, ist diese Liste leer. Über eine Manipulation dieser Liste im Skript ist es möglich zusätzliche Ausgabeparamater zu erzeugen, die nach der Ausführung des Jobs an den Aufrufer übergeben werden. Werden in diesem Skript bekannte Ausgabeparamter des Jobs manipuliert, so werden diese bei der Ausführung des Jobs wieder überschrieben. 

  • KDE-After Skripte: Hier stellt der Parameter die Ausgabeparameter des Jobs dar. Das Skript kann diese Liste manipulieren. Entweder können im Skript weitere Ausgabeparameter ergänzt oder vorhandene geändert werden. Es ist aber nicht möglich, vorhandene Ausgabeparameter zu löschen. 

  • JDE Skripte: In diesem Fall wird diese Liste pro JDE unterschiedlich behandelt, s. Dokumentation zu enaio® server-api.

  • krn.RunScript: Hier stellt der Parameter eine Liste der Ausgabeparameter des Jobs dar. Das Skript kann diese Liste manipulieren. Entweder im Skript weitere Ausgabeparameter ergänzt oder vorhandene geändert werden. Es ist aber nicht möglich, vorhandene Ausgabeparameter zu löschen. 

'use strict';   /* krn.RunScript wurde mit folgenden Paramter aufgerufen:   $SP_1_name$: "p1", $SP_1_value$: "v1", $SP_2_name$: "p2", $SP_2_value$: "v2" */   const inputParams = rc.apps.inputParams;   for (const name of inputParams.names) {     rc.console.log("Input parameter " + name + " = " + inputParams.get(name).value); }   const outputParams = rc.apps.outputParams;   outputParams.set("op0","0-0-0"); outputParams.set("op1","aa"); outputParams.set("op1","a"); outputParams.set("op2",22); outputParams.set("op2",2); outputParams.set("op3",3.3); outputParams.set("op4",true); outputParams.set("op4",false); outputParams.remove("op0"); outputParams.rawSet("op5","5",2);   for (const name of outputParams.names) {     rc.console.log("Output parameter " + name + " = " + outputParams.get(name).value); }
Input parameter p1 = v1 Input parameter p2 = v2 Output parameter op1 = a Output parameter op2 = 2 Output parameter op3 = 3.3 Output parameter op4 = false Output parameter op5 = 5

inputFiles 

 Der Inhalt der Liste hängt davon ab, in welchem Kontext das Skript aufgerufen wird.

  • KDE-Before Skripte: Hier stellt der Parameter eine Liste von Eingabedateien des Jobs dar. Sollen diese manipuliert werden, kann das Skript dies über outputFiles tun.

  • KDE-After Skripte: Hier stellt der Parameter eine Liste von Ausgabedateien des Jobs dar. Sollen diese manipuliert werden, kann das Skript dies über outputFiles tun.

  • JDE Skripte: In diesem Fall wird diese Liste pro JDE unterschiedlich behandelt,  s. Dokumentation zu enaio® server-api.

  • krn.RunScript:  Hier stellt der Parameter eine Liste von Eingabedateien des Jobs dar.

outputFiles

Der Inhalt der Liste hängt davon ab, in welchem Kontext das Skript aufgerufen wird.

  • KDE-Before Skripte: Hier stellt der Parameter eine Liste von Eingabedateien des Jobs dar. Diese Liste ist per Default leer, was bedeutet, dass die Eingabedateien des Jobs nicht durch das Skript geändert werden. Soll diese Liste geändert werden, müssen die Eingabedateien ggf. aus den InputFiles in die OutputFiles übertragen werden. Es ist weiterhin möglich, zusätzliche Dateien per Skript zu ergänzen. Soll die Liste der Eingabedateien des Jobs explizit geleert werden, dann muss im Skript in die Liste outputFiles ein einziges Element eintragen werden: *NO*FILES*.

  • KDE-After Skripte: Hier stellt der Parameter eine Liste von Ausgabedateien des Jobs dar. Diese Liste ist per Default leer, was bedeutet, dass die Ausgabedateien des Jobs nicht durch das Skript geändert werden. Soll diese Liste geändert werden, so müssen die Ausgangsdateien ggf. aus den InputFiles in die OutputFiles übertragen werden. Es ist weiterhin möglich, zusätzliche Dateien per Skript zu ergänzen. Soll die Liste der Ausgabedateien des Jobs explizit geleert werden, dann muss im Skript in die Liste outputFiles ein einziges Element eintragen werden: *NO*FILES*.

  • JDE Skripte: In diesem Fall wird diese Liste pro JDE unterschiedlich behandelt,  s. Dokumentation zu enaio® server-api.

  • krn.RunScript: Hier stellt der Parameter eine Liste von Ausgabedateien des Jobs dar. Sollen von einem RunSkript-Aufruf Dateien an den Aufrufer zurückgegeben werden, so muss diese Liste an dieser Stelle per Skript gefüllt werden.

Wichtig:
Das Anpassen der Parameter inputFiles und  outputFiles in JDE/KDE-Skripten verlangt umfangreiches Wissen über die internen Mechanismen von enaio® und sollte nur nach Rücksprache mit dem Developer Support von OPTIMAL SYSTEMS erfolgen. Serverjobs, die clientseitig aufgerufen werden, können in ihrer internen Abarbeitung weitere interne Jobs aufrufen. An jedem dieser externen und internen Jobs können eigene JDE/KDE-Skripte hängen. Daher ist an dieser Stelle internes Wissen über die jeweiligen Mechanismen beim Löschen von temporären Dateien in den einzelnen Serverjobs wichtig, um das Überlaufen des temporären Verzeichnisses von enaio® server (Verzeichnis ostemp) zu verhindern.

krn.RunScript löscht die Eingabedateien (falls sie vom Skript nicht bereits gelöscht wurden). Allerdings kann mit dem Parameter Flags=1 dieses Löschen ausgeschaltet werden.

 

Eingabedateien eines Jobs (von enaio® server per TCP empfangen) werden im Verzeichnis ostemp abgelegt und dort üblicherweise nach dem Muster jp4_G-U-I-D.xxx benannt. Der Job kann diese Dateien kopieren, umbenennen etc. Der Job ist dafür verantwortlich, die Dateien aus dem Verzeichnis ostemp zu entfernen. Bei internen Jobs müssen diese zwei Jobs (der ursprüngliche, der per TCP ankommt, und der interne) untereinander regeln, wer die Dateien aus derm Verzeichnis ostemp entfernt. Dies kann je nach Intention und Architektur des Jobs unterschiedlich geregelt sein. Das gilt auch für KDE-Before, wenn das Skript nicht die Eingabedateien an den Job weiterleitet, sondern die Liste von Dateien ändert.

Ausgabedateien eines Jobs können "echte" Dateien sein (z. B. Dateien aus den Verzeichnissen CACHE oder WORK, die nicht gelöscht werden dürfen) oder es können temporäre Dateien sein (z. B. werden Dateien aus dem Verzeichnis WORK im Verzeichnis ostemp entschlüsselt). Die Dateien müssen an den enaio® client gesendet werden. Das passiert im Kernel von enaio® server nachdem der Job beendet wurde. Der Job hat damit keine Möglichkeit die temporären Dateien zu löschen, da dies vom Kernel selbst nach der Übertragung zu enaio® client übernommen wird. Der Job muss also dem Kernel übermitteln, ob es sich um eine temporäre Datei handelt oder nicht. Das wird gemacht, indem der Job dem Dateinamen vorne ein ? anhängt. Der Unterschied zwischen temporären Dateien und "echten" Dateien muss im Skript berücksichtigt werden. Wenn die Dateiliste im Skript nicht geändert wird, dann passiert alles automatisch. Falls diese geändert wird muss der Skriptentwickler die temporären Dateien an geeigneter Stelle selbst löschen.

Auch wenn das Skript intern einen Job aufruft, kann dieser Job temporäre Dateien erzeugen. In diesem Fall muss das Skript analog zum Kernel (nach dem Jobaufruf) handeln. Die temporären Dateien müssen gelöscht werden, falls sie nur für das Skript relevant sind und nicht an enaio® client gesendet werden sollen.

Codebeispiel (krn.runScript mit einer Datei und Flags = 0

const FSO = new rc.com.ActiveXObject("Scripting.FileSystemObject") const outputFiles = []; for (const fileName of rc.apps.inputFiles) {     rc.console.log("Input file: " + fileName);     const arr = fileName.split('.')     const newFileName = arr.join('.') + '.renamed.' + arr[arr.length - 1];     FSO.MoveFile(fileName,newFileName);     outputFiles.push('?' + newFileName); } rc.apps.outputFiles = outputFiles; true; // ansonsten kommt ein Fehler, weil ein Array nach job_param nicht konvertierbar ist
Input file: d:\dvp\as1010\appserver\debug\runw64\ostemp\jp4_A0E0E90CC3C14DD1B5C1D309204A351B.txt   // Die Datei kommt an den Aufrufer zurück und wird aus ostemp durch Kernel entfernt

responseResult

  • KDE-Before Skripte: Wenn das Skript diesen Wert ungleich 0 setzt, wird der Job nicht weiter ausgeführt.

  • KDE-After Skripte:  In diesem Fall steht hier der logische Rückgabewert des Jobs (ein Fehler-Code oder 0 bei erfolgreich ausgeführtem Job). Nachdem das Skript ausgeführt wurde, kopiert enaio® server diesen Wert in dwResponseResult des Jobs. Damit der erfolgreiche Job als fehlerhaft (für den Aufrufer) markiert wird (bzw. ein fehlerhafter Job als fehlerfrei). Der Job selbst ist an dieser Stelle aber bereits ausgeführt und seine Logik wird damit nachträglich nicht beeinflusst.

  • JDE Skripte: In diesem Fall wird dieser Wert pro JDE unterschiedlich behandelt, s. Dokumentation zu enaio® server-api.

  • krn.RunScript:  wertet rc.apps.responseResult nicht aus

errorText

  • KDE-Before Skripte: Üblicherweise ist dieser Wert leer. Falls das Skript dort etwas einträgt, wird der Text in die ErrorList des Jobs kopiert.

  • KDE-After Skripte: Üblicherweise ist dieser Wert leer. Falls das Skript dort etwas einträgt, wird der Text in die ErrorList des Jobs kopiert.

  • JDE Skripte: In diesem Fall wird dieser Wert pro JDE unterschiedlich behandelt,  s. Dokumentation zu enaio® server-api.

  • krn.RunScript: wertet rc.apps.errorText nicht aus.

Related content