Wo kann man sich einklinken?

J-Adapter (Extension für Server)

Benennung: Scriptname_J.js (wobei "Scriptname" variabel ist)

Verwendungszweck: Beeinflussung des Verhaltens eines J-Adapters eines bestimmten Programms. Um die Extension einem Programm zu zuordnen, reicht es aus, wenn das Script so heißt, wie das zu manipulierende Programm (Bsp.: US30600_J.js). Mit Hilfe einer solchen Extension können z. B. bestehende "AKTO"s überschrieben oder neu ausprogrammiert werden. Ebenfalls ist es möglich die Originalprogrammierung der "AKTO" auszuführen und das Ergebnis anschließend abzuändern. Werden "AKTO"s nicht abgefangen oder überschrieben, wird standardmäßig das Original ausgeführt. Extensions dieser Art werden beim Neuaufruf des Programms neu geladen, sofern sich an der Datei etwas geändert hat. Ein Stoppen oder Neustart des Clients/Servers ist nicht notwendig.

Beispiel

// alle nötigen Dateien importieren  
importFile("ULANDP");

if (AKTO == "*GET") {
    print("Hello Server-World");
}

if (AKTO == "*LOAD") {
    var uland = selectAll().from(ULANDP.FILE)
                           .where(ULANDP.LALANR, EQUAL, "004")
                           .readSingle();
    print("Hello Server-World " + uland.get(ULANDP.LALNAM));

}

Extension-Initializer (Extension für Server)

Benennung: Scriptname.js (wobei "Scriptname" variabel ist)

Verwendungszweck: Extensions dieser Art werden einmalig geladen und dienen z. B. um Listener zu initialisieren oder Methodenaufrufe zu ändern bzw. zu überschreiben. Nach einer Änderung der Extension muss diese gestoppt und wieder gestartet werden, damit die Änderungen aktiv werden.

Beispiel

method.after("VK20200M_EntryPoints", "setDefaults", function() {
	this.parameters.data.ISAKZ = getMnudta("MNSAKZ");
	// "thiz" beinhaltet das this-Objekt der Methode
        this.thiz
	// über das Result-Objekt kann das Originalrückgabeobjekt der Methode verändert werden.
        this.result
})

Login (Extension für Client)

Benennung: login.js (der Scriptname ist nicht variabel!)

Verwendungszweck: Login-Extensions werden beim Login eines Benutzers aufgerufen. Hier ist es möglich, per Extension an verschiedenen Stellen im Login-Prozess einzugreifen (Laden von Tasks, Hinzufügen von Tasks, Folgeaktivitäten je nach Anmeldeart (Office, Homeoffice, ...), Menümanipulationen, ...).

Übergreifendes XML-Script (Extension für Client)

Benennung: all.jsall-Scriptname.js (wobei "Scriptname" variabel ist)

Verwendungszweck: Diese Extensions werden verwendet um alle XML (all.js) beispielsweise um eine neue Transkation oder in einer Transaktion um eine Action zu erweitern. Über einen Namensbereich können bestimmte XML-Bereiche angepasst werden.(all-EK.js--> alle XML, welche mit "EK" beginnen werden um die Transaktion erweitert).

Beispiel

//Beim Laden jedes XML wird auf der Konsole der Pfad dieses XML ausgegeben.
print("Lade XML: " + programDescription.path);

XML-Script (Extension für Client)

Benennung:

Scriptname.js (wobei "Scriptname" variabel ist)

Verwendungszweck: Mit dieser Extension wird eine bestimmtes XML erweitert/geändert. Hierrüber können beispielsweise bestehende Transkationen geändert werden, oder auch neue Transaktionen hinzugefügt werden.

Beispiel

// Erstellen einer neuen Transaktion
define.transaction("EK23030-SingleTableFrg")
  .icon("entsperren.png")
  .enable()
  .actions(
     action("EJB")
        .source("EVENT", "DATA")
        .target("EVENT", "DATA")
        .option("program", "EK23030J")
        .option("method", "*FREIGABE")
        .transactionHandler("SHOWWIN", "SHOWWINDOW", false),
     action("table")
        .target("", "NAVCOMP")
        .option("set-firstselected", "false"),
     action("run")
        .source("EVENT", "DATA")
        .target("ALL", "EK23030-UPDATE-DATA")
     );

Wie kann man sich einklinken

XML-Scripte

Prinzipiell ist es möglich

  • sich VOR die Standard-Actions zu hängen.
  • sich NACH die Standard-Actions zu hängen.
  • alle Standard-Actions zu überschreiben.

Neue Actions zu Beginn des Standard-Actions-Blocks

Mit der Beschreibung .before können neue Actions VOR den Standard-Actions in einer beliebige Transaktion hinzugefügt werden. Die Standard-Actions werden trotzdem weiterhin ausgeführt.

Beispiel

// an die Standard-Transaktion "Test" wird '''VOR''' die Standard-Transaktionen eine neue Action vom Typ "EJB" eingebaut.
define.getTransaction("TEST")
   .before(
      action("EJB")
         .option("program", "VK20090")
         .option("action", "*TEST")
         .source("EVENT", "DATA")
         .target("EVENT", "DATA")
)

Neue Actions am Schluss des Standard-Actions-Blocks

Mit der Beschreibung .after können neue Actions NACH den Standard-Actions in einer beliebige Transaktion hinzugefügt werden. Die Standard-Actions werden trotzdem weiterhin ausgeführt.

Beispiel

 // an die Standard-Transaktion "Test" wird '''NACH''' die Standard-Transaktionen eine neue Action vom Typ "EJB" eingebaut.
define.getTransaction("TEST")
   .after(
      action("EJB")
         .option("program", "VK20090")
         .option("action", "*TEST")
         .source("EVENT", "DATA")
         .target("EVENT", "DATA")
)

Alle Standard-Actions überschreiben

Mit der Beschreibung .override können die Standard-Actions ÜBERSCHIEBEN werden. Die Standard-Actions werden somit nicht weiterhin ausgeführt. Werden über eine weitere Extension neue Actions mit .before oder .after hinzugefügt, werden diese trotzdem weiterhin ausgeführt. .override überschreibt nur die Standard-Actions.


Beispiel

// von Standard-Transaktion "Test" werden alle Standard-Transaktionen überschrieben.
define.getTransaction("TEST")
   .override(
      action("EJB")
         .option("program", "VK20090")
         .option("action", "*TEST")
         .source("EVENT", "DATA")
         .target("EVENT", "DATA")
 )

Server-Scripte

Außerdem ist es möglich

  • sich an den Anfang einer bestehenden Methode zu hängen.
  • sich ans Ende einer bestehenden Methode zu hängen.
  • Neuen Kundenspezifischen Code anstatt einer bestehenden Methode zu verwenden.

Neuer Code zu Anfang einer bestehenden Methode

Mit der Beschreibung .before kann neuer Code VOR dem Standardcode einer bestehenden Methode eingefügt werden.

Beispiel

method.before("VK20200M_EntryPoints", "setDefaults", function() {
	this.parameters.data.ISAKZ = getMnudta("MNSAKZ");
	// '''thiz''' beinhaltet das this-Objekt der Methode
        this.thiz
})

Neuer Code Am Ende einer bestehenden Methode

Mit der Beschreibung .after kann neuer Code NACH dem Standardcode einer bestehenden Methode eingefügt werden.

Beispiel

method.after("VK20200M_EntryPoints", "setDefaults", function() {
	this.parameters.data.ISAKZ = getMnudta("MNSAKZ");
	// "thiz" beinhaltet das this-Objekt der Methode
        this.thiz
	// über das Result-Objekt kann das Originalrückgabeobjekt der Methode verändert werden.
        this.result
})

Neuer Code anstatt einer bestehenden Methode

Mit der Beschreibung .override kann die Standard-Methode ÜBERSCHIEBEN werden.

Beispiel

method.override("VK20200M_EntryPoints", "setDefaults", function() {
	this.parameters.data.ISAKZ = getMnudta("MNSAKZ");
	this.thiz
        //mit dem Methodenaufruf ''original()'' kann der Standardcode der Methode weiterhin ausgeführt werden 
	var result = this.original();
})



  • Keine Stichwörter
>