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

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.

outputParams

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

'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.

outputFiles

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

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

errorText