Verwendung von ou.spc-Skripten 🔥
In dringenden Ausnahmefällen soll der Consultant weiterhin die Möglichkeit haben, Standard sp-Skripte aushebeln zu können und eigene Logiken zu verwenden. Die eigene Logik bleibt daher auch nach einem Produktupdate vollständig erhalten. Sie muss nach einen Produktupdate aber manuell angeschaut und ggf. an Änderungen im Produkt angepasst werden. Die verwendung eines SPC-Scripts ist daher nicht automatisch "update safe"!
Achtung! Diese Logik sollte wirklich nur in Ausnahmefällen zum Einsatz kommen und wenn man wirklich weiß was man hier tut! Besser ist es, die Callbacks zu verwenden.
Skript-Parameter an spc-Skripten dürfen nicht verändert werden, da derartige Änderungen beim nächsten Upgrade wieder überschrieben werden!
Beispiel: SPC-Skript mit Exporten
Ausgangssituation ist ein spc-Skript mit dem Namen ou.spc.demo.example.
Das Skript sieht so aus:
context.enableModules();
const ScriptLoader = require("ou.sp.ScriptLoader").ScriptLoader;
module.exports = {
someSetting: "sp value",
sayHello: function (name) {
return "Hello " + name + " from spc-script";
},
};
module.exports = ScriptLoader.loadFailsafe("ou.cust.demo.example", module.exports);
Wird nun das spc-Skript geladen und ausgeführt, erhalten wir:
context.enableModules();
const example = require("ou.spc.demo.example");
const greetings = example.sayHello("chuck"); // "Hello chuck from spc-script"
const someSetting = example.someSetting; // "sp value"
Überschreiben der sp-Logik
Nun erstellen wir ein weiteres Skript ou.cust.demo.example:
context.enableModules();
module.exports = {
someSetting: "cust value",
sayHello: function (name) {
return "Hello " + name + " from cust-script";
},
};
Das module.exports Objekt muss dem spc Objekt-Struktur entsprechen!
Führen wir nun das obere Skript ou.cust.demo.scriptLoader nochmal aus, erhalten wir:
context.enableModules();
const example = require("ou.spc.demo.example");
const greetings = example.sayHello("chuck"); // "Hello chuck from cust-script"
const someSetting = example.someSetting; // "cust value"
Beispiel: SPC-Skript mit direkt ausführbarem Code
Hat ein Skript keine Exporte sondern enthält Code, der direkt ausgeführt wird, kann die spc-Logik ebenfalls überschrieben werden.
Ausgangsituation ist ein spc-Skript mit dem Namen ou.spc.demo.example.
Das Skript sieht so aus:
context.enableModules();
const ScriptLoader = require("ou.sp.ScriptLoader").ScriptLoader;
function executeDirectly() {
return "Hello from spc-script";
}
var custScript = ScriptLoader.loadFailsafe("ou.cust.demo.example");
if (custScript && typeof custScript.executeDirectly === "function") {
context.returnValue = custScript.executeDirectly();
} else {
context.returnValue = executeDirectly();
Existiert kein Skript mit dem Namen ou.cust.demo.example, ist der Ausgabewert dieses Skripts "Hello from spc-script".
Überschreiben der sp-Logik
Nun erstellen wir ein weiteres Skript ou.cust.demo.example
context.enableModules();
function executeDirectly() {
return "Hello from cust-script";
}
exports.executeDirectly = executeDirectly;
Wird nun das Skript ou.spc.demo.example ausgeführt, erhalten wir als Ausgabewert "Hello from cust-script".
Die Funktion im cust-Skript, die die sp-Logik überschreiben soll, muss, wie im Beispiel oben, über den key executeDirectly exportiert werden.