Logo Image Workflow+ Hilfe
Workflow+ Hilfe
Logo Image

Benutzerdefinierte Funktionen

 

Syntax

Function <Funktionsname>(<Param1> as <Datentyp>, <Param2> as <Datentyp>, ...) as <Datentyp Returnwert>

Function <Funktionsname>(<Param1> as <Datentyp>, <Param2> as <Datentyp>, ...)

 

Beschreibung

Ab Version 6.9.0 können in Workflow+ eigene Funktionen geschrieben werden. Diese Funktionen werden in einem Workflow oder WorkForm in speziell festgelegten Skripten definiert und können von anderen Skripten aufgerufen werden. In diesen Funktionen können alle Befehle von Workflow+ sowie auch andere benutzerdefinierte Funktionen verwendet werden.

Aktuell können Benutzerdefinierte Funktionen nur im eigenen Workflow oder WorkForm aufgerufen werden. Es ist vorgesehen, dass in Zukunft die Funktionsaufrufe auch Workflow übergreifend verwendet werden können.

 

Definition einer Funktion:

Workflow: Zuerst muss ein Worker vom Typ "Functions" angelegt werden. Der Name des Worker darf keine Leerzeichen und andere Sonderzeichen enthalten, da dieser Name als Referenz für den Funktionsaufruf angegeben werden muss. Ein Worker kann beliebig viele Funktionen enthalten und es können beliebig viele Worker vom Typ Functions angelegt werden.

WorkForm: In WorkForm werden Funktionen in einem vordefinierten Skript erstellt, das über "Benutzerdefinierte Funktionen" in der Toolbar aufgerufen werden kann.

 

 

 

Aufbau einer Funktion:

Function <Funktionsname>(<Param1> as <Datentyp>, <Param2> as <Datentyp>, ...) as <Datentyp Returnwert>

Begin

  -- Code ...

  Return <result>

End

 

Function: Dieses Schlüsselwort leitet die Definition einer Funktion ein.

Funktionsname: Der Funktionsname muss innerhalb eines Funktionsskriptes eindeutig sein und darf keine Leerzeichen und Sonderzeichen enthalten.

Parameter: Die Parameter werden innerhalb der Klammern (...) definiert. Es können beliebig viele Parameter durch Komma getrennt festgelegt werden. Die Parameter sind nur innerhalb einer Funktion gültig und können im Codeblock wie Variablen angewendet werden. Es können alle Workflow+ Datentypen verwendet werden.

Returnwert: Es gibt Funktionen mit oder ohne Rückgabewert. Falls die Funktion einen Wert zurückgeben soll, wird dies am Ende der Deklarationszeile mit <as Datentyp> festgelegt. Funktionen mit einem Rückgabewert müssen zwingend eine Return Anweisung enthalten.

Code - Begin / End:

oDer Funktionscode wird mit dem Schlüsselwort Begin eingeleitet und mit End abgeschlossen. Die Schlüsselworte Begin und End müssen jeweils alleine auf einer Zeile stehen.

oInnerhalb einer Funktion können alle Befehle von Workflow+ verwendet werden, inkl. Plugin Funktionen.

oEs können eigene Variablen in einer Funktion deklariert werden. Diese sind lokal und nur innerhalb dieser Funktion gültig.

oEine Funktion wird im eigenen Speicherkontext ausgeführt. Dies bedeutet, dass alle Variablen, Datenbankzugriffe (GetTable, FilterTable, SqlGetTable, usw.) und Files (FileOpen) nur in dieser Funktion gültig sind und auch nicht vom aufrufenden Skript übernommen werden.

oDie Return Anweisung Beendet sofort die Ausführung innerhalb einer Funktion, auch wenn diese Anweisung nicht am Ende steht. Wenn die Funktion einen Wert zurückgeben soll, muss nach der Return Anweisung auch einen Wert (Variable, Datenbankfeld, Fixwert) angegeben werden. Für Funktionen ohne Rückgabewert ist die Return Anweisung optional und steht alleine.

 

Beispiel 1

Definition der Funktionen.

Die folgenden Funktionen werden in einem Worker vom Typ Functions erstellt. Der Name des Worker lautet "MyFunctions".

 

-----------------------------------------------------
 -- Sucht Adressen an Hand einer EMail Adresse
 -- Suche in Anschrift und Ansprechpartner
 -- Gibt ein DataTable mit allen Treffer zurück
 -----------------------------------------------------
 Function SearchAddressByEMail(pEmail as String) as DataTable
 Begin
   Declare lData as DataTable
  
  DataTableAddColumn(lData, "AdrNr", "String")
   DataTableAddColumn(lData, "AnsNr", "Integer")
   DataTableAddColumn(lData, "AspNr", "Integer")
   DataTableAddColumn(lData, "EMail", "String")
   DataTableAddColumn(lData, "Tabelle", "String")
  
  FilterTableWildcardRange("Anschriften", "EMail1", pEmail)
   Loop("Anschriften")
     DataTableNewRow(lData, Anschriften.AdrNr, Anschriften.AnsNr, -1, Anschriften.EMail1, "Anschriften")
   EndLoop
  
  FilterTableWildcardRange("Ansprechpartner", "Sel1", pEmail)
   Loop("Ansprechpartner")
     DataTableNewRow(lData, Ansprechpartner.AdrNr, Ansprechpartner.AnsNr, Ansprechpartner.AspNr, Ansprechpartner.EMail1, "Ansprechpartner")
   EndLoop
  
  Return lData
 End

 

-------------------------------------------
 -- Schreibt einen Eintrag in ein Logfile
 -------------------------------------------
 Function LogMessage(pText as String)
 Begin
   Declare lLogFile as String
   Declare lLine as String
  
  lLogFile = "C:\Temp\TestLog.txt"
   lLine = StringFormat("{0:yyyy.MM.dd HH:mm:ss} > {1}{2}", Now, pText, cCrLf)
  
  FileWriteText(lLogFile, lLine, true)
 End

 

Beispiel 2

Anwendung der Funktion.

In diesem Skript wird die Funktion von "MyFunctions" aufgerufen.

 

Declare lData as DataTable
Declare lIndex as Integer
Declare lTemp as String

 

lData = MyFunctions.SearchAddressByEMail("info@alphacom.ch")
for lIndex = 0 to DataTableRowCount(lData) - 1
   lTemp = StringFormat("{0} {1}/{2}/{3}", DataTableGetValue(lData, "Tabelle", lIndex), DataTableGetValue(lData, "AdrNr", lIndex), DataTableGetValue(lData, "AnsNr", lIndex), DataTableGetValue(lData, "AspNr", lIndex))
   MyFunctions.LogMessage(lTemp)
Next

 

Beispiel 3

Anwedeung der Funktionen im Workform.

In diesem Skript wird die Funktion aus den benutzerdefinierten Funktionen "Functions" aufgerufen.

 

Declare lData as DataTable
Declare lIndex as Integer
Declare lTemp as String

 

lData = Functions.SearchAddressByEMail("info@alphacom.ch")
for lIndex = 0 to DataTableRowCount(lData) - 1
   lTemp = StringFormat("{0} {1}/{2}/{3}", DataTableGetValue(lData, "Tabelle", lIndex), DataTableGetValue(lData, "AdrNr", lIndex), DataTableGetValue(lData, "AnsNr", lIndex), DataTableGetValue(lData, "AspNr", lIndex))
   MyFunctions.LogMessage(lTemp)
Next

 

Funktionen können im Reiter "Benutzerdefinierte Funktionen" erstellt werden: