Willkommen Gast, Sie befinden sich im Modul: Anmelden

ERP Wiki für eEvolution

RSS RSS

Navigation (Transfermanager)




Im Wiki suchen
»

Warenwirtschaftssystem eEvolution – Hier Demo ausprobieren

Hooks bzw. Callout - Funktionen

Durch Einbinden der APD „APCallout.apd“, die individuell um spezielle Kundenwünsche bzw. –Anforderungen erweitert werden kann, wird es möglich, die Module um z.B. zusätzliche Gültigkeitsprüfungen, Workflowabläufe etc. zu erweitern.

Dazu wurden sowohl an den OK-, Übernehmen- und Abbrechen-Button, als auch am „Create“ und „Destroy“ eines Fensters (Form-Window, Table-Window u. Dialog) so genannte „Hooks“ eingebaut. Diese werden sowohl vor (Pre_) als auch nach (Post_) dem Abarbeiten des ursprünglichen Codes ausgeführt. Die „Pre_“-Aufrufe reagieren auf einen booleschen Rückgabewert, so dass bei einem FALSE als Return-Value der ursprüngliche Code nicht abgearbeitet wird.

Außerdem gibt es noch 10 frei verwendbare Callout-Funktionsaufrufe, die ein jeder Entwickler pro Modul u. Maske zur Verfügung hat und beliebig einbauen kann.

Hinweis

Die Rechte für diese Funktion werden im Inst-Modul Benutzerrechte -> Desktop vergeben.

Hinweis

Der Editor wird innerhalb der Module per „Strg + Shift + Doppelklick rechte Maustaste“ auf eine freie Fläche für das jeweilige Fenster aufgerufen.

Kommt es bei der Ausführung von einem Callout-Skript zu einem Fehler, so wird dieser in einer Messagebox ausgegeben:

Dialogfenster Hooks bzw. Callout - Funktionen

In der Fehlermeldung werden die Modulnummer, der Dialogname und der Hook genannt, um den Fehler im Skript schnell beseitigen zu können.

Wichtig:

Skript-Fehler im Applikationsserver werden dort in die Ereignisausgabe geschrieben. Sowird verhindert, dass der Applikationsserver durch eine aufgehende Fehlermeldung an der Ausführung nicht mit der Fehlermeldung zusammenhängender Aufgaben gehindert wird.

Funktionen Pre- bzw. PostCallout

Die Callout-Funktionen befinden sich in der neuen APD namens "APCallout.apd". Hier kann man die beiden Funktionen "PreCallout(...)" und "PostCallout(...)" benutzen. Beide haben folgende Aufrufparameter:
  • nModul: Nummer des aufrufenden Moduls 
  • sUser: aktuell angemeldeter Benutzer 
  • sWindow: Name des Parent-Window (z.B. frmMain) 
  • nAktion: Konstante der auszuführenden Aktion (z.B. nCALLOUT_OK) 
  • sContext: Exekution Kontext, um per SalCompileAndEvaluate() aus der APD auf Variablen, Datenfelder, etc. des aufrufenden Moduls zugreifen zu können 
Aufrufbeispiel:

If PreCallout( nModul, SqlUser, GetItemNameX(hWndForm), nCALLOUT_CREATE, SalContextCurrent () )

bzw.

If PostCallout( nModul, SqlUser, GetItemNameX(hWndForm), nCALLOUT_CREATE, SalContextCurrent () )

Funktion FreeAktionCallout

Diese Callout-Funktion befindet sich in der APD names „APCallout.apd“. Mit ihr kann man die 10 frei verfügbaren (pro Modul u. Maske) Hooks ausführen.

Aufrufbeispiel:

If not FreeAktionCallout ( nModul, SqlUser, GetItemNameX(hWndForm), nCALLOUT_AKTION05, SalContextCurrent() )

Return FALSE

Dieser Aufruf führt das Script „On_Aktion05“ aus, welches für das aktuelle Modul und das aktuelle Fenster hinterlegt ist und dem eingeloggten Benutzer (SqlUser) zugewiesen wurde.

Es stehen die Konstanten „nCALLOUT_AKTION01“ bis „nCALLOUT_AKTION10“ zur Verfügung und können gemäß obigem Beispiel an beliebiger Stelle durch den Entwickler in „seinen“ Module verwendet und dokumentiert werden. 

Funktion GetAndExecuteScriptFromDB

Diese Funktion wird in der Regel nur innerhalb der APCallout.apd verwendet. Mit ihr kann man ein Script aus der Datenbank laden und ausführen. Allerdings könnte man diese Funktion auch an einer beliebigen Stelle im Code einbauen und somit z.B. ein Script ausführen, dass NICHT über den Script-Editor in die Datenbank gespeichert wurde.

Die Funktion hat folgende Aufrufparameter:
  • nModul: Nummer des aufrufenden Moduls
  • sUser: aktuell angemeldeter Benutzer
  • sWindow: Name des Parent-Window (z.B. frmMain)
  • sAktion: auszuführende Aktion (z.B. ‚Pre_Ok’), s. a. alle Aktionen in Kapitel 2.1
  • sContext: Exekution Kontext, um per SalCompileAndEvaluate() aus der APD auf Variablen, Datenfelder, etc. des aufrufenden Moduls zugreifen zu können
Aufrufbeispiel:

If not GetAndExecuteScriptFromDB( nModul, SqlUser, ‘frmMain’, 'Post_Ok', SalContextCurrent() )

Return FALSE

oder

GetAndExecuteScriptFromDB( nModul, SqlUser, GetItemNameX(hWndForm), 'Post_Ok', SalContextCurrent ()

 

Beschreibung des Fensters:

Dialogfenster Hooks bzw. Callout - Funktionen

 

Groupbox „Callout-Script“

Durch Auswahl der Combobox „bei Aktion“ wird das jeweilige Script zur Bearbeitung in den Editor geladen. Außerdem werden die Benutzerrechte entsprechend angezeigt.

In der Combobox sind folgende Einträge vorhanden:
  • „Pre_Ok“: wird vor dem Drücken des OK-Buttons ausgeführt
  • „Pre_Apply“: wird vor dem Drücken des Übernehmen-Buttons ausgeführt
  • „Pre_Cancel“: wird vor dem Drücken des Abbrechen-Buttons ausgeführt
  • „Pre_Create“: wird vor dem Erzeugen des Fensters ausgeführt
  • „Pre_Destroy“:wird vor dem Schließen des Fensters ausgeführt
  • „Pre_Load”: kann vor dem Laden von Daten ausgeführt werden (muss individuell implementiert werden)
  • „Pre_Delete”: kann vor dem Löschen von Daten ausgeführt werden (muss individuell implementiert werden)
  • „Post_Ok”: wird nach dem Drücken des OK-Buttons ausgeführt
  • „Post _Apply“: wird nach dem Drücken des Übernehmen-Buttons ausgeführt
  • „Post _Cancel“ wird nach dem Drücken des Abbrechen-Buttons ausgeführt
  • „Post _Create“: wird nach dem Erzeugen des Fensters ausgeführt
  • „Post _Destroy“: wird nach dem Schließen des Fensters ausgeführt
  • „Post _Load”: kann nach dem Laden von Daten ausgeführt werden (muss individuell implementiert werden)
  • „Post _Delete”: kann nach dem Löschen von Daten ausgeführt werden (muss individuell implementiert werden)
  • „On_Aktion01”: – “On_Aktion10” Scripte, die jeder Entwickler frei in seinen Masken verwenden kann.
Mit Hilfe der Combobox „Formatierung“ kann man das geladene Script automatisch formatieren. Dabei werden die Zeilen eingerückt, sowie einzelnen Schlüsselwörter (wie If, then …) werden je nach Auswahl entsprechend formatiert.

Der Button „Check Code“ überprüft die Syntax des Skriptes. Dabei wird keine vollständige Lauffähigkeit des Skriptes überprüft, sondern lediglich, ob alle verwendeten Variablen deklariert wurden und z.B. Schleifen- bzw. If-Anweisungen korrekt sind.

 

Groupbox „Berechtigung für unten ausgewähltes Script“

Für jedes Script muss für die einzelnen Benutzer die Berechtigung vergeben werden. Die Button ►u. ◄verschieben nur die markierten Benutzer ins jeweils andere Auswahlfeld, während die Button ►►u. ◄◄ ALLE Einträge eines Auswahlfeldes verschieben, d.h. man kann festlegen, ob ein Script für einen Benutzer ausgeführt werden soll oder nicht.

ACHTUNG:

Das bedeutet NICHT, dass man für ein und dieselbe Aktion für unterschiedliche Benutzer unterschiedliche Scripte hinterlegen kann. Das geht leider nicht. Hier müsste man dann im Script selber über eine If-Abfrage pro Benutzer verschiedene Zweige durchlaufen.

 

Groupbox „Xml-Im/Export

Über die Button Import bzw. Export kann man die Scripte im XML-Format im- bzw. exportieren. Setzt man die Checkbox „alle Masken des aktuellen Moduls ex-/importieren, dann werden ALLE Scripte des aktuellen Moduls ex- bzw. importiert. Ist das Flag nicht gesetzt, gilt der Ex-/Import nur für die Scripte der Maske, aus der der Editor gestartet wurde.

Beim Import werden nur die Scripte in der Datenbank gelöscht bzw. überschrieben, die sich in der zu importierenden XML-Datei befinden.

Die Berechtigungen werden NICHT mit im-/exportiert. D.h. sie müssen nach einem Import manuell neu vergeben werden.

Beim Export erschient nach dem Klick auf den Button folgende Dialog. Hier kann man eine Dateinamen angeben und ein Verzeichnis auswählen, in das die Datei exportiert werden soll.

Dialogfenster Hooks bzw. Callout - Funktionen

Hinweis:

Beim Import erscheint der gleiche Dialog, nur dass dort nicht „Speichern“, sondern „Öffnen“ auf dem oberen Button steht und man eine XML-Datei auswählen muss, die man importieren möchte.

ACHTUNG:

Man kann jeweils nur XML-Dateien für das aktuelle Modul importieren. XML-Dateien, die aus anderen Modulen exportiert wurden, lassen sich nicht importieren und es erscheint eine Fehlermeldung.

 

Debuggen

Unter dem Editor befinde sich die drei Button, mit denen man im Einzelschrittmodus das Script laufen lassen kann:

Dialogfenster Hooks bzw. Callout - Funktionen Start des Debugging     

Dialogfenster Hooks bzw. Callout - Funktionen Stop des Debugging     

Dialogfenster Hooks bzw. Callout - Funktionen Zeile ausführen und zur nächsten springen     

 

Skripting unter eEvolution® 6
  • Das "alte" Skripting in SQLWindows-Syntax funktioniert weiter.
  • Es ist jetzt auch C#-Syntax möglich.
Features
  • "normales" C#-Skripting
  • Skripting im Appserver
  • Einbinden von .NET-Assemblies zur Laufzeit
 

Bei C#-Skripting muss eine spezielle Form verwendet werden:

#C#

using System.Windows.Forms;

{

//fast beliebiger C#-Code, mit folgenden Einschränkungen:

//keine lokalen Methoden oder Klassen

//keine lokalen usings

//kein ternärer Operator ( ? : )

//keine lokalen Vars als Bindevars in SQL-Stmts.

//...evtl. noch einige Dinge…

}

 

Mit der Syntax Scripting.LoadAssembly(„meine.dll“); können zur Laufzeit eigene Assemblies eingebunden werden.

Vorteile:
  • Wirklich freies Programmieren
  • Einbinden von eEvolution®-Standardcode als Binärverweis
  • die Performance gegenüber normalem Skripting ist etwa 4-fach besser!
 

Skripting unter eEvolution® 5

Variablen

Variablen müssen vor dem eigentlichen Script-Code deklariert werden.

Es werden derzeit folgende Variablen-Typen unterstützt:
  • Number
  • String
  • DateTime
  • Sql Handle
  • Window Handle
  • Variant
  • Boolean
  • File Handle
Innerhalb des Scripts wird mittels vorangestelltem # auf die einzelnen Variablen zugegriffen.

Beispiel:

; ******* Variablen ****************

String: sHelp

Sql Handle: hSqlMy

Number: nFetch

; ******* Code ****************       

SqlConnect(#hSqlMy)

If SqlPrepareAndExecute( #hSqlMy, 'select kdnr from tkdauf into :#sHelp where lfdnr = 1')

SqlFetchNext(#hSqlMy, #nFetch)

Endif

Set frmMain.dfsAufNr = #sHelp

SqlDisconnect(#hSqlMy)

; ******* Ende ****************       

 

Bedingungen, Schleifen

If ... [Else] ... Endif

Eine If-Bedingung kann in zwei Arten eingesetzt werden. Und zwar mit oder ohne "Else". Sie muss aber immer mit einem "Endif" abgeschlossen werden.

Beispiele:

If #nID > 10

SalMessageBox('nID ist größer 10', 'Meldung', MB_Ok)   

Endif

If #nID > 10

SalMessageBox('nID ist größer 10', 'Meldung', MB_Ok)   

Else

SalMessageBox('nID ist kleiner/gleich 10', 'Meldung', MB_Ok)   

Endif

While ... Loop

Beispiel:

Number: nID

Set #nID = 1

While #nID < 10

SalMessageBox(SalNumberToStrX(#nID, 0), 'Meldung', MB_Ok)   

Set #nID = #nID + 1   

Loop

For ... [Step] ... Next

Die For ...Next Schleife kann in zwei Arten eingesetzt werden. Und zwar mit einer Angabe eines "Steps", oder ohne diese Angabe. Setzt man sie ohne die Angabe ein, so wird die Zählvariable pro Schleifen-Durchgang um 1 erhöht.

Beispiele:

Number: nID

For #nID = 1 to 10

SalMessageBox(SalNumberToStrX(#nID, 0), 'Meldung', MB_Ok)   

Next

 

For #nID = 1 to 10 Step 2

SalMessageBox(SalNumberToStrX(#nID, 0), 'Meldung', MB_Ok)   

Next

 

Return-Wert

Ein Script kann einen booleschen Wert (true/false) als Rückgabewert haben. Dazu wird das Steuerwort „Return“ mit nachfolgendem booleschen Ausdruck verwendet.

Wird nicht explizit ein „Return“ angegeben, wird bei fehlerfreier Verarbeitung de Scripts ein „Return TRUE“ angenommen.

Beispiele:

Number: nID

For #nID = 1 to 10

If #nID > 7   

Return FALSE      

Endif  

Next

 

If frmMain.dfnAufNr != NUMBER_Null

Return TRUE  

Else

Return FALSE  

Endif

ScrewTurn Wiki Version 3.0.5.600. Einige Icons wurden von FamFamFam erstellt.

Besuchen Sie uns auf: http://www.eevolution.de