Funktion Mit der CallJS-Anweisung können Sie eine JavaScript-Funktion aufrufen.
Beispiele

Weitere Beispiele und Erläuterungen
CallJS msg = test1

CallJS msg = mytestlib.test1

Die JavaScript-Funktion "test1" wird aufgerufen. Das Ergebnis der Funktion wird in die GuiXT Variable V[msg] gestellt.

Format Es gibt zwei unterschiedliche Notationen, je nachdem ob Sie JavaScript im älteren IE-Modus oder im Chromium-Modus ausführen möchten:

// IE Modus
CallJS funcname "par1" "par2" "par2" ...
CallJS varname = funcname "par1" "par2" "par3" ...

// Chromium Modus (mit Angabe des 'libname' vor dem Funktionsnamen)
CallJS libname.funcname "par1" "par2" "par2" ...
CallJS varname = libname.funcname "par1" "par2" "par3" ...

Mit beiden Notation wird die JavaScript Funktion "funcname" aufgerufen. Die angegebenen Strings "par1", "par2",... werden an die Funktion als Parameter übergeben und der Rückgabewert der Funktion wird in die GuiXT Resultatvariable gestellt.

  • Im IE-Modus wird die Funktion in den JavaScript Dateien gesucht, die im GuiXT Profile angegeben sind. Diese Dateien werden insgesamt in das Windows Browser-Control geladen und dort ausgeführt.
  • Im Chromium Modus wird aus dem angegebenen libname, z.B. "jsExcel", der Dateiname "jsExcel.html" gebildet. Diese HTML-Datei wird in den Scriptverzeichnissen gesucht und in die WebView2-Runtime geladen. Die Funktion wird anschließend in der WebView2-Runtime ausgeführt.
Für neue GuiXT Projekte ist der Chromium-Modus zu empfehlen, da dann der neueste ECMA-Script Standard zur Verfügung steht, während das IE-Control ECMAScript 5 (ES5) realisiert. Moderne ECMAScript-Features (ES6 und neuer) wie let, const, Arrow Functions oder Promises sind im IE-Modus nicht verfügbar. Allerdings ist der Aufruf selbst im IE-Modus schneller und die Unterstützung von ActiveX-Objekten ist im IE-Debugging-Modus besser als im Chromium-Debugger.

Zukunftssicherheit: Das im IE-Modus von GuiXT verwendete Webbrowser-Control ist im Edge Browser Grundlage des "Internet Explorer Mode", der von Microsoft bis 2029 garantiert ist. Ab 2030 könnte aber ein Umstieg auf Chromium erforderlich sein.
Sicherheit JavaScript ist durch die Möglichkeit, ActiveX Controls zu verwenden, in ähnlicher Weise wie z.B. Visual Basic, Java oder C++ in der Lage, auf einem PC Schaden anzurichten, zum Beispiel Dateien zu löschen oder Registry-Werte zu ändern. Deshalb sind vor der Verteilung von JavaScript-Dateien die gleichen Anforderungen an Test und Qualitätskontrolle zu stellen wie an direkt ausführbare Programme anderer Programmiersprachen.
Details zum Ablauf
im IE-Modus
Bei der ersten Ausführung einer CallJS-Anweisung pro SAP GUI Modus werden alle im GuiXT Profile angegebenen JavaScript Bibliotheken (.js Dateien) geladen. Die Funktionsnamen und globalen Variablen müssen über alle angegebenen Dateien hinweg eindeutig sein, da beim Laden der Dateien nur ein einziger globaler Namensraum verwendet wird. Anweisungen in den JavaScript-Dateien, die sich ausserhalb von Funktionen befinden, werden beim Laden sofort ausgeführt. Globale JavaScript Variablen behalten innerhalb eines SAP GUI Modus ihren Wert.

Sie können die JavaScript-Dateien im SAP MIME Repository ablegen und zentral pflegen, was die Qualitätskontrolle erleichtert. In der Konfigurationsdatei "guixt.ini" werden durch die folgenden Anweisungen drei JavaScript Dateien aus dem SAP MIME Repository geladen:

JSLibrary  SAPMR:SAP/BC/BSP/SAP/GUIXT/JS/jslib01.js
JSLibrary  SAPMR:SAP/BC/BSP/SAP/GUIXT/JS/jslib02.js
JSLibrary  SAPMR:SAP/BC/BSP/SAP/GUIXT/JS/jslib03.js

Syntaxfehler in einer der JavaScript Bibliotheksdateien sollte man vermeiden, da das Laden der Funktionen dann mit einer Fehlermeldung abgebrochen wird. Am besten die JavaScript- Funktionen in einem  JavaScript Editor schreiben und dort die Syntax überprüfen.

Die Parameterübergabe an die JavaScript Funktion erfolgt als Wertübergabe von Strings, ebenso wird der Funktionswert der JavaScript Funktion bei der Rückkehr als String in die GuiXT-Variable gestellt. Einzige Ausnahme sind dabei Objektreferenzen.

JavaScript ist eine objektbasierte Sprache, in der Sie Objekte dynamisch erzeugen können. Dabei kann es sich entweder um ActiveX Komponenten handeln, die Sie mit guixt.CreateObject() anlegen oder über die GuiXT Control-Anweisung erzeugen, oder JavaScript Objekte.

Die Parameterübergabe von Objektreferenzen an GuiXT Variablen ist in beide Richtungen möglich. GuiXT benutzt dazu eine String-Darstellung der Objektreferenz und konvertiert automatisch zwischen der Stringdarstellung und der Objektreferenz (technisch: eine "IDispatch" Schnittstelle).

Details zum Ablauf
im Chromium-Modus
Bei der ersten Ausführung einer CallJS-Anweisung pro SAP GUI Modus wird die HTML-Datei libname.html in den Scriptverzeichnissen gesucht und in die WebView2-Umgebung geladen. Die Funktionsnamen und globalen Variablen müssen dabei nur innerhalb der HTML-Datei eindeutig sein. Globale JavaScript Variablen in der HTML-Datei behalten innerhalb eines SAP GUI Modus ihren Wert.

Die Übergabe von Objektreferenzen ist hierbei im Unterschied zum IE-Modus nicht möglich. Sie können jedoch das guixthost-Objekt in JavaScript verwenden, um Objektreferenzen zwischen JavaScript und GuiXT zu übertragen. Beispiele finden Sie unter dem oben im Abschnitt Beispiel angegebenen Link "Beispiele und Erläuterungen".

WebView und CallJS
im Chromium-Modus
Falls Sie eine HTML-Datei mit der Anweisung

WebView ... name="mywebview"

anzeigen, können Sie JavaScript-Funktionen in der angezeigten HTML-Datei aufrufen, indem Sie als libname in eckigen Klammern die WebView-Variable angeben:

CallJS <mywebview>.funcname "par1" "par2" "par2" ...

Damit können Sie z.B.  dynamisch Anzeigeattribute der HTML-Datei steuern.  Beispiele finden Sie unter dem oben im Abschnitt Beispiel angegebenen Link "Beispiele und Erläuterungen".
Komponente GuiXT + Controls