Was ist
F-Script
F-Script ist eine von Opacc entwickelte Script-Sprache.
Sie ermöglicht das Erzeugen von Output und das Steuern von Abläufen
innerhalb von OpaccOXAS und OpaccERP. Mit einem F-Script können Sie
beispielsweise die ganze Logik und Formatierung einer Auswertung
definieren.
Mit F-Script wird also einerseits das Layout eines
Dokuments (z.B. Rechnung) oder einer Auswertung (z.B.
Lager-Bestandesliste) definiert. Andererseits können Sie mit F-Script auch
ganze Abläufe programmieren, welche im Hintergrund laufen und z.B.
vollautomatisch ganze Dokumentketten erzeugen und
verarbeiten.
F-Scripts sind meistens durch Subroutinen strukturiert.
Subroutinen können dabei mit Funktionen verglichen werden, wie sie bei
gebräuchlichen Programmiersprachen zur Verfügung stehen. Wir unterscheiden
folgende Arten von Subroutinen:
-
Standard Subroutinen (sind in der Funktion und Benennung fix
vorgegeben)
-
Eigene Subroutinen (können eigene Funktionen enthalten und auch
frei benannt werden)
-
Seitenkontroll-Subroutinen (sind in der Funktion und Benennung
fix vorgegeben und dienen u.a. dem Handling von Überträgen beim
Seitenumbruch)
F-Scripts werden als UTF-8-BOM Dateien in folgendem
Verzeichnis gespeichert: \Insyde\Ff\
Die Dateierweiterungen
(File-Extension) von F-Scripts sind von uns standardisiert.
-
.ff – Hauptscript
-
.fs – Subscript (ein Subscript wird aus einem Hauptscript
heraus aufgerufen)
-
.fx – (Hilfs-)Script welches Daten in Form einer Tabelle (XFAS)
zurückgibt
-
.lb – Library auf deren Inhalte ein F-Script zugreifen kann.
Werden Libraries für Übersetzungszwecke eingesetzt, wird die
Dateierweiterung um das Sprachkürzel ergänzt. (z.B. .lbd für eine
deutsche Sprach-Library oder .lbf für eine französische
Sprach-Library.)
Die
verschiedenen Arten von Scripts
Konkrete
Hauptscripts
Konkrete Hauptscripts werden aus einem
OpaccERP-Kontext gestartet, der in direktem Zusammenhang mit dem Script
steht. Das ist z.B. dann der Fall, wenn das F-Script beim
Verarbeiten/Drucken eines Verkaufsdokuments abläuft.
Abstrakte
Hauptscripts
Abstrakte Hauptscripts enthalten die gesamte
benötigte Logik (z.B. für das Abarbeiten von Datensätzen) und stehen
deshalb in keinem Zusammenhang mit der Anwendung aus welcher sie gestartet
werden. Das bedeutet, dass keine Unterstützung (z.B. für das automatische
Aktivieren von BOs) zur Verfügung steht. Sämtliche Aktivierungen,
Repeat/Loops etc. müssen im F-Script selbst codiert werden.
Begriffe
Bevor Sie sich mit den
Details beschäftigen, sollten Sie sich im vorliegenden Kapitel mit einigen
wichtigen Begriffen vertraut machen.
F-Script
Interpreter
Der F-Script-Interpreter interpretiert/übersetzt den
F-Script Code zur Laufzeit so, dass dieser durch OpaccOXAS verarbeiten
kann. Dabei werden falsche Befehle und Operationen erkannt und deren
Ausführung mit einer Fehlermeldung abgebrochen. So wird verhindert, dass
in der Datenbank inkonsistente Zustände entstehen.
Der
F-Script-Interpreter arbeitet zeilenorientiert. Das bedeutet, dass eine
Zeile nach der anderen abgearbeitet und gegebenenfalls auch ausgegeben
wird. Gegenüber den Seitenbeschreibungssprachen wie Postscript oder PCL
hat dies sowohl Vor- als auch Nachteile. Für die Kontrolle des
Seitenumbruchs bietet F-Script vorgefertigte Funktionen um diese
Anforderung abzudecken.
F-Script
Befehle
Ein F-Script Befehl wird durch die Zeichen « (Alt-174)
und » (Alt-175) begrenzt. Der F-Script-Interpreter von OpaccERP führt
diesen Befehl zur Laufzeit aus. Falls es sich beim auszuführenden Befehl
um ein Attribut (z.B. «NAME») handelt, wird die entsprechende Information
aus der Datenbank (OpaccOXAS BusinessData) ausgelesen und im Script
ausgegeben. Die Daten werden dabei nicht direkt aus der Datenbank gelesen.
Damit haben Anpassung an der Datenstruktur (z.B. durch ein Update) keinen
Einfluss auf den F-Script Befehl. F-Script Befehle können auch Daten
liefern, die nicht direkt in der Datenbank gespeichert sind, sondern erst
durch entsprechende Prozeduren erzeugt werden. F-Script Befehle stehen
u.a. für die folgenden Anwendungsfälle (Auswahl) zur Verfügung:
-
Business-Objekte aktivieren
-
BO-Attribute auslesen
-
Formatieren von Output (Drucken)
-
Datenbank-Operationen (Erstellen/Mutieren/Löschen von Daten via
IBOS und SaveBo)
Blatt (Physische
Grenzen)
Das Blatt definiert die maximale Anzahl Zeilen, welche
auf eine Seite gedruckt werden können. Bei einem Laserdrucker entspricht
dies 68 Zeilen (A4 Hochformat) bzw. 47 Zeilen (A4 Querformat). Die exakten
Werte werden in der Druckersteuerung hinterlegt (OpaccOXAS Studio BC 98400
und BC 98410) und zur Laufzeit vom F-Script abgefragt.
Seite (Logische
Grenzen)
Die Seite definiert die Anzahl Zeilen, welche für den
Output (ohne Kopf- und Fusszeile) genutzt werden sollen. Die Ausgabe der
Kopf- und Fusszeile erfolgt dann mit Hilfe der Subroutinen
/totalcarry und /totalpage. Für die korrekte Ausgabe von
Kopf- und Fusszeile, muss die entsprechende Anzahl Zeilen frei gelassen
werden.
Beispiel
Ein Blatt ist mit 68 Zeilen definiert.
Damit eine Fusszeile über zwei Zeilen ausgegeben werden kann, darf die
Seite nur mit 66 Zeilen definiert sein. So steht zwischen dem normalen
Inhalt und der Fusszeile noch eine Trennzeile (Leerzeile) zur Verfügung.
Operation
Operationen beinhalten
komplexe, in sich abgeschlossene Funktionalität (z.B. ART-LIST) und stehen
immer in einem bestimmten Kontext zu einem oder mehreren Objekten. Die
verfügbaren Operationen werden in einzelnen Abschnitten
beschrieben.
Business-Objekte
(BO) und -Attribute (BO-Attribute)
Ein Business-Objekt (BO)
entspricht im Prinzip einem Datensatz innerhalb der Datenbank. Beispiele
von Business-Objekten sind Adressen (Addr) oder Verkaufsdokumente
(SalDoc). Jedes BO hat seine eigenen Attribute (BO-Attribute), auf welche
nach der Aktivierung des BO zugegriffen werden
kann.
Beispiel
Zugriff auf das BO-Attribut Addr.Number
mit dem Befehl «ADRNR».
Benutzen von Operationen, Befehlen und
Attributen
Bevor Sie eine Operation, einen Befehl oder ein
Attribut benutzen, sollten Sie die folgenden drei Punkte
klären.
Welche
BOs müssen aktiv sein?
Bevor auf ein BO-Attribut zugegriffen
werden kann, das entsprechende BO aktiv sein. Das gilt analog auch für
Operationen. Vor dem Aufruf einer Operation müssen bestimmte BOs aktiv
sein. In den Beschreibungen zu den Operationen ist vermerkt, welche BOs
das sind.
Wie werden die BOs
aktiviert?
Gewisse BOs wie z.B. die Postleitzahlen (PLZV) sind
immer aktiv und müssen daher auch nicht aktiviert werden. In den meisten
Fällen müssen BOs aber aktiviert werden, wenn sie nicht durch den Kontext
bereits aktiv sind.
 |
Wichtig
Es ist nicht möglich,
mehr als ein BO desselben BO-Typs aktiv zu halten.
Ist z.B. das BO
Adresse mit der Adressnummer 100 aktiv, so führt die
Aktivierung der Adresse mit der Adressnummer 120 dazu, dass
das zuvor aktive BO mit Adressnummer 100 durch das BO mit der
Adressnummer 120 "ersetzt" wird.
|
Explizite
Aktivierung
Die Aktivierung erfolgt durch den Befehl
<BO>-ACTIVEn(...) mit einem oder mehreren
Argumenten.
Beispiel
Aktivieren der Adresse mit
der Adressnummer 123456: «ADR-ACTIVE(123456)»
Für die
Aktivierung stehen je nach BO verschiedene Indizes zur Verfügung, welche
auch mehr als ein Argument (z.B. das Aktivieren einer Adresse über Vor-
und Nachname) enthalten können.
Beispiel
Aktivieren der
Adresse mit Vor- und Nachname Heinz Müller über Index 3
(Nachname, Vorname): «ADR-ACTIVE3(Müller, Heinz)»
Damit wird die
erste Adresse mit Nachname Müller und Vorname Heinz
aktiviert.
Wenn ein Objekt aufgrund des zu verwendenden Index mit
mehreren Argumenten aktiviert werden kann, so dürfen - von hinten
beginnend - eines oder mehrere dieser Argumente weggelassen werden. Eine
Aktivierung über Index 3 (Nachname, Vorname) nur nach Nachnamen würde dann
so aussehen: «ADR-ACTIVE3(Müller)»
Damit wird die erste Adresse mit
Nachname Müller aktiviert.
Automatische Aktivierung
Die
Aktivierung erfolgt hier durch Programme (z.B. Verkaufsdokument drucken)
und manche Operationen (z.B. VUMS-LIST). In der Beschreibung der Operation
ist jeweils beschrieben, welche BOs aktiviert werden.
Service-Objekte
Über Services in
F-Script (XSER) erhält ein F-Script Zugang zum ServiceBus. Damit lassen
sich alle Services, die OXAS zur Verfügung stellt (z.B. Biz.GetBo oder
Biz.SaveBo) auch in F-Script nutzen. Ein Service kann dabei
mandantenübergreifend ausgeführt werden. So kann beispielsweise mit dem
F-Script nach Erstellen einer Verkaufsposition (VERPSAVE.FF) in
einem Mandanten eine Verkaufsdokument-Position bearbeitet und gleichzeitig
in einem anderen Mandanten eine Einkaufsdokument-Position erstellt
werden.
Resultate von Services werden mit im F-Script definierten
Namen als temporäre Objekte gespeichert (XRES) und stehen während der
gesamten Laufzeit des F-Scripts zur Verfügung. Ist beispielsweise in einem
Resultat ein Verkaufsdokument (SalDoc) gespeichert, kann während der
gesamten Laufzeit des F-Scripts auf die Attribute dieses SalDoc
zugegriffen werden.
 |
Hinweis
Da F-Script sehr tief in der
OXAS-Business-Logik verwurzelt ist, ist es technisch nicht in allen
Konstellationen möglich direkt aus dem F-Script heraus auf das public
interface des ServiceBus zuzugreifen. Wie man abfragt ob solche
Zugriffe möglich sind, wird später in der Dokumentation erklärt.
Da
mittels Services auch BOs gespeichert werden können für welche es keinen
IBOS gibt, werden für neue BOs keine IBOS mehr zur Verfügung
gestellt.
|