F-Script Funktionen

Diese Funktionalität ermöglicht den Zugang zum ServiceBus aus F-Script. Damit lassen sich alle Services die wir in OpaccERP zur Verfügung stellen, auch in F-Script nutzen. (z.B. GetBo, SaveBo usw.)
Ein Service kann in F-Script zudem mandantenübergreifend ausgeführt werden.
Die F-Script Funktionen basieren auf den folgenden F-Script Befehlen:
  • XCNT Informationen über den Kontext in welchem das F-Script läuft.
  • XSER Service-Objekt. Enthält alle für das Ausführen eines Service notwendigen Parameter/Argumente.
  • XRES Result-Objekt. Enthält das Resultat des mit XSER ausgeführten Service.
  • XQRY Query-Objekt. Enthält alle für das Ausführen eines Query-Service notwendigen Parameter/Argumente.
  • XQRS Query-Result-Objekt. Enthält das Resultat des mit XQRY ausgeführten Service.
  • X Variable. Definieren von Variablen mit beliebigen Namen.
    Sie finden hier auch Informationen zum Befehl X(<LIB:FileName)
  • X Array. Definieren von Arrays mit beliebigen Namen.
    Sie finden hier auch Informationen zum Befehl X(<LIB:FileName)
Die F-Script Befehle beginnen alle mit einem X. Beachten Sie in diesem Zusammenhang auch, dass die Schlüsselwörter case-sensitive sind und deshalb in einem F-Script exakt so geschrieben werden müssen.

XCNT

Funktion
Parameter
Beschreibung
XCNT
Information über den Kontext in welchem das Script läuft.
busActive
Ist der Zugang zum BUS möglich? 0/1
boTypes
Alle BO-Typen durch Komma getrennt oder leer.
<BoType>
BoId des abgefragten BO-Typ oder leer.
# Beispiel:
«XCNT(Addr)\A»
# Liefert die Adress Nr. (BoId) des BO-Typ Addr (Adresse),
# sofern dieser BO-Typ im Kontext aktiv ist.
Weitere Infos siehe hier:
Informationen zum F-Script basierend auf den Subroutinen /GetInfoScriptArg und /GetInfoScriptCol
arg:ScriptName
Name des aktiven F-Script.
arg:PrinterNo
Nummer des Druckers bzw. Nummer der Druckersteuerung deren Einstellungen verwendet werden.
arg:OutputTypeCd
Ausgabetyp:
  • D - Drucker
  • F - File
  • B - Bildschirm
arg:OutputDevice
Name des Ausgabe-Device (Drucker oder Dateiname).
arg:NumberOfCopies
Anzahl Exemplare.
arg:PrintCollate
arg:PrintCollate=n
Collation-Einstellung
Abfragen bzw. Setzen der Collation-Einstellung. Mögliche Werte:
  • <leer> - gemäss den Einstellungen des Druckers (default)
  • 0 - false - Dokumente nicht sortieren (Seite 1+1, 2+2, 3+3)
  • 1 - true - Dokumente sortieren (Seiten 1-3, 1-3, 1-3)
arg:PrintFromPage
arg:PrintFromPage=n
Seite von
Abfragen bzw. Setzen der Seite von.
arg:PrintToPage
arg:PrintToPage=n
Seite bis
Abfragen bzw. Setzen der Seite bis.
arg:PrintAsPdf
Ausgabe als PDF.
  • 0 - Nein
  • 1 - PDF
  • 2 - PDF/A-1a
  • 3 - PDF/A-1b
arg:DuplexModeCd
arg:DuplexModeCd=n
Duplex-Modus
Abfragen bzw. Setzen des Duplex-Modus. Über den Duplex-Modus wird die beidseitige Druckausgabe bestimmt.
  • 0 - Standard: Duplex-Modus gemäss aktiver Einstellung beim Drucker.
  • 1 - Simplex: Ausgabe immer einseitig.
  • 2 - Long-Edge: Ausgabe beidseitig, über die lange Seite gedreht.
  • 3 - Short-Edge: Ausgabe beidseitig, über die kurze Seite gedreht.
arg:ImageDpi
arg:ImageDpi=n
Bild-DPI
Abfragen bzw. Setzen der Auflösung (DPI) für die Ausgabe von Bildern. Möglicher Wertebereich: 1 - 9999.
0 = Default (72 DPI). Der Defaultwert 0 wird berücksichtigt, sobald bei der Bild-Qualität ein Wert > 0 erfasst ist.
arg:ImageQuality
arg:ImageQuality=n
Bild-Qualität
Abfragen bzw. Setzen der Bild-Qualität (in %) für die Ausgabe von Bildern. Möglicher Wertebereich: 1 - 100.
0 = Default (50%). Der Defaultwert 0 wird berücksichtigt, sobald bei Bild-DPI ein Wert > 0 erfasst ist.
arg:BackgroundPdfModeCd
arg:BackgroundPdfModeCd=n
Abfragen bzw. Setzen des Hintergrund-PDF Modus.
  • 0 - Generell (Das Hintergrund-PDF wird beim Drucken und beim Archivieren verwendet.)
  • 1 - Nur Druck (Das Hintergrund-PDF wird nur beim Drucken verwendet.)
  • 2 - Nur Archivierung (Das Hintergrund-PDF wird nur beim Archivieren verwendet.)
arg:BackgroundPdfFirstPage
arg:BackgroundPdfLastPage
arg:BackgroundPdfOtherPages
Abfragen der aktuellen Hintergrund-PDF Einstellungen.
arg:BackgroundPdfFirstPage=...
arg:BackgroundPdfLastPage=...
arg:BackgroundPdfOtherPages=...
Setzen/Übersteuern der Hintergrund-PDF Einstellungen.
# Beispiel
«XCNT(arg:BackgroundPdfFirstPage=IP\BRIEFPAPIER.PDF)»
arg:LangNo
Sprachnummer
arg:BoType
BO-Typ gemäss des System_RunScript Aufrufs (z.B. AsstDoc).
arg:BoId
BoId gemäss des System_RunScript Aufrufs.
arg:BoOrganizerCd
Business-Object-Organizer
Freie Argumente und Attribute (basierend auf den Subroutinen /GetInfoScriptArg und /GetInfoScriptCol)
freeArgCount
Anzahl der Argumente basierend auf der Subroutine /GetInfoScriptArg
freeArg:<n>
Argument über dessen Nummer abfragen.
Liefert den vom Anwender eingegebenen Wert bzw. den im Script definierten Defaultwert zurück.
freeArg:<Name>
Argument über dessen Name abfragen.
Liefert den vom Anwender eingegebenen Wert bzw. den im Script definierten Defaultwert zurück.
freeArg:myArg>myVar
Direkte Übergabe eines Arguments in eine X-Variable.
Diese Funktionalität ist insbesondere beim Handling von Textblöcken mit mehr als 4096 Zeichen hilfreich.
Beispiele
«nXCNT(freeArg:MyArg1>MyXVar)»

«nXCNT(freeArg:1>MyXVar)»
colCount
Anzahl Attribute (Spalten) basierend auf der Subroutine /GetInfoScriptCol
colName:<n>
Name des Attributs über dessen Nummer abfragen.
colNo:<Name>
Nummer des Attributs über dessen Name abfragen.
colType:<n>
Datentyp des Attributs über dessen Nummer abfragen.
colType:<Name>
Datentyp des Attributs über dessen Name abfragen.
colActive:<n>
Status (aktiv/passiv) des Attributs über dessen Nummer abfragen.
colActive:<Name>
Status (aktiv/passiv) des Attributs über dessen Name abfragen.
scriptExecution=0|1
Setzen des F-Script Execution Mode.
0 - Setzt die F-Script Ausführung für die Laufzeit des F-Scrpts auf 0 - Legacy.
1 - Setzt die F-Script Ausführung für die Laufzeit des F-Scripts auf 1 - Restricted.
scriptStopOnError
scriptStopOnError=0|1
Abfragen der aktuellen Einstellung.
0 - Setzt zur Laufzeit des F-Scripts den Abbruch im Fehlerfall auf false/nein. Die Einstellung gilt auch für allfällig aufgerufene Sub-Scripts.
1 - Setzt zur Laufzeit des F-Scripts den Abbruch im Fehlerfall auf true/ja. Die Einstellung gilt auch für allfällig aufgerufene Sub-Scripts.
consumer:WindowsUser
consumer:WindowsDomain
consumer:Computer
consumer:Process
Informationen zu Windows-Benutzer, -Domäne, Computername und Prozess.

XSER

Funktion
Parameter
Beschreibung
XSER
Service-Objekt. Man kann mehrere solche Objekte gleichzeitig definieren und aktiv halten. Die Unterscheidung dieser Objekte geschieht über deren Namen. Der Name kann auch leer gelassen werden. Ein Service-Objekt ohne Name bleibt so lange aktiv, bis ein neues Service-Objekt erzeugt wird, welches ebenfalls keinen Namen trägt.
Beispiel:
«XSER(PosLesen:Parameter)» Objekt-Name = PosLesen
«XSER(:Parameter)» Objekt ohne Name (default)
ServiceName,Arg1,Arg2,...
Ein Service-Objekt wird "auf einen Schlag" definiert. d.h. Der Name des Service-Objektes und alle notwendigen Argumente des Service werden in einer Zeile beim definieren des Service-Objektes mitgegeben.
ServiceName
Der Name des Service-Objektes wird gesetzt.
args = Arg1,Arg2,...
Alle Argumente des Service-Objektes auf ein Mal setzen.
arg,N = ArgumentWert
Das "n'te" Argument setzen.
arg,N < VariablenName
Das "n'te" Argument mit dem Inhalt der Variable setzen.
(Variable: siehe Funktion X)
arg,N + VariablenName
Das "n'te" Argument mit dem Inhalt der Variable ergänzen.
(Variable: siehe Funktion X)
addArg = ArgumentWert
Das nächste Argument setzen. Muss benutzt werden, wenn das Argument selber Kommas enthält.
addArgs = Arg1,Arg2,...
Die nächsten Argumente setzen.
name
Der Name des Service-Objektes wird zurückgegeben.
args
Alle Argumente werden, mit Komma getrennt, zurückgegeben.
arg,N
Das "n'te" Argument wird zurückgegeben.
execute
Der Service wird ausgeführt und das Resultat in einem Result-Objekt (ohne Name) zurückgegeben. Diese Funktion gibt von sich selbst den Status ok (siehe XRES) zurück.
Beispiel
«nXSER(requestName:execute)\A»
execute, Mandant-Nr,
Anwender-Nr,
UiMls-Spr-Nr,
Data-Spr-Nr,
Verschlüsseltes Passwort
Wie execute oben. Jedoch mit zusätzlichen Parametern. Falls einzelne Parameter nicht gebraucht werden, kann man sie einfach leer lassen.
  • Mandant-Nr. - Der Service wird im entsprechenden Mandanten ausgeführt. (u.U. muss ein User und dessen Passwort mitgegeben werden.
  • Anwender-Nr. - Der Service wird im Kontext des mitgegebenen Anwenders ausgeführt. (u.U. muss das Passwort mitgegeben werden.)
  • Beschriftungssprache für das Ausführen des Service.
  • Datensprache für das Ausführen des Service.
  • Verschlüsseltes Passwort des mitgegebenen Anwenders. (Anwender-Nr.)
Hinweis
Hinweis
Das mandantenübergreifende Ausführen eines Service ist nur mit einer korrekten Anwender-Nr. und Passwort möglich. Die Angabe von 0 oder leer, funktioniert in diesen Fällen nicht.
Beispiel
«nXSER(requestName:execute,69,123456,51,1,024LHhbmAWOiFMOYCmIo1GpXA==7Jfl5DtvD9hu7Qh/YNOUSg==)\A»
XSER mit expliziter Impersonation.
execute, Mandant-Nr,
Impersonator>ImpersonateAs,
UiMls-Spr-Nr,
Data-Spr-Nr,
Verschlüsseltes Passwort von Impersonator
Wie execute oben. Jedoch mit expliziter Impersonation.
  • Mandant-Nr. - Der Service wird im entsprechenden Mandanten ausgeführt. (u.U. muss ein User und dessen Passwort mitgegeben werden.
  • Impersonator>ImpersonateAs - Der Service wird im Kontext von ImpersonateAs ausgeführt.
  • Beschriftungssprache für das Ausführen des Service.
  • Datensprache für das Ausführen des Service.
  • Verschlüsseltes Passwort von Impersonator.
Beispiel
...
# Beispiel für explizite Impersonation in einem F-Script via XSER:
# - Benutzer 73 (Impersonator) muss Administrator sein (Administrator-Stufe >0).
# - Benutzer 77 (ImpersonateAs) muss Impersonation erlauben.
«nXSER(reqGetBo:execute,1,73>77,51,1,passwordOfUser73>resGetBo)\A»
...
execute > resultName
Wie execute oben. Das Resultat wird jedoch in einem Result-Objekt mit dem angegebenen Namen (hier im Beispiel: resultName) zurückgegeben.
Beispiele
«nXSER(requestName:execute>resultName)\A»

«nXSER(requestName:execute,69,123456,51,1,024LHhbmAWOiFMOYCmIo1GpXA==7Jfl5DtvD9hu7Qh/YNOUSg==>resultName)\A»
execute > XFAS
Wie execute oben. Das Resultat wird dabei einem eigenen Result-Objekt (XFAS) übergeben.
Auf diese Weise können Sie das gesamte Resultat an den Aufrufer (z.B. System_RunScript oder WebService) zurückgeben, ohne dass dabei durch die einzelnen Zeilen des Resultats iteriert werden muss.
Hinweis
Hinweis
Beachten Sie, dass pro Script nur ein Result-Objekt (XFAS) übergeben werden kann.
Beispiele
«nXSER(requestName:execute>XFAS)\A»

«nXSER(requestName:execute,69,123456,51,1,024LHhbmAWOiFMOYCmIo1GpXA==7Jfl5DtvD9hu7Qh/YNOUSg==>XFAS)\A»
Folgendes Assembly muss für die Verschlüsselung des User-Passwortes verwendet werden:
\insyde\ServiceBus\Connectors\Opacc.ServiceBus.Connector.Biz.Df.dll

XRES

Funktion
Parameter
Beschreibung
XRES
Result-Objekt. Man kann mehrere solche Objekte gleichzeitig definieren und aktiv halten. Die Unterscheidung dieser Objekte geschieht über deren Namen. Der Name kann auch leer gelassen werden. Ein Result-Objekt ohne Name bleibt so lange aktiv, bis ein neues Result-Objekt erzeugt bzw. abgefüllt wird, welches ebenfalls keinen Namen trägt.
Beispiel
# Objekt-Name = PosResultat
«XRES(PosResultat:Parameter)»

# Objekt ohne Name (default)
«XRES(:Parameter)»
ok
Wurde der Service erfolgreich ausgeführt? 0/1.
roType
Typ des Result-Objektes.
boType
BO-Typ wenn das Result-Objekt von einem Service stammt. Sonst leer.
cols
Anzahl Spalten im Result-Objekt.
rows
Anzahl Zeilen im Result-Objekt.
mKey
Message-Key
mText
Message-Text
mTextFull
Gesamter Inhalt von MsgText.
(Alle Segmente, nicht nur der eigentliche Text.)
mTextLogMsg
Log-Message.
Eine Log-Message wird (in der Regel) vom Service auch noch im jeweiligen Logfile eingetragen.
mTextUiMsg
UI-Message.
Eine UI-Message wird (schon durch den Service selber) dem Anwender angezeigt.
duration
Ausführungszeit in ms.
Beispiel
«XRES(myService:duration)»
Zusatzinformation: Die erste Spalte und die erste Zeile im Resultat tragen die Nummer 1.
col, SpaltenNr
Spalten-Name der Spalte mit SpaltenNr.
SpaltenNr
Attribut-Wert in dieser Spalte (Zeile 1)
SpaltenNr , ZeilenNr
Attribut-Wert in dieser Spalte auf dieser Zeile.
SpaltenName
Attribut-Wert in dieser Spalte (Zeile 1)
SpaltenName,ZeilenNr
Attribut-Wert in dieser Spalte auf dieser Zeile.
... > VariablenName
Attribut-Wert direkt einer Variablen zuweisen. Das ist vor allem bei Werten wichtig, welche mehr als 255 Zeichen beinhalten. (Meist Textblöcke)
Beispiel
«XRES(myAddrText:AddrText.Text>textBlock)\A»
Übergeben von Message-Text in eine X-Variable.
XRES(myService:mText)
XRES(myService:mTextFull)
XRES(myService:mTextLogMsg)
XRES(myService:mTextUiMsg)
Beispiel
«XRES(myService:mText>MyVariable)»
SpaltenNr/Name,ZeilenNr,...
Falls an der entsprechenden Stelle ein Textblock steht, können bei der Ausgabe dieses Attribut-Wertes nach der ZeilenNr folgende Parameter verwendet werden:
(Es handelt sich hier um die üblichen Textblock Parameter)
Wnn
Textblock mit Breite nn drucken.
+1
Nach Ausgabe des Textblockes eine Leerzeile drucken.
#nn
Seitenkontrolle auf nn Zeilen ab der zweiten Zeile des Textblockes.
m>xx
Textblock mit linkem Rand xx ab der ersten Zeile des Textblockes.
Mxx
Textblock mit linkem Rand xx ab der zweiten Zeile des Textblockes.
OUTxxxx
Textblock in Datei xxxx speichern.
APPxxxx
Textblock an Datei xxxx anhängen.
Bei der Ausgabe mit ...\N» , wird die Anzahl Zeilen des Textblockes zurückgegeben.
Die Funktion «READ(ZeilenNr)» steht ebenfalls zur Verfügung.
redo
Der Service wird erneut ausgeführt und das Resultat hier in diesem Result-Objekt zurückgegeben. Diese Funktion gibt von sich selbst den Status ok zurück.
redo,
SuchOperation,
StartPositionIstOben,
AnzahlBOs
Diese Funktion ist nur für den Service GetBo gültig. Sie wird benötigt, wenn weitere BOs geholt werdenwerden, bzw. ein "paging" durchgeführt werden soll.
Beschreiben möchte ich hier im Speziellen den Parameter StartPositionIstOben. Damit setzt der redo beim ersten BO des vorherigen Resultates auf und bringt die nächsten BOs ab dort. Dass kann z.B. hilfreich sein, wenn im Result-Objekt an erster Stelle ein BO steht ab dem man eine bestimmte Anzahl weiterer BOs auslesen will. (Wobei zu beachten ist, dass je nach Konstellation einzelne BOs schon beim ersten Mal gelesen wurden.)
Falls die zusätzlichen Parameter nicht gebraucht werden, kann man sie leer lassen.
redoData
Abfragen der Redo-Daten.
Syntax: «XRES(<resultName>:redoData)»
MSG
SYS(MSG...) -Meldungen aus einem aufgerufenen F-Script übernehmen.
Ausgangslage: Aus einem F-Script heraus wird via System_RunScript ein weiteres F-Script ausgeführt. Das aufgerufene F-Script liefert mittels SYS(MSG <Typ> <Meldung>) Meldungen/Fehler.
Mit dem Befehl «XRES(resultat:>MSG)» können Sie diese Meldungen in das aufrufende F-Script übernehmen. Die Meldungen/Fehler aus dem aufgerufenen F-Script werden dann zusammen mit denjenigen aus dem aufrufenden F-Script ausgegeben.

XQRY

Funktion
Parameter
Beschreibung
XQRY
Query-Objekt. Man kann mehrere solche Objekte gleichzeitig definieren und aktiv halten. Die Unterscheidung dieser Objekte geschieht über deren Namen. Der Name kann auch leer gelassen werden. Ein Query-Objekt ohne Name bleibt so lange aktiv, bis ein neues Query-Objekt erzeugt wird, welches ebenfalls keinen Namen trägt.
Beispiel:
«XQRY(PosCheck:Parameter)» Objekt-Name = PosCheck
«XQRY(:Parameter)» Objekt ohne Name (default)
clear
Alle Argumente des Query-Objekts entfernen.
Achtung
Achtung
Wird ein XQRY mit demselben Namen mehrfach verwendet, dann müssen vor dem erneuten Setzen von Argumenten zuerst alle vorhandenen Argumente mit clear entfernt werden!
addArg=ArgumentWert
Das nächste Argument setzen.
addArg<VariablenName
Das nächste Argument aus einer Variable setzen.
arg,N=ArgumentWert
Das "n'te" Argument setzen.
arg,N<VariablenName
Das "n'te" Argument aus einer Variable setzen.
arg,N+VariablenName
Das "n'te" Argument aus einer Variable ergänzen.
arg,N
Das "n'te" Argument wird zurückgegeben
args
Anzahl Argumente zurückgeben.
execute
Der Service wird ausgeführt und das Resultat in einem Query-Result-Objekt (ohne Name) zurückgegeben. Diese Funktion gibt von sich selbst den Status ok (siehe XRES) zurück.
execute > Positionen
Wie execute oben. Das Resultat wird jedoch in einem Query-Result-Objekt mit dem angegebenen Namen (hier Positionen) zurückgegeben.
execute, Mandant-Nr,
Anwender-Nr,
UiMls-Spr-Nr,
Data-Spr-Nr,
User-Passwort
Wie execute oben. Jedoch mit zusätzlichen Parametern. Falls diese nicht gebraucht werden, kann man sie einfach leer lassen. Mit Mandant-Nr. ist es möglich, den Service im angegebenen Mandanten auszuführen. Ausserdem kann man den Anwender und die User- resp. Datensprache mitgeben.
Hinweis
Hinweis
Das mandantenübergreifende Ausführen eines Service ist nur mit einer korrekten Anwender-Nr. und Passwort möglich. Die Angabe von 0 oder leer, funktioniert in diesen Fällen nicht.
Folgendes Assembly muss für die Verschlüsselung des User-Passwortes verwendet werden:
\insyde\ServiceBus\Connectors\Opacc.ServiceBus.Connector.Biz.Df.dll
Siehe auch: Grundlagen - Mandantenübergreifend (Service und Result)

XQRS

Funktion
Parameter
Beschreibung
XQRS
Query-Result-Objekt. Man kann mehrere solche Objekte gleichzeitig definieren und aktiv halten. Die Unterscheidung dieser Objekte geschieht über deren Namen. Der Name kann auch leer gelassen werden. Ein Query-Result-Objekt ohne Name bleibt so lange aktiv, bis ein neues Query-Result-Objekt erzeugt bzw. abgefüllt wird, welches ebenfalls keinen Namen trägt.
Beispiel
# Objekt-Name = PosListe
«XQRS(PosListe:Parameter)»

# Objekt ohne Name (default)
«XQRS(:Parameter)»
ok
Wurde der Service erfolgreich ausgeführt? 0/1.
cols
Anzahl Spalten im Query-Result-Objekt.
rows
Anzahl Zeilen im Query-Result-Objekt.
mKey
Message-Key
mText
Message-Text
duration
Ausführungszeit in ms.
Beispiel
«XQRS(myService:duration)»
Zusatzinformation: Die erste Spalte und die erste Zeile im Resultat tragen die Nummer 1.
col, SpaltenNr
Spalten-Name der Spalte mit SpaltenNr.
SpaltenNr
Attribut-Wert in dieser Spalte (Zeile 1)
SpaltenNr , ZeilenNr
Attribut-Wert in dieser Spalte auf dieser Zeile.
SpaltenName
Attribut-Wert in dieser Spalte (Zeile 1)
SpaltenName,ZeilenNr
Attribut-Wert in dieser Spalte auf dieser Zeile.
... > VariablenName
Attribut-Wert direkt einer Variablen zuweisen. Das ist vor allem bei Werten wichtig, welche mehr als 255 Zeichen beinhalten. (Meist Textblöcke)
Beispiel
«XQRS(myAddrText:AddrText.Text>textBlock)\A»
Übergeben von Message-Text in eine X-Variable.
XQRS(myQuery:mText)
Beispiel
«XQRS(myQuery:mText>MyVariable)»
SpaltenNr/Name,ZeilenNr,...
Falls an der entsprechenden Stelle ein Textblock steht, können bei der Ausgabe dieses Attribut-Wertes nach der ZeilenNr folgende Parameter verwendet werden:
(Es handelt sich hier um die üblichen Textblock Parameter)
Wnn
Textblock mit Breite nn drucken.
+1
Nach Ausgabe des Textblockes eine Leerzeile drucken.
#nn
Seitenkontrolle auf nn Zeilen ab der zweiten Zeile des Textblockes.
m>xx
Textblock mit linkem Rand xx ab der ersten Zeile des Textblockes.
Mxx
Textblock mit linkem Rand xx ab der zweiten Zeile des Textblockes.
OUTxxxx
Textblock in Datei xxxx speichern.
APPxxxx
Textblock an Datei xxxx anhängen.
Bei der Ausgabe mit ...\N» , wird die Anzahl Zeilen des Textblockes zurückgegeben.
Die Funktion «READ(ZeilenNr)» steht ebenfalls zur Verfügung.
redo
Der Service wird erneut ausgeführt und das Resultat hier in diesem Result-Objekt zurückgegeben. Diese Funktion gibt von sich selbst den Status ok zurück.
redo,
SuchOperation,
StartPositionIstOben,
AnzahlBOs
Diese Funktion wird benötigt, wenn weitere Rows geholt werden, bzw. ein "paging" durchgeführt werden soll.
Beschreiben möchte ich hier im Speziellen den Parameter StartPositionIstOben. Damit setzt der redo bei der ersten Row des vorherigen Resultates auf und bringt die nächsten Rows ab dort. Dass kann z.B. hilfreich sein, wenn im Result-Objekt an erster Stelle ein BO steht ab dem man eine bestimmte Anzahl weiterer BOs auslesen will. (Wobei zu beachten ist, dass je nach Konstellation einzelne BOs schon beim ersten Mal gelesen wurden.)
Falls die zusätzlichen Parameter nicht gebraucht werden, kann man sie leer lassen.
Die Möglichkeiten bzw. die Logik entspricht dabei 1:1 derjenigen von XRES im Zusammenhang mit GetBo.
redoData
Abfragen der Redo-Daten.
Syntax: «XQRS(<resultName>:redoData)»

X Variable

Funktion
Parameter
Beschreibung
X
X als Befehl resp. Funktion dient dazu Variablen oder Werte zwischenzuspeichern. Man kann hinter das X einen beliebigen Namen setzen, was die Identifikation der Variablen im Sourcecode sehr vereinfacht.
VariablenName = Wert
Die Variable wird definiert und gleichzeitig wird ihr ein Wert zugewiesen.
Beispiel
«X(LetzteAdrNr=1267)»
Achtung
Achtung
Im Variablen-Name dürfen die Zeichen * + < = nicht vorkommen!
VarName < VarName
Der Inhalt einer Variable wird einer anderen Variable zugewiesen.
Beispiel
«X(newText<textToSave)»
«(assign(<variable>, <Expression>))\E»
Der Inhalt einer Variable wird einer anderen Variable zugewiesen. Der Befehl assign verhindert dabei das Expandieren der Variable welche zugewiesen werden soll.
Mit diesem Befehl ist es möglich, mit X-Variablen zu arbeiten die mehr als 4096 Zeichen enthalten.
Beispiel:
# ---------------------------------------------------
# Initialisieren der Variablen
«X(Summe=)»
«X(Wert1=123)»
«X(Wert2=456)»
# ---------------------------------------------------
# Verketten von X-Variablen (String)
«(assign(Summe, Wert1 + Wert2))\E»
# Ausgabe:
Resultat der String-Verkettung: «X(Summe)»
# ---------------------------------------------------
# Addition von X-Varialblen (integer
«(assign(Summe, integer(Wert1) + integer(Wert1)))\E»
# ---------------------------------------------------
# Ausgabe:
Resultat der Addition: «X(Summe)\N»
VarName + VarName
Eine Variable wird um den Inhalt einer anderen Variable ergänzt.
Beispiel
«X(newText+moreText)»
VarName, TextParameter
Falls in der Variable ein Textblock steht, können bei der Ausgabe dieser Variable folgende Parameter verwendet werden:
(Es handelt sich hier um die üblichen Textblock Parameter)
Wnn
Textblock mit Breite nn drucken.
+1
Nach Ausgabe des Textblockes eine Leerzeile drucken.
#nn
Seitenkontrolle auf nn Zeilen ab der zweiten Zeile des Textblockes.
m>xx
Textblock mit linkem Rand xx ab der ersten Zeile des Textblockes.
Mxx
Textblock mit linkem Rand xx ab der zweiten Zeile des Textblockes.
OUTxxxx
Textblock in Datei xxxx speichern.
APPxxxx
Textblock an Datei xxxx anhängen.
Bei der Ausgabe mit ...\N» , wird die Anzahl Zeilen des Textblockes zurückgegeben.
Die Funktion «READ(ZeilenNr)» steht ebenfalls zur Verfügung.
Beispiel
«X(myAddrText,W80)»
VariablenName
Die Variable wird abgefragt und der darin abgelegte Wert wird zurückgegeben.
Beispiel
«X(LetzteAdrNr)»
«READ(<Kanal>:MEM>XVarName)»
Daten welche mit dem READ-Befehl gelesen werden, können direkt einer X-Variable zugewiesen werden. Dabei sind auch Zuweisungen von mehr als 4096 Zeichen möglich.
Beispiele
# Puffer auslesen:
«READ(<Kanal>:MEM>XVarName)»

# Puffer auslesen bis zum nächsten Trennzeichen:
«READ(<Kanal>:MEM>XVarName -<Trennzeichen>)»

# Anzahl Zeichen ab Position aus Puffer lesen:
«READ(<Kanal>:MEM>XVarName <Anzahl Zeichen>,<Position>)»
«nz ADR-ACTIVE(2020)\I»
«nm1KUNDEN-BEM(1)\N»
«REPEAT»
«nNO(1)»
«READ(«NO(1,0)»>TextBlock)»
«X(TextBlock)»
«nz NO(1,0)<«MEM(1)\N»\N»«LOOP»
Der Zugriff auf X-Variablen innerhalb von Expressions ist auch über den Namen der Variable möglich. Damit können Sie Expressions auf X-Variablen anwenden die Quotes oder Double-Quotes enthalten.
«X(MyVar=Dies ist ein "F-Script")»

# Inhalt der Variable ausgeben (wie bisher)
«X(MyVar)»

# Expression auf die Variable anwenden (neu):
«(length(MyVar))\E»
Wichtig
Wichtig
Beachten Sie, dass die Anwendung dieser Funktionalität ist nur möglich ist, solange das Resultat weniger als 4096 Zeichen umfasst.
Wird ohne Expand gearbeitet, d.h. nur mit dem Variablennamen, dann kann auch mit Resultaten (Strings) gearbeitet werden die mehr als 4096 Zeichen umfassen.

X-Variablen aus Library erzeugen

Der Befehl «X(<LIB:meinelibrary.lb)» bietet Ihnen die Möglichkeit, X-Variablen die auf F-Script-Libraries basieren, automatisch zu erzeugen. Dabei wird die Library zeilenweise gelesen und die Einträge jeweils beim Pipe-Zeichen | (AltGr-7 resp. ASCII 124) gesplittet. Der Wert vor der Pipe wird automatisch als Name/Bezeichner der entsprechenden X-Variable verwendet. Der Wert nach der Pipe wird der X-Variable als Wert zugeteilt. Zeilen der Library welche mit "#" beginnen oder Zeilen ohne "|" werden ignoriert.
Funktion
Parameter
Beschreibung
X(<LIB)
«X(<LIB:meinelibrary.lb)»
Automatisches Erzeugen von X-Variablen basierend auf einer F-Script Library.
Wichtig
Wichtig
Enthalten die Library-Einträge F-Script-Befehle, werden diese erst bei der Verwendung der X-Variable ausgewertet!
Beispiel
VerMA|Verantwortlich: «VORNAME(«ADRNR»)» «NAME(«ADRNR»)»
Da die Adresse erst zur Laufzeit der Verwendung der X-Variable ausgewertet wird, ist sicherzustellen, dass zu diesem Zeitpunkt auch die richtige Adresse aktiv ist.
Beispiel:
Aktive Adresse = 1000
Vorname der Adresse 1000: Heinz
Nachname der Adresse 1000: Huber
«X(VerMA)» ergibt: Heinz Huber

X-Array

Funktion
Parameter
Beschreibung
XARR
Definieren von Arrays mit beliebigen Namen.
varName
Anzahl Elemente eines Array. Gibt 0 zurück, wenn der Array nicht definiert ist.
Syntax: «XARR(myArray)»
varName=
Erstellen eines neuen leeren Array bzw. bestehenden Array zurücksetzen/leeren.
Syntax: «XARR(myArray=)»
Wichtig
Wichtig
Der Name eines Array darf nur Buchstaben und Zahlen enthalten. Sonderzeichen wie Punkt, Strich, Unterstrich, etc. sind nicht erlaubt.
varName<ArrayName
Array basierend auf einem anderen Array erstellen/überschreiben. Der Befehl gibt die Anzahl Elemente des neuen Array zurück.
Syntax: «XARR(myArrayNew<myArrayOld)»
varName+value
Hinzufügen eines Elements zu einem bestehenden Array. Der Befehl gibt die neue Anzahl Elemente des Array zurück.
Syntax: «XARR(myArray+Hallo Welt)»
varName+<xVarName
Hinzufügen eines Elements zu einem bestehenden Array. Dabei ist das Element welches hinzugefügt werden soll in einer X-Variable gespeichert. Der Befehl gibt die neue Anzahl Elemente des Array zurück.
Syntax:
«X(myStringVar=Hallo Welt)»
«XARR(myArray+<myStringVar)»
varName[oneBasedIndex]
Auslesen eines bestimmten Array-Elements.
Syntax: «XARR(myArray[3])»
varName[oneBasedIndex]>xVarName
Speichern eines bestimmten Array-Elements in einer X-Variablen.
Syntax: «XARR(myArray[4]>myVar)» «X(myVar)»
varName[oneBasedIndex]=value
Setzen eines bestimmten Array-Elements. Der Befehl gibt die neue Anzahl Elemente des Array zurück.
Syntax: «XARR(yArray[5]=Hallo Welt)»
varName[oneBasedIndex]<xVarName
Setzen eines bestimmten Array-Elements. Dabei ist das Element welches gesetzt werden soll in einer X-Variable gespeichert. Der Befehl gibt die neue Anzahl Elemente des Array zurück.
Syntax: «X(myVar=Hallo Welt)» «XARR(myArray[6]<myVar)
varName[oneBasedIndex]+value
Ergänzen eines bestimmten Array-Elements. Der Befehl gibt die Anzahl Elemente des Array zurück.
Syntax: «XARR(myArray[5]+Hallo Mars)»
varName[oneBasedIndex]-
Löschen eines bestimmten Array-Elements. Der Befehl gibt die Anzahl Elemente des Array zurück.
Syntax: «XARR(myArray[5]-)»
# Array initialisieren (löschen)
«nXARR(personen=)»
# ------------------------------------------------------------------------------------------------------
# X-ARRAY initialisieren und Elemente hinzufügen
«nXARR(entwickler=)»
«nXARR(entwickler+Ueli Amstutz,)»
«nXARR(entwickler+Hans Muster,)»
# X-ARRAY entwickler in X-ARRAY personen speichern
«nXARR(personen<entwickler)»
# ------------------------------------------------------------------------------------------------------
# Element hinzufügen:
«nXARR(personen+Roman Vonwil,Scripter/Tester)»
# ------------------------------------------------------------------------------------------------------
# Element aus X-Variable hinzufügen:
«nX(person=Martin Schild,Quality Manager/Tester)»
«nXARR(personen+<person)»
# ------------------------------------------------------------------------------------------------------
# Wert des 1. Elements ergänzen:
«nXARR(personen[1]+Entwickler OXAS)»
# ------------------------------------------------------------------------------------------------------
# Wert des 5. Elements setzen:
«nXARR(personen[5]=Stefan Egli,Entwickler BOF)»
# ------------------------------------------------------------------------------------------------------
# Das 2. Element löschen (Hans Muster)
«nXARR(personen[2]-)»
# ------------------------------------------------------------------------------------------------------
# Ausgabe des X-ARRAY
«nNO(1,NULL)»
«REPEAT(1)»
«nNO(1)»
# ------------------------------------------------------------------------------------------------------
# Erstellen der XFAS-Cells
«XFAS(cells=«XARR(personen[«NO(1,0)»])»)»

«nz NO(1,0)<«XARR(personen)\N»\N»«LOOP(1)»
Mögliche Fehlermeldungen:
Fehler wenn INDEX-Segment 0 abgefragt wird - Im Beispiel wird die Ausgabe mittels nXARR unterdrückt!
«XARR(meinArray[«nXARR(meinArray)»])»
XARR_Err_01.jpg
Fehler wenn ein nicht existierendes INDEX-Segment abgefragt wird:
XARR_Err_02.jpg
Fehler bei direkter Wertzuweisung:
«XARR(varName=WERT)»
XARR_Err_03.jpg
Fehler bei Zuweisung einer nicht vorhandenen X-Variable:
XARR_Err_04.jpg
Fehler bei Zuweisung eines nicht vorhandenen XARR:
XARR_Err_05.jpg