rc

rc

In jedem Skript steht weiterhin das Objekt rc zur Verfügung. Das Objekt dient dazu, alle Unterobjekte und Funktionen für den allgemeinen Zugriff auf das enaio®-System zusammenzufassen und dem Skript-Entwickler zur Verfügung zu stellen. Das Objekt rc beinhaltet:

  • require() – Methode zum Laden von Subskripten

  • result() – Methode zu Setzen/Lesen von Skriptergebnissen

  • custom – Objekt, in dem eigene Daten zum Austausch zwischen verschiedenen Skriptfunktionen hinterlegt werden können; siehe auch rc.custom

  • settings – Objekt mit Einstellungen, die per Skript gesetzt werden können; siehe auch rc.settings

  • console – Objekt für die Konsolenausgabe; siehe auch rc.console

  • com – Objekt mit Methoden für COM-Objekte etc.; siehe auch rc.com

  • lib – Objekt mit Hilfsmethoden; siehe auch rc.lib

  • inspector – Objekt mit Methoden für Inspector; siehe auch rc.inspector

  •  Eingabeobjekte – Daten, die dem Skript-Entwickler vom Server während der Ausführung des Skripts zur Verfügung gestellt werden

    • apps – Hier stellt enaio® server Daten und Objekte für die Skriptausführung zur Verfügung; siehe auch rc.apps

require(name)

name – String mit Skriptname. Das entsprechende Skript (== Subskript) wird geladen und ausgeführt. Das Ergebnis wird als Rückgabewert von require() geliefert. Es ist keine Kopie, sondern eine Referenz. Diese Referenz wird intern gespeichert und bei weiteren Aufrufen von require() mit dem gleichen Namen zurückgegeben. Der Skriptname wird im Skripteditor von enaio® client festgelegt und muss hier exakt eingegeben werden. Zyklische Aufrufe von require() sind nicht erlaubt.

Beispiel:

Code (main script)

const U = require('utils') U.readAnsiFile("c:\\temp\\1.txt");

Code (library script)

global.FSO = new rc.com.ActiveXObject("Scripting.FileSystemObject");   function readAnsiFile(fileName) {     var stream;     try {         stream = FSO.OpenTextFile(fileName);     } catch (e) {         throw new Error('Fehler beim FSO.OpenTextFile:\r\n' + e.message + "\r\nfileName: " + fileName);     }     var text = stream.ReadAll();     stream.Close();     return text; }   function writeAnsiFile(fileName, content) {     var responseFile = FSO.CreateTextFile(fileName);     responseFile.Write(content);     responseFile.Close(); }   module.exports = {     readAnsiFile: readAnsiFile,     writeAnsiFile:writeAnsiFile };

result()

Das Ergebnis des Skripts wird zu VARIANT konvertiert und dem Aufrufer (C++ Code) bereitgestellt. Falls das Skriptergebnis nicht zu VARIANT konvertierbar ist, wird ein Fehler generiert. Das kann auch ein Promise sein, allerdings muss der Status von Promise muss resolved sein. Das Ergebnis des Skripts ist die letzte Expression im Skript (das kann auch undefined sein). Mit result(value) kann man den Rückgabewert besser kontrollieren. result(value) kann an beliebiger Stelle aufgerufen werden und übersteuert die letzte Expression des Skripts. Allerdings übersteuert der Aufruf von result(undefined) die letzte Expression des Skripts nicht, result(null) dagegen schon. Falls das Skript unbedingt ein undefined liefern will, kann undefined; am Ende des Skripts geschrieben werden.
Mit Aufruf ohne den Parameter result() kann man den zuletzt gesetzten (per result(value)) Wert lesen.

Das Skriptergebnis wird abhängig von der Stelle interpretiert, an dem das Skript aufgerufen wurde.

  • Bei KDE-Before, falls nicht undefined, wird der Wert per VariantChangeType nach VT_BOOL konvertiert. Bei FALSE wird der Job nicht weiter ausgeführt.

  • Bei KDE-After wird es nicht ausgewertet

  • Bei JDE wird es pro JDE unterschiedlich behandelt

  • Bei krn.RunScript, falls nicht undefined und nicht null, wird es zum Ausgabeparameter $ScriptResult$ des Jobs gemacht

Code

rc.result(4711); var a = rc.result() + 1; rc.console.log(a);

Output

4712