Zum Hauptinhalt springen

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"!

gefahr

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.

gefahr

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:

ou.spc.demo.example
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:

ou.cust.demo.scriptLoader
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";
},
};
warnung

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:

ou.cust.demo.scriptLoader
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:

ou.spc.demo.example
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

ou.spc.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".

warnung

Die Funktion im cust-Skript, die die sp-Logik überschreiben soll, muss, wie im Beispiel oben, über den key executeDirectly exportiert werden.