F-Script als Service (XFAS)

F-Script als Service (XFAS)

Über die Funktionalität "F-Script asl Service" können Sie innerhalb eines F-Script ein eigenes Result-Objekt erstellen.
Wird ein F-Script das diese Funktionalität verwendet via "System_RunScript" ausgeführt, kann das so erzeugte Result-Objekt genauso verwendet werden, wie beispielsweise das Resultat eines GetBo.
Das F-Script funktioniert dann vom Prinzip her genauso wie ein BIZ-Service.
Hinweis
Hinweis
Block-Funktionen
Sie finden die vollständige Liste der vordefinierten Block-Funktionen des Befehls XFAS in der F-Script Dokumentation unter F-Script Block-Funktionen.

XFAS-Validierung

Funktion
Parameter
Beschreibung
XFAS
fasActive
Kann ein eigenes Result-Object erstellt werden? 0/1
Prüfen Sie vor der Verwendung von XFAS-Befehlen jeweils die Verfügbarkeit der XFAS-Funktionalität.
Verwenden Sie Befehle wie XFAS(head... XFAS(cell... etc. nur dann, wenn fasActive = true
clear
Result-Object zurücksetzen.

XFAS-Befehle

Funktion
Parameter
Beschreibung
XFAS
head=name
Eine Spalte einfügen. Der Spaltenname entspricht dann dem Wert von "name".
Achtung: Die Zeichen Ascii-30(▲) oder Ascii-26(→) werden durch Space ersetzt.
headBinary=name
Wie oben, aber die Spalte beinhaltet als Werte die Dateinamen mit Path oder leer. Es handelt sich hier um Dateien mit binärem Inhalt (z.B.: Bilder). Die Dateigrösse kann bis zu 128 MB betragen.
heads=name1,name2,...
Mehrere Spalten mit einem Aufruf einfügen. Die Spaltennamen entsprechen dann dem Wert von "name1", "name2", etc.
Achtung: Die Zeichen Ascii-30(▲) oder Ascii-26(→) werden durch Space ersetzt.
Hinweis
Hinweis
Da die einzelnen Werte mit Komma separiert werden, empfehlen wir dringend, diese Befehle nur mit fixen Argumenten (die keine Kommas enthalten) zu verwenden.
cell=value
Eine Zelle einfügen. Der Zellenwert entspricht dann "value". Die Zellengrösse kann bis zu 128 KB betragen.
Achtung: Die Zeichen Ascii-30(▲) oder Ascii-26(→) werden durch Space ersetzt.
cells=value1,value2,...
Mehrere Zellen mit einem Aufruf einfügen. Der Zellenwert entspricht dann "value1", "value2", etc. Die Zellengrösse kann bis zu 128 KB betragen.
Achtung: Die Zeichen Ascii-30(▲) oder Ascii-26(→) werden durch Space ersetzt.
Hinweis
Hinweis
Da die einzelnen Werte mit Komma separiert werden, empfehlen wir dringend, diese Befehle nur mit fixen Argumenten (die keine Kommas enthalten) zu verwenden.
cell<VarName
Eine Zelle einfügen. Der Zellenwert wird von "VarName" übernommen (siehe «X(...)»)
cellAppend=value
Der Wert der letzten Zelle wird um "value" ergänzt.
cellAppend<VarName
Der Wert der letzten Zelle wird um den Wert von "VarName" ergänzt.
XFAS-Werte lassen sich auch direkt über den "Spaltennamen" setzen.
Anstelle des Befehls «XFAS(cell=...)» können Sie dafür den Befehl «XFAS(col=[Spaltenname],[Wert])» verwenden.
Hinweis
Hinweis
Es muss explizit angegeben werden, wenn eine neue Zeile erzeugt werden soll.
Für "teure" Werte (Werte deren Berechnung aufwändig ist), sollte der Verfasser des F-Scripts vor der Berechnung und dem Setzen des XFAS-Werts prüfen, ob die entsprechende Spalte tatsächlich benötigt wird: "XCNT(colActive:[Spaltenname]
Nicht gesetzte Spalten einer Row sind leer. Es wird kein Fehler ausgegeben.
Ein F-Script Beispiel finden Sie hier: Setzen von Werten über Spaltenname
col=[Spaltenname],[Wert]
Wert für eine bestimmte Spalte setzen.
«XFAS(col=[Spaltenname],[Wert])»
col<[Spaltenname],[Variablenname]
Wert für eine bestimmte Spalte setzen, ausgehend von einer X-Variable.
«XFAS(col<[Spaltenname],[Variablenname])»
Eine Row kann/muss explizit abgeschlossen resp. eine neue Row eröffnet werden.
«XFAS(newRow)»
Befehle für das Setzen von Response-Infos
ok=0|1
Setzen des Response-Info Successful-Flag.
mKey=...
Setzen des Response-Info Message-Key.
mText=...
Setzen des Response-Info Message-Text.
mMlsKey=...
Setzen des Response-Iinfo MLS-Key. Dieser muss im OpaccOXAS Studio BC 98230 erfasst sein. Wird der Response-Info MLS-Key gesetzt, übersteuert er die MLS-Text Parameter. (Siehe nächster Befehl.)
mMlsTextParam=...
Setzen der Response-Info MLS-Text Parameter. Dieser Befehl kann mehrfach verwendet werden, wenn mehrere MLS-Text Parameter notwendig sind.
Beispiel
«XFAS(ok=0)» 
«XFAS(mMlsKey=Aps.InvalidBo)» 
«XFAS(mMlsTextParam=Addr)» 
«XFAS(mMlsTextParam=73)» 
Rückgabe basierend auf obigem Beispiel:
Für den Message-Key: Aps.InvalidBo
Für den Message-Text: Das Business-Objekt Addr mit der ID 73 ist nicht gültig.

XFAS als Resultat eines XSER

Funktion
Parameter
Beschreibung
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»

Beispiel 1 - Resultat zeilenweise iterieren

Beispiel für die Anwendung von XFAS
Scripts: XX-XFASDEMO.FF, XX-XFASDEMO.FX
Hauptscript: XX-XFASDEMO.FF
# ______________________________________________________________________________
# Dateiname: XX-XFASDEMO.FF  
# Subscript: XX-XFASDEMO.FX  
# 
# Autor: OPACC Software AG - Roman Vonwil 
#  
# Erstellt: 03.01.2013 / rv
# 
/headerreport
# ______________________________________________________________________________  
# Aktives Dokument in Variable füllen  
«X(SalDoc.BoId =«AUF-DOKINR»)» 
# ______________________________________________________________________________ 
# Gewünschten Filter für GetBo in SubScript definieren 
«/Define.Filter»
# ______________________________________________________________________________  
# Gewünschte Attribute für Rückgabe aus Subscript definieren  
«/Define.ReturnValues»
# ______________________________________________________________________________
# System_RunScript mit RV-XFASDEMO.FX ausführen (inkl. Parameter)
«/XFAS.Execute»
# ______________________________________________________________________________
# Resultat listen und ggf. ausgeben
«/XFAS.GetGrid» 
/ 

/Define.Filter
# ______________________________________________________________________________
# Filter wird hier im CB(4) an das Subscript übergeben
«X(Param.CB4 =SalOrder.SalProcLevelCd > «AUF-TYP\N»)»
/

/Define.ReturnValues
# ______________________________________________________________________________
# Gewünschte BO-Attribute für GetBo in Subscript
«X(Param.CB5=SalDoc.BoId(SalOrder.SalDocInternalNo))»
«X(Param.CB5=«X(Param.CB5)»,SalDoc.BoName(SalOrder.SalDocInternalNo))»
«X(Param.CB5=«X(Param.CB5)»,SalDoc.SalProcLevelCd(SalOrder.SalDocInternalNo))»
«X(Param.CB5=«X(Param.CB5)»,SalDoc.ShortCut(SalOrder.SalDocInternalNo))»
/

/XFAS.Execute
# ______________________________________________________________________________
# System RunScript ausführen - ZWINGEND DRUCKER 98 und AUSGABETYP B (Bildschirm)
«XSER(scriptRunner:System_RunScript)»
«XSER(scriptRunner:addArg=RV-XFASDEMO.FX)»
«XSER(scriptRunner:addArg=98)»
«XSER(scriptRunner:addArg=B)»
«XSER(scriptRunner:addArg=)»
«XSER(scriptRunner:addArg=)»
«XSER(scriptRunner:addArg=)»
«XSER(scriptRunner:addArg=)»
«XSER(scriptRunner:addArg=SalDoc)»
«XSER(scriptRunner:addArg=«AUF-DOKINR»)»
# BO-Organizator 99 (Allgemeine Script Abarbeitung) wenn kein Body benötigt.
«XSER(scriptRunner:addArg=99)»
# Übergabeparamter an Subscript weiterreichen
«XSER(scriptRunner:addArg=«X(Param.CB4)»)»
«XSER(scriptRunner:addArg=«X(Param.CB5)»)»
«nXSER(scriptRunner:execute>resXFAS)\A»
# Anzahl Records vom SubScript entgegennehmen
«X(Result.RowCount=«XRES(resXFAS:rows)»)»
/

/XFAS.GetGrid
# ______________________________________________________________________________
# Resultate gem. Subscript listen und ausgeben
«nzX(Result.RowCount)=0\N»nix«GOTO(/)»
«nNO(9,NULL)»
«REPEAT(9)»
«nNO(9)»
«/Result.Row.Print»
«nzNO(9,0)<«X(Result.RowCount)\N»\N»«LOOP(9)»
/

/Result.Row.Print
# ______________________________________________________________________________
# hier werden pro Row (Zeile) die einzelnen Spalten ausgegeben:
#
# Ausgabe Spalte 1 Bezeichnung hier SalDoc.BoId
«XRES(resXFAS:col,1)»: «XRES(resXFAS:1,«NO(9,0)»)»
# Ausgabe Spalte 2 Bezeichnung hier SalDoc.BoName
«XRES(resXFAS:col,2)»: «XRES(resXFAS:2,«NO(9,0)»)»
# Ausgabe Spalte 3 Bezeichnung hier SalDoc.SalProcLevelCd
«XRES(resXFAS:col,3)»: «XRES(resXFAS:3,«NO(9,0)»)»
# Ausgabe Spalte 4 Bezeichnung hier SalDoc.ShortCut
«XRES(resXFAS:col,4)»: «XRES(resXFAS:4,«NO(9,0)»)»
/
Subscript: XX-XFASDEMO.FX
# ______________________________________________________________________________
# Beispielscript Verwendung von XFAS (F-Script as Service)
#
# Dateiname: XX-XFASDEMO.FX
# Hauptscript: XX-XFASDEMO.FF
#
# Autor: OPACC Software AG - Roman Vonwil
#
# Erstellt: 03.01.2013 / rv
# ______________________________________________________________________________
#
/headerreport
# ______________________________________________________________________________
# Parameter abfüllen:
«/XFAS.GetParams»
# ______________________________________________________________________________
# Spaltenüberschriften (head) erzeugen:
«/XFAS.Add.Header»
# ______________________________________________________________________________
# Records mittels GetBo holen
«/Records.GetSalOrder»
# ______________________________________________________________________________
# Resultat listen und in Zellen (cell) abfüllen
«/Records.List»
/

/XFAS.GetParams
# ______________________________________________________________________________
# Aktives Dokument in Variable speichern
«X(Param.ActiveDocument =«AUF-DOKINR»)»
«X(Param.Filter =«CB(4)»)»
«X(Param.ReturnValues =«CB(5)»)»
/

/XFAS.Add.Header
# ______________________________________________________________________________
# Spaltenüberschriften erzeugen (Frei definierbar)
# Es wird empfohlen hier logische und wiederverwendbare Bezeichner zu verwenden!
«XFAS(head=SalDoc.BoId)»
«XFAS(head=SalDoc.BoName)»
«XFAS(head=SalDoc.SalProcLevelCd)»
«XFAS(head=SalDoc.ShortCut)»
/

/Records.GetSalOrder
# ______________________________________________________________________________
# GetBo auf SalOrder (Auftragsüberwachung)
«XSER(req_GetSalOrder:GetBo)»
«XSER(req_GetSalOrder:addArg=SalOrder)»
«XSER(req_GetSalOrder:addArg=«X(Param.ActiveDocument)»)»
«XSER(req_GetSalOrder:addArg=ne)»
«XSER(req_GetSalOrder:addArg=1)»
«XSER(req_GetSalOrder:addArg=0)»
«XSER(req_GetSalOrder:addArg=1)»
«XSER(req_GetSalOrder:addArg=«X(Param.Filter)»)»
«XSER(req_GetSalOrder:addArg=«X(Param.ReturnValues)»)»
«nXSER(req_GetSalOrder:execute>res_GetSalOrder)»
«X(SalOrder.Count=«XRES(res_GetSalOrder:rows)»)»
/

/Records.List
# ______________________________________________________________________________
# Resultate gem. GetBo listen
«nzX(SalOrder.Count)=0\N»«GOTO(/)»
«nNO(9,NULL)»
«REPEAT(9)»
«nNO(9)»
«/XFAS.Add.Row»
«nzNO(9,0)<«X(SalOrder.Count)\N»\N»«LOOP(9)»
/

/XFAS.Add.Row
# ______________________________________________________________________________
# Abfüllen der einzelnen Spalten in cells
«XFAS(cell=«XRES(res_GetSalOrder:1,«NO(9,0)»)»)»
«XFAS(cell=«XRES(res_GetSalOrder:2,«NO(9,0)»)»)»
«XFAS(cell=«XRES(res_GetSalOrder:3,«NO(9,0)»)»)»
«XFAS(cell=«XRES(res_GetSalOrder:4,«NO(9,0)»)»)»
/ 

Beispiel 2 - Resultat als Objekt übergeben

Beispiel für die Anwendung von XFAS
Scripts: XX-XFASDEMO.FF, XX-XFASDEMO.FX
Hauptscript: XX-XFASDEMO.FF
# ______________________________________________________________________________
# Dateiname: XX-XFASDEMO.FF  
# Subscript: XX-XFASDEMO.FX  
# 
# Autor: OPACC Software AG - Roman Vonwil 
#  
# Erstellt: 03.01.2013 / rv
# 
/headerreport
# ______________________________________________________________________________  
# Aktives Dokument in Variable füllen  
«X(SalDoc.BoId =«AUF-DOKINR»)» 
# ______________________________________________________________________________ 
# Gewünschten Filter für GetBo in SubScript definieren 
«/Define.Filter»
# ______________________________________________________________________________  
# Gewünschte Attribute für Rückgabe aus Subscript definieren  
«/Define.ReturnValues»
# ______________________________________________________________________________
# System_RunScript mit RV-XFASDEMO.FX ausführen (inkl. Parameter)
«/XFAS.Execute»
# ______________________________________________________________________________
# Resultat listen und ggf. ausgeben
«/XFAS.GetGrid» 
/ 

/Define.Filter
# ______________________________________________________________________________
# Filter wird hier im CB(4) an das Subscript übergeben
«X(Param.CB4 =SalOrder.SalProcLevelCd > «AUF-TYP\N»)»
/

/Define.ReturnValues
# ______________________________________________________________________________
# Gewünschte BO-Attribute für GetBo in Subscript
«X(Param.CB5=SalDoc.BoId(SalOrder.SalDocInternalNo))»
«X(Param.CB5=«X(Param.CB5)»,SalDoc.BoName(SalOrder.SalDocInternalNo))»
«X(Param.CB5=«X(Param.CB5)»,SalDoc.SalProcLevelCd(SalOrder.SalDocInternalNo))»
«X(Param.CB5=«X(Param.CB5)»,SalDoc.ShortCut(SalOrder.SalDocInternalNo))»
/

/XFAS.Execute
# ______________________________________________________________________________
# System RunScript ausführen - ZWINGEND DRUCKER 98 und AUSGABETYP B (Bildschirm)
«XSER(scriptRunner:System_RunScript)»
«XSER(scriptRunner:addArg=RV-XFASDEMO.FX)»
«XSER(scriptRunner:addArg=98)»
«XSER(scriptRunner:addArg=B)»
«XSER(scriptRunner:addArg=)»
«XSER(scriptRunner:addArg=)»
«XSER(scriptRunner:addArg=)»
«XSER(scriptRunner:addArg=)»
«XSER(scriptRunner:addArg=SalDoc)»
«XSER(scriptRunner:addArg=«AUF-DOKINR»)»
# BO-Organizator 99 (Allgemeine Script Abarbeitung) wenn kein Body benötigt.
«XSER(scriptRunner:addArg=99)»
# Übergabeparamter an Subscript weiterreichen
«XSER(scriptRunner:addArg=«X(Param.CB4)»)»
«XSER(scriptRunner:addArg=«X(Param.CB5)»)»
«nXSER(scriptRunner:execute>resXFAS)\A»
# Anzahl Records vom SubScript entgegennehmen
«X(Result.RowCount=«XRES(resXFAS:rows)»)»
/

/XFAS.GetGrid
# ______________________________________________________________________________
# Resultate gem. Subscript listen und ausgeben
«nzX(Result.RowCount)=0\N»nix«GOTO(/)»
«nNO(9,NULL)»
«REPEAT(9)»
«nNO(9)»
«/Result.Row.Print»
«nzNO(9,0)<«X(Result.RowCount)\N»\N»«LOOP(9)»
/

/Result.Row.Print
# ______________________________________________________________________________
# hier werden pro Row (Zeile) die einzelnen Spalten ausgegeben:
#
# Ausgabe Spalte 1 Bezeichnung hier SalDoc.BoId
«XRES(resXFAS:col,1)»: «XRES(resXFAS:1,«NO(9,0)»)»
# Ausgabe Spalte 2 Bezeichnung hier SalDoc.BoName
«XRES(resXFAS:col,2)»: «XRES(resXFAS:2,«NO(9,0)»)»
# Ausgabe Spalte 3 Bezeichnung hier SalDoc.SalProcLevelCd
«XRES(resXFAS:col,3)»: «XRES(resXFAS:3,«NO(9,0)»)»
# Ausgabe Spalte 4 Bezeichnung hier SalDoc.ShortCut
«XRES(resXFAS:col,4)»: «XRES(resXFAS:4,«NO(9,0)»)»
/
Subscript: XX-XFASDEMO.FX
# ______________________________________________________________________________
# Beispielscript Verwendung von XFAS (F-Script as Service)
#
# Hauptscript: XX-XFASDEMO.FF
# Dateiname: XX-XFASDEMO2.FX
#
# Autor: OPACC Software AG - Kai Reichmuth
#
# Erstellt: 03.10.2019 / rei
# ______________________________________________________________________________
#
/headerreport
# ______________________________________________________________________________
# Parameter abfüllen:
«/XFAS.GetParams»
# ______________________________________________________________________________
# Records mittels GetBo holen und an XFAS übergeben
«/Records.GetSalOrder»
/

/XFAS.GetParams
# ______________________________________________________________________________
# Aktives Dokument in Variable speichern
«X(Param.ActiveDocument =«AUF-DOKINR»)»
«X(Param.Filter =«CB(4)»)»
«X(Param.ReturnValues =«CB(5)»)»
/

/Records.GetSalOrder
# ______________________________________________________________________________
# GetBo auf SalOrder (Auftragsüberwachung)
«XSER(req_GetSalOrder:GetBo)»
«XSER(req_GetSalOrder:addArg=SalOrder)»
«XSER(req_GetSalOrder:addArg=«X(Param.ActiveDocument)»)»
«XSER(req_GetSalOrder:addArg=ne)»
«XSER(req_GetSalOrder:addArg=1)»
«XSER(req_GetSalOrder:addArg=0)»
«XSER(req_GetSalOrder:addArg=1)»
«XSER(req_GetSalOrder:addArg=«X(Param.Filter)»)»
«XSER(req_GetSalOrder:addArg=«X(Param.ReturnValues)»)»
«nXSER(req_GetSalOrder:execute>XFAS)»
/

Ausgabe - Identische Ausgabe für Beispiel 1 und 2

Ausgabe/Resultat in der OXAS LiveDocumentation, wenn das Subscript XX-XFASDEMO.FX mit System_RunScript gestartet wird.
XFAS.jpg

Beispiel für das Setzen von Werten über den Spaltennamen

/headerreport
«XFAS(col=SpalteA,Inhalt Spalte A)»
«XFAS(newRow)»
«XFAS(col=SpalteA,Inhalt Spalte A)»
«XFAS(col=SpalteB,Inhalt Spalte B)»
«XFAS(newRow)»
«XFAS(col=SpalteA,Inhalt Spalte A)»
«XFAS(col=SpalteB,Inhalt Spalte B)»
«XFAS(col=SpalteC,Inhalt Spalte C)»
«XFAS(newRow)»
«XFAS(col=SpalteC,Inhalt Spalte C)»
«XFAS(col=SpalteC,Inhalt Spalte C)»
/


# ******************************************************************************************************
# GetInfoScript
# ******************************************************************************************************
/GetInfoScript
«XFAS(head=SupportsScreenOutput)»
«XFAS(head=SupportsBoArgs)»
«XFAS(head=SupportedBoType)»
«XFAS(head=MlsKey)»
# ------------------------------------------------------------------------------------------------------
«XFAS(cells=1,0,,XFAS: ColValues by ColName)»
/


# ******************************************************************************************************
# GetInfoScriptCol
# ******************************************************************************************************
/GetInfoScriptCol
«XFAS(heads=Column,DataTypeCd,Format,RelationshipCd,RelatedObject,RelatedIndex,RelatedConstraint)»
«XFAS(heads=OnDemand,MlsKey)»
«XFAS(cells=SpalteA,A,100,0,,,,0,SpalteA)»
«XFAS(cells=SpalteB,A,100,0,,,,0,SpalteB)»
«XFAS(cells=SpalteC,A,100,0,,,,0,SpalteC)»
/