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 Subskriptenresult()
– Methode zu Setzen/Lesen von Skriptergebnissencustom
– Objekt, in dem eigene Daten zum Austausch zwischen verschiedenen Skriptfunktionen hinterlegt werden können; siehe auch rc.customsettings
– Objekt mit Einstellungen, die per Skript gesetzt werden können; siehe auch rc.settingsconsole
– Objekt für die Konsolenausgabe; siehe auch rc.consolecom
– Objekt mit Methoden für COM-Objekte etc.; siehe auch rc.comlib
– Objekt mit Hilfsmethoden; siehe auch rc.libinspector
– Objekt mit Methoden für Inspector; siehe auch rc.inspectorEingabeobjekte – 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 perVariantChangeType
nachVT_BOOL
konvertiert. BeiFALSE
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 nichtnull
, wird es zum Ausgabeparameter$ScriptResult$
des Jobs gemacht
Code
rc.result(4711);
var a = rc.result() + 1;
rc.console.log(a);
Output
4712