Mapp Script, Compound Widgets: Globale Funktionen?

Ich arbeite aktuell mit mapp Script bei Compound Widgets. Dabei fällt mir auf, dass ich in mehreren Compound Widgets immer wieder dieselbe Funktion benötige.

Gibt es mit mapp Script eine Möglichkeit, eine globale .eventscript-Datei im Projekt anzulegen und Funktionen darin zentral zu definieren, um Code-Duplizierung zu vermeiden?

Beispiel:

// Meine globalen Funktionen
function meineGlobaleFunktion(parameter1, parameter2) {
    // Irgendwelche Logik
    console.log("Aufruf mit:", parameter1, parameter2);
    // return Resultat
}

 

Diese Funktion würde ich in mehreren Compound widgets verwenden. Ich bin mir bewusst, das ich in der globalen Funktion nicht auf «widgets.» und «compound.» - Elemente zugreifen kann.

@hobi72 any idea how to help there?

of course :smiley:

mapp Script does currently not support includes or modules - so I’m afraid there is today no real solution.

Possible options:

  • Use your own scripts to “inject” the parts to be shared in your scripts.
  • contact local B&R office to place a product request.

And please keep in mind, that mapp Script is an add-on package, which requires a runtime license.

CHH

Thank you for your answer.

“Use your own scripts to ‘inject’ the parts to be shared into your scripts”
Could you explain how to implement the statement or provide an example?

In Javascript gibt es gewöhnlich import/export.

Da das von B&R explizit ausgeschlossen wurde, kann man nicht einfach Klassen oder ähnliches zentral verwalten.

Variante A: Skript schreiben, das als Precompile-Hook ausgeführt wird und aus deinem “zentralen .eventscript” die Klassen/Funktionen kopiert und in allen anderen .eventscript-Dateien ersetzt.

Variante B: Einen “dauerhaft laufenden Dienst” in einem .eventscript, der via Session-Variable angesprochen werden kann → mittels JSON-Klasse kann da viel gemacht werden. Natürlich muss man bei Parallelisierung auf einiges achten.

Variante C:

Variante D: WDTC, mappConnect