Modul Form: Unterschied zwischen den Versionen

Aus bafbal.de
Zur Navigation springen Zur Suche springen
Zeile 1.061: Zeile 1.061:
 
* jy (join type) - Im Standardfall werden bei Join-Gruppierung die Daten durch Kommata getrennt dargestellt. Sie können jedoch auch summiert werden, dafür ist jy=sum  zu setzen.  
 
* jy (join type) - Im Standardfall werden bei Join-Gruppierung die Daten durch Kommata getrennt dargestellt. Sie können jedoch auch summiert werden, dafür ist jy=sum  zu setzen.  
 
* l (length) - Maximale Länge in Zeichen bei der Eingabe
 
* l (length) - Maximale Länge in Zeichen bei der Eingabe
 +
* ld (LookupData) - Name der Nachschlageliste beim Spaltentyp y=lookup
 +
* llc (LookupLiveCommand) - Name oder Nummer des Kommandos, das beim Spaltentyp y=lookuplive verwendet wird; ls und ls dürfen nicht gesetzt werden
 +
* ls (LookupSpecial) - Name des Specials (hinterlegte SQL-Anweisung in xspecial), wird nur berücksichtigt, wenn ld nicht gesetzt ist
 
* nd (no data) - Spalte wird beim Speichern nicht berücksichtigt; Änderungen versetzen das Grid auch nicht in den Zustand changed.
 
* nd (no data) - Spalte wird beim Speichern nicht berücksichtigt; Änderungen versetzen das Grid auch nicht in den Zustand changed.
 
* q (quelle) - Datenquelle für das Grid.
 
* q (quelle) - Datenquelle für das Grid.

Version vom 13. Juni 2021, 14:44 Uhr

Das Modul Form

Im Modul Form werden die Routinen zur zur Formulargestaltung zusammengefasst.

Das Formular

#frm

Legt ein Formular an.

Parameter

  • c ("Caption") - Überschrift des Formulars; Funktionen werden ersetzt
  • flt ("Filter") - Setzt das Filter-Kommando des Formulars. Dieses Kommando wird aufgerufen, wenn in einer der edt- oder chk-Komponenten eine Eingabe gemacht wird. Kann auch mit #filter ausgelöst werden.
  • w ("Width") - Breite der Baum-Komponente beim Typ treegrid
  • y - Typ des Formulars; default ist treepage
    • console - Eine Konsolen-Anwendung, bei der nur Ausgaben in Textform gemacht werden
    • live - Oben ein Eingabefeld zur Eingabe von Kommandos, unten ein Ausgabebereich; wird nur für xlive verwendet.
    • page - Eine Page-Komponenten, darüber ein Filter-Bereich
    • treepage - Links eins Baum-Komponente, rechts eine Page-Komponente, darüber einer Filter- und ein Button-Bereich

Beispiel

#frm   c=xlookup   flt=xlookup_flt   w=300

#cout

Gibt Text auf der Konsole aus. Wird bei den Form-Typen console und live verwendet.

Parameter

  • c ("Caption") - Text der ausgegeben wird; Funktionen werden ersetzt; default ist #cout, Parameter c nicht gesetzt
  • clr ("Clear") - Y löscht vor der Ausgabe des Textes die Konsole; Funktionen werden ersetzt; default N
  • cnd ("Condition") - wenn Y, dann wird die Prozedur ausgeführt; default Y, Funktionen werden ersetzt
  • wts ("WithoutTimeStamp") - Wenn Y, dann wird auf die Ausgabe der Datums- und Zeitangabe sowie des Typs verzichtet; Funktionen werden ersetzt; default N
  • y - Typ der Ausgabe, üblicherweise ein einzelner Buchstabe (I "Info", W "Warning" E "Error"); default I

Beispiel

#cout  c="Hello world"   
#cout  c=" "   clr=Y   wts=Y

#coutl

Fügt der Konsole eine Zeile ohne Datums- und Zeitangabe sowie ohne Typ hinzu.

Parameter

#coutl hat keine benannten Parameter. Die ganze Zeile nach dem #text und dem trennenden Leerzeichen wird der Konsole hinzugefügt.

Funktionen werden ersetzt.

Beispiel

#coutl Hello World

#filter

Ruft das Standard-Filter-Kommando des Formulars auf.

Parameter

(keine)

Beispiel

#filter

#save

Speichert alle Änderungen auf der Page.

Parameter

(keine)

Beispiel

#save

#cancel

Verwirft alle Änderungen auf der Page.

Parameter

(keine)

Beispiel

#cancel

Die einfachen Komponenten

#btn

Fügt einen Button in den Button- oder den Filterbereich ein.

Parameter

  • c ("caption") - Beschriftung des Buttons
  • cmd ("command") - Kommando des Buttons, wenn s nicht gesetzt ist
  • cnd ("condition") - wenn Y, dann wird die Prozedur ausgeführt; default Y, Funktionen werden ersetzt
  • h ("hint") - Mouse-Over-Text des Buttons
  • p ("parent") - legt fest, in welchem Bereich der Button eingefügt wird.
    • b - Button-Bereich
    • f - Filter-Bereich
  • nl ("new line") - Für den Button wird eine neue Zeile begonnen
  • s ("select") - Kommando des Buttons
  • se ("status enabled") - Je nach Status des Formulars ist der Button enabled oder nicht (es können mehrere Status-Buchstaben in beliebiger Reihenfolge kombiniert werden)
    • b ("browse") - Normalzustand des Formulars
    • c ("changed") - Nachdem Daten geändert wurden
    • e ("editing") - Während einer Editierung
    • f ("failed") - Die Plausibilitätsprüfung wurde nicht bestanden
  • w ("width") - Breite des Buttons
  • y ("type") - wenn einer der folgenden Standard-Werte verwendet wird, dann erhält der Button ein Standard-Verhalten und die Parameter c und w bleiben unberücksichtigt.
    • back - Button mit Back-Symbol (Pfeil nach links)
    • cancel - Button mit Cancel-Symbol (Daumen nach unten)
    • export - Button mit Export-Symbol
    • fwd - Button mit Forward-Symbol (Pfeil nach rechts)
    • import - Button mit Import-Symbol
    • pdf - Button mit PDF-Symbol
    • save - Button mit Disketten-Symbol
    • xls - (Schreibt den Seiteninhalt in eine Excel-Datei; noch nicht implementiert)

Beispiel

#btn  y=save   s=#save  se=c
#btn  y=cancel   s=#cancel  se=cf
#btn  y=back   s=#tree_back  se=b
#btn  y=backback   s=#tree_fwd  se=b
#btn  y=export   s=xlookup_eximport(ex)  se=b
#btn  y=import   s=xlookup_eximport(im)  se=b
#btn  c=$T(Add_list)  w=120  s=xlookup_add(list)  se=b

#chk

Fügt eine Checkbox in den Button- oder den Filterbereich ein.

Parameter

  • c ("caption") - Beschriftung der Checkbox
  • cnd ("condition") - wenn Y, dann wird die Prozedur ausgeführt; default Y, Funktionen werden ersetzt
  • h ("hint") - Mouse-Over-Text der Checkbox
  • p ("parent") - legt fest, in welchem Bereich die Checkbox eingefügt wird.
    • b - Button-Bereich
    • f - Filter-Bereich
  • n - Name der Checkbox, wird benötigt, um mit $EDT() auf den Check-Status zugreifen zu können
  • nl ("new line") - Für die Checkbox wird eine neue Zeile begonnen
  • z - Wert der Checkbox (Y oder N)

Beispiel

#edt

Fügt ein Edit-Feld in den Button- oder den Filterbereich ein.

Parameter

  • cnd ("condition") - wenn Y, dann wird die Prozedur ausgeführt; default Y, Funktionen werden ersetzt
  • h ("hint") - Mouse-Over-Text des Edit-Felds
  • p ("parent") - legt fest, in welchem Bereich das Edit-Feld eingefügt wird; default f
    • b - Button-Bereich
    • f - Filter-Bereich
  • n - Name des Edit-Feldes, wird benötigt, um mit $EDT() auf den Inhalt zugreifen zu können
  • nl ("NewLine") - Für das Edit-Feld wird eine neue Zeile begonnen
  • sf ("SetFocus") - Wenn Y, wird der Eingabefokus auf dieses Edit-Feld gesetzt; default N, Funktionen werden ersetzt
  • z - Inhalt des Edit-Feldes

Beispiel

#lbl   c=$T(lookup_filter)   w=140  
#edt   n=edt1   w=135   h="Hier den Text eingeben, nach dem gesucht werden soll."   z=$INI(usr,edt1,xlookup)

#lbl

Fügt ein Label in den Button- oder den Filterbereich ein.

Parameter

  • c ("caption") - Beschriftung des Labels
  • cnd ("condition") - wenn Y, dann wird die Prozedur ausgeführt; default Y, Funktionen werden ersetzt
  • h ("hint") - Mouse-Over-Text des Labels
  • p ("parent") - legt fest, in welchem Bereich das Label eingefügt wird; default f
    • b - Button-Bereich
    • f - Filter-Bereich
  • nl ("new line") - Für das Label wird eine neue Zeile begonnen

Beispiel

$EDT()

Gibt den Wert einer Edit- oder Checkbox-Komponente zurück. Eine Checkbox gibt Y oder N zurück.

Parameter

  1. Name der Edit- oder Checkbox-Komponente

Beispiele

~ $LEN($EDT(edt1)) = 4
#filltreesql   k_kuerzel=$EDT(edt1)

Tree

Der Tree ist eine Baumansicht, in welcher die einzelnen Einträge hierarchisch gegliedert werden können.

Die Einträge können aus Tabelleninhalten und SQL-Statements gefüllt werden, es können auch einzelne Einträge hinzugefügt werden. Der Baum muss nicht von Anfang an komplett aufgebaut werden, sondern es können Inhalte beim Öffnen eines Eintrags dynamisch nachgeladen werden.

Der gängigste Weg, einen Baum zu füllen, ist #tree_fillsql. Siehe Beispiel dort.

#tree_clear

Macht den Tree leer. Wird üblicherweise eingesetzt, bevor der Baum (neu) gefüllt wird.

Parameter

(keine)

Beispiel

#tree_clear

#tree_add

Für dem Baum einen einzelnen Eintrag hinzu.

Parameter

  • c ("caption") - die Beschriftung des Eintrags
  • c1, c2 ("caption") - die Feldnamen in der Datenmenge, aus welcher die erste und zweite Beschriftung geladen werden
  • ld1, ld2, ls1, ls2 - sind die Feldnamen in der Datenmenge Schlüsselwerte für Nachschlagelisten, so können für die Beschriftung die Klartexte genutzt werden. Dazu muss die Nachschlageliste (ld1, ld2) beziehungsweise das Special (ls1, ls2) angegeben werden.
  • k ("key") - das Schlüsselfeld für den Eintrag; wird dieser Parameter nicht gesetzt, dann wird das Schlüsselfeld aus dem Namen der Tabelle abgeleitet.
  • ne ("node expand") - der neue Eintrag soll gleich expandiert werden.
  • o ("open") - Kommando, das ausgeführt wird, wenn der Eintrag expandiert wird; üblicherweise werden dabei Bauminhalte dynamisch nachgeladen.
  • r ("rights") - Rechtedefinition für den Eintrag
  • s ("select") - Kommando, das ausgeführt wird, wenn der Eintrag selektiert wird; üblicherweise wird dabei eine neue Seite geladen.
  • si ("select item") - der neue Eintrag soll nach Abschluss des Kommandos selektiert werden
  • sii ("select item instantly") - der neue Eintrag soll sofort und nicht erst nach Abschluss des Kommandos selektiert werden
  • t ("table") - der Tabellenname der für den Eintrag maßgeblichen Tabelle
  • u - Übergeordneter Eintrag. Unter diesem Eintrag wird der neue Eintrag eingefügt.
    • s ("selected") - der selektierte Baum-Eintrag
    • sp ("selected parent") - Der übergeordnete Eintrag des selektierten Eintrags
    • spp
    • sppp
    • o ("opening") - der Baum-Eintrag, der gerade expandiert wird.
    • l ("last") - der zuletzt eingefügt Baum-Eintrag
    • lp ("last parent") - Der übergeordnete Eintrag des zuletzt eingefügten Eintrags
    • lpp
    • lppp
    • r ("root") - Der übergeordnete Eintrag der obersten Ebene


Beispiele

#addtree   u=root   c=$T(change_passwort)   s="#page_fill   d=xsettings_page_password"
#addtree   u=root   c=$T(Set_language)   s="#page_fill   d=xsettings_page_language"
#addtree  u=sel   c=$T(new_list)   t=data_list    s="#page_fill  d=xlookup_page_list"   si=Y    f_category=$FND(category)

#tree_fill

Füllt den Baum aus den Werten einer Datenbanktabelle.

Mit Hilfe der Parameter qw und qo kann das Ergebnis gefiltert und sortiert werden, es ist aber stets nur eine Ebene im Baum. Sollen mehrere Ebenen im Baum gefüllt werden, so ist die Prozedur #tree_fillsql das Mittel der Wahl.

Üblicherweise wird das SQL-Statement aus den Parameters t, qw und qo zusammengesetzt. Dabei sind die Parameter qw und qo optional. Fehlen Sie, lautet das SQL-Statement SELECT * FROM tabllenname.

Alternativ kann auch mit #sql das Statement vorgegeben werden (zum Beispiel, wenn ein JOIN gebraucht wird). Dann werden die Parameter qw und qo nicht berücksichtigt.

Parameter

  • c ("caption") - die Beschriftung des Eintrags
  • c1, c2 ("caption") - die Feldnamen in der Datenmenge, aus welcher die erste und zweite Beschriftung geladen werden
  • db ("DataBase") - Name der Datenbank, default ist die Default-Datenbank
  • fi ("first item") - Wenn Y, wird nach dem Füllen des Baums der erste Eintrag selektiert. Default N, Funktionen werden ersetzt.
  • ld1, ld2, ls1, ls2 - sind die Feldnamen in der Datenmenge Schlüsselwerte für Nachschlagelisten, so können für die Beschriftung die Klartexte genutzt werden. Dazu muss die Nachschlageliste (ld1, ld2) beziehungsweise das Special (ls1, ls2) angegeben werden.
  • k ("key") - das Schlüsselfeld für den Eintrag; wird dieser Parameter nicht gesetzt, dann wird das Schlüsselfeld aus dem Namen der Tabelle abgeleitet.
  • m ("max") - Maximale Anzahl der Baumeinträge, die erstellt werden
  • ne ("node expand") - der neue Eintrag soll gleich expandiert werden.
  • o ("open") - Kommando, das ausgeführt wird, wenn der Eintrag expandiert wird; üblicherweise werden dabei Bauminhalte dynamisch nachgeladen.
  • qw ("query where") - WHERE-Klausel für das zu erstellende SQL-Statement
  • qo ("query order") - ORDER-Klausel für das zu erstellende SQL-Statement
  • r ("rights") - Rechtedefinition für den Eintrag
  • s ("select") - Kommando, das ausgeführt wird, wenn der Eintrag selektiert wird; üblicherweise wird dabei eine neue Seite geladen.
  • si ("select item") - der neue Eintrag soll nach Abschluss des Kommandos selektiert werden
  • sii ("select item instantly") - der neue Eintrag soll sofort und nicht erst nach Abschluss des Kommandos selektiert werden
  • t ("table") - der Tabellenname der für den Eintrag maßgeblichen Tabelle
  • u - Übergeordneter Eintrag. Unter diesem Eintrag wird der neue Eintrag eingefügt.
    • s ("selected") - der selektierte Baum-Eintrag
    • sp ("selected parent") - Der übergeordnete Eintrag des selektierten Eintrags
    • spp
    • sppp
    • o ("opening") - der Baum-Eintrag, der gerade expandiert wird.
    • l ("last") - der zuletzt eingefügt Baum-Eintrag
    • lp ("last parent") - Der übergeordnete Eintrag des zuletzt eingefügten Eintrags
    • lpp
    • lppp
    • r ("root") - Der übergeordnete Eintrag der obersten Ebene


Beispiel

#filltree  u=exp   t=test_test   c1=zahl  c2=test_1

#tree_node

Die Prozedur #tree_node legt für #tree_fillsql und #tree_fillpath eine Ebenen-Definition an.

Parameter

  • c ("caption") - die Beschriftung des Eintrags
  • c1, c2 ("caption") - die Feldnamen in der Datenmenge, aus welcher die erste und zweite Beschriftung geladen werden
  • ld1, ld2, ls1, ls2 - sind die Feldnamen in der Datenmenge Schlüsselwerte für Nachschlagelisten, so können für die Beschriftung die Klartexte genutzt werden. Dazu muss die Nachschlageliste (ld1, ld2) beziehungsweise das Special (ls1, ls2) angegeben werden.
  • k ("key") - das Schlüsselfeld für den Eintrag; wird dieser Parameter nicht gesetzt, dann wird das Schlüsselfeld aus dem Namen der Tabelle abgeleitet.
  • nc ("node clear") - Werden Einträge auf mehreren Ebenen angelegt, dann müssen meist bei einem Wechsel auf der übergeordneten Ebene die Werte der Ebenen darunter gelöscht werden. Mit nc=Y passiert eben dies.
  • ne ("node expand") - der neue Eintrag soll gleich expandiert werden.
  • o ("open") - Kommando, das ausgeführt wird, wenn der Eintrag expandiert wird; üblicherweise werden dabei Bauminhalte dynamisch nachgeladen.
  • r ("rights") - Rechtedefinition für den Eintrag
  • s ("select") - Kommando, das ausgeführt wird, wenn der Eintrag selektiert wird; üblicherweise wird dabei eine neue Seite geladen.
  • t ("table") - der Tabellenname der für den Eintrag maßgeblichen Tabelle
  • u - Übergeordneter Eintrag. Unter diesem Eintrag wird der neue Eintrag eingefügt.
    • s ("selected") - der selektierte Baum-Eintrag
    • sp ("selected parent") - Der übergeordnete Eintrag des selektierten Eintrags
    • spp
    • sppp
    • o ("opening") - der Baum-Eintrag, der gerade expandiert wird.
    • l ("last") - der zuletzt eingefügt Baum-Eintrag
    • lp ("last parent") - Der übergeordnete Eintrag des zuletzt eingefügten Eintrags
    • lpp
    • lppp
    • r ("root") - Der übergeordnete Eintrag der obersten Ebene


Beispiele

Siehe #tree_fillsql

#tree_fillsql

Füllt den Baum aus den Werten eines SQL-Statements. Es können dabei Einträge auf mehreren Ebenen angelegt werden. Die einzelnen Ebenen sind mit #tree_node zu definieren.

Parameter

  • db ("DataBase") - Name der Datenbank, default ist die Default-Datenbank
  • fi ("first item") - Wenn Y, wird der erste hinzugefügte Eintrag anschließend selektiert. Default ist N, Funktionen werden ersetzt.
  • k ("key") - Die Parameter im SQL-Statement beginnen nach den Konventionen mit :k. Da keine weitere Parameter mit k beginnen, werden so Namenskonflikte vermieden. Siehe auch das zweite Beispiel.
  • m ("max") - Maximale Anzahl von Datensätzen in der Ergebnismenge, aus denen Baumeinträge erstellt werden
  • mex ("max expand") - Wenn die Zahl der hinzugefügten Einträge der obersten Ebene unter dieser Zahl liegt, dann werden die Einträge expandiert. Default 0.
  • q ("Quelle") - Quelle der Daten; default ist sql. (Relevant, wenn weitere Datenquellen hinzugefügt werden.)
    • sql - Das mit #sql erstellte SQL-Statement.
  • r ("rights") - damit der Einträge dem Baum hinzu gefügt werden, muss zumindest das Leserecht vorliegen. Default sind die Rechte des Formulars.
  • t ("table") - Name der Tabelle. Wird benötigt, wenn Werte in den Baum zurück geschrieben werden sollen.

Beispiele

#sql select *    from data_special      order by category, name;
#defnode  u=root     k=category  c1=category   nc=Y   s="#fillgrid  d=xspecial_page_category"
#defnode  u=last     t=data_special     c1=name     s="#fillgrid  d=xspecial_page_list"  
#filltreesql   mex=3
#sql select l.*    from data_list l  
#sql    left outer join data_list_item i          on l.data_list_id = i.data_list_id
#sql    left outer join translate_list_item t     on i.data_list_item_id = t.data_list_item_id 
#sql  where upper(l.name) like upper(:kedt)
#sql     or upper(i.value) like upper(:kedt)
#sql     or upper(t.value) like upper(:kedt)
#sql  order by l.name;
#defnode  u=root     t=data_list     c1=name     s="#fillgrid  d=xlookup_page_list"   o=xlookup_open(list)
#filltreesql   kedt=$EDT(edt1)%   mex=3

#tree_fillpath

Füllt den Baum aus der Pfad-Spalte eines SQL-Statements. Die Ebene ist mit #tree_node zu definieren.

Das SQL-Statement kann mit #sql definiert werden, aber auch mit t, qw und qo zusammengesetzt werden. Das SQL-Statement muss nach dem Pfad sortiert sein.

Parameter

  • db ("DataBase") - Name der Datenbank, default ist die Default-Datenbank
  • fi ("first item") - Wenn Y, wird der erste hinzugefügte Eintrag anschließend selektiert. Default ist N, Funktionen werden ersetzt.
  • k ("key") - Die Parameter im SQL-Statement beginnen nach den Konventionen mit :k. Da keine weitere Parameter mit k beginnen, werden so Namenskonflikte vermieden. Siehe auch das zweite Beispiel.
  • m ("max") - Maximale Anzahl von Datensätzen in der Ergebnismenge, aus denen Baumeinträge erstellt werden
  • mex ("max expand") - Wenn die Zahl der hinzugefügten Einträge der obersten Ebene unter dieser Zahl liegt, dann werden die Einträge expandiert. Default 0.
  • pfx ("prefix") - Dem eigentlichen Pfad vorangehende Zeichenfolge.
  • pn ("path name") - Name der Pfad-Spalte in der SQL-Abfrage
  • qo ("query order") - ORDER-Klausel für das zu erstellende SQL-Statement
  • qw ("query where") - WHERE-Klausel für das zu erstellende SQL-Statement
  • r ("rights") - damit der Einträge dem Baum hinzu gefügt werden, muss zumindest das Leserecht vorliegen. Default sind die Rechte des Formulars.
  • t ("table") - der Tabellenname der für den Eintrag maßgeblichen Tabelle

Beispiele

#sql select g.* from user_group g  where g.type = 'G'  order by path
#tree_node  u=exp    t=user_group    c1=path     s="#fillgrid  d=xuser_page_group"
#tree_fillpath   t=user_group   pn=path

#tree_sel

Selektiert einen Eintrag.

Bei den Typen rf, sf, rfa und sfa wird im Baum nach einem bestimmten Wert (oder zwei bestimmten Werten) durchsucht. An jedem Eintrag hängt eine Ini-Datei, in der verschiedene Werte gespeichert sind. Es wird dann der erste Eintrag selektiert, in dessen Ini-Feld f der Wert z steht. Die Groß- und Kleinschreibung wird dabei ignoriert.

Neben f und z können auch noch f2 und z2 gesetzt werden. Bei rf und sf sind diese beiden Suchkriterien (f/z und f2/z2 oder-verknüpft). Die Typen rf und sf werden auch bei nur einem Suchkriterium verwendet, da bei einer oder-Verknüpfung das Ergebnis und damit die Existenz eines zweiten Suchkriteriums egal ist. Mit rfa und sfa werden die Suchkriterien und-verknüpft.

Parameter

  • cnd ("condition") - nur wenn true, wir die Anweisung ausgeführt. Default true, Funktionen werden ersetzt.
  • f, f2 ("field") - der erste und zweite Feldname (nur für die Typen rf, sf, rfa und sfa)
  • o ("open") - expandiert den nach der Selektierung selektierten Eintrag
  • y - Typ der Prozedur
    • c ("child") - geht zum ersten untergeordneten Eintrag
    • cc ("childchild") - geht zum ersten untergeordneten Eintrag des ersten untergeordneten Eintrags
    • ccc - geht in der Hierarchie drei Stufen nach unten
    • cccc - geht in der Hierarchie vier Stufen nach unten
    • ccccc - geht in der Hierarchie fünf Stufen nach unten
    • p ("parent") - geht zum direkt übergeordneten Eintrag
    • pp ("parentparent") - geht zum übergeordneten Eintrag des übergeordneten Eintrags
    • ppp - geht in der Hierarchie drei Stufen nach oben
    • pppp - geht in der Hierarchie vier Stufen nach oben
    • ppppp - geht in der Hierarchie fünf Stufen nach oben
    • rf ("rootfind") - Sucht im kompletten Baum, die Suchkriterien sind oder-verknüpft
    • rfa ("rootfindand") - Sucht im kompletten Baum, die Suchkriterien sind und-verknüpft
    • sf ("selectedfind") - Sucht unterhalb des selektierten Eintrags, die Suchkriterien sind oder-verknüpft
    • sfa ("selectedfindand") - Sucht unterhalb des selektierten Eintrags, die Suchkriterien sind und-verknüpft
  • z, z2 - der erste und zweite Wert (nur für die Typen rf, sf, rfa und sfa)


Beispiel

#btn  c=test  w=120  s="#tree_sel  y=sf   f=data_list_id   z=7B0EC22C-8526-4FDB-8D10-0187ECF793C0   sic=Y"  se=b
#cmdclear
#cmd #tree_sel   y=c   o=Y
#cmd #tree_sel   y=c
#segbuttons  
#segbutton  c=Test  w=150   cmd=1

Im zweiten Beispiel soll in der Hierarchie zwei Stufen nach unten gegangen werden. Eigentlich würde das mit dem Typ cc gehen. Allerdings wird die unterste Ebene hier dynamisch nachgeladen, so dass eine Suche mit dem Typ cc ins Leere laufen würde. Die Lösung ist, zunächst mit dem Typ c eine Stufe nach unten zu gehen, dabei mit o=Y den Node zu expandieren und dabei dynamisch nachzuladen und dann mit dem Typ c eine weitere Stufe nach unten zu gehen.

#tree_back

Geht in die Baum-Historie einen Schritt zurück, also zum davor selektierten Eintrag.

Parameter

(keine)

Beispiel

#btn  y=back   s=#tree_back  se=b
#btn  y=fwd   s=#tree_fwd  se=b

#tree_fwd

Geht in die Baum-Historie einen Schritt weiter. Kann zur aufgerufen werden, wenn zuvor zurück gegangen wurde.

Parameter

(keine)

Beispiel

#btn  y=back   s=#tree_back  se=b
#btn  y=fwd   s=#tree_fwd  se=b

$FND()

Sucht in der Ini-Datei des mit dem ersten Parameter spezifizierten Baum-Eintrags nach dem im zweiten Parameter übergebenen Feld und gibt dessen Inhalt zurück. Wird in der Ini-Datei kein entsprechender Eintrag gefunden, dann wird der Vorgang in den übergeordneten Einträgen so lange wiederholt, bis ein Eintrag mit diesem Feldnamen gefunden wurde oder es keine übergeordneten Einträge mehr gibt.

Parameter

  1. Eintrag im Tree
    1. s ("selected") - der selektierte Baum-Eintrag
    2. sp ("selected parent") - Der übergeordnete Eintrag des selektierten Eintrags
    3. spp
    4. sppp
    5. o ("opening") - der Baum-Eintrag, der gerade expandiert wird.
    6. l ("last") - der zuletzt eingefügt Baum-Eintrag
    7. lp ("last parent") - Der übergeordnete Eintrag des zuletzt eingefügten Eintrags
    8. lpp
    9. lppp
    10. r ("root") - Der übergeordnete Eintrag der obersten Ebene
  2. Feldname (Name des Eintrags in der Ini-Datei)
  3. optional: NULL-Value-Wert, also Ergebniswert, wenn der Inhalt des Feldes leer sein sollte

Beispiel

#grddata  q=sql   t=data_list   k_cat=$FND(s,category)

Page

#page

Das Kommando #page setzt einige Eigenschaften auf Seiten-Ebene.

Parameter

  • n - Name der Page; kann mit $PAGE() dann ermittelt werden
  • ras ("refresh after save") - wenn Y, wird die Seite nach dem Speichern erneut geladen; default N, Funktionen werden ersetzt
  • tac ("tab caption") - setzt die Beschriftung des jeweiligen Tabs des BAF-Clients; Funktionen werden ersetzt
  • y - Typ der Seite; default ist normal
    • dashhor
    • dashvert
    • normal

Beispiele

#page
#page   ras=Y

#page_fill

Füllt die Page neu.

Parameter

  • cmd ("command") - Das Kommando, das ausgeführt wird, um die Seite aufzubauen.

Beispiel

#tree_fill   u=root   t=devtext   c1=name   f_parent=!   s="#page_fill   d=xdevtext_page_text"  o=xdevtext_open   fi=Y

#page_prim / #prim

Seiten werden zunächst in Primärregionen unterteilt (die keine sichtbaren Elemente haben), die Primärregionen wiederum in die Kategorien, und diese wiederum in die Sektionen.

Parameter

  • as ("AutoSize") - Die Größe der Primärregion wird dem Inhalt angepasst
  • sz ("size") - Größe der Primärregion in Pixel

Beispiele

#prim  
#prim  as=N  sz=500

#page_cat / #cat

Legt eine Kategorie an. Zuvor muss eine Primärregion angelegt worden sein. #page_cat und #cat sind äquivalente Bezeichner für dieselbe Prozedur.

Parameter

  • c ("Caption") - Beschriftung der Kategorie
  • co ("categorie opened") - wenn Y, dann wird die Kategorie geöffnet erzeugt; default Y; Funktionen werden ersetzt
  • as ("AutoSize") - Die Größe der Primärregion wird dem Inhalt angepasst
  • sz ("size") - Größe der Primärregion in Pixel

Beispiel

#cat  as=N   sz=360   c=$T(Languages)

#page_val

Schreibt einen Wert in die Page, genauer gesagt in das mit i bezeichnete Segment.

Bei Text- und Memo-Segmenten werden nur die Parameter i und z benötigt und beachtet. Die VL, Grid- und XGrid-Segmenten muss die Spalte und die Reihe spezifiziert werden.

Parameter

  • chg ("change") - Wenn Y, wird mit der Änderung die Zelle auf Changed gesetzt; default Y; Funktionen werden ersetzt
  • col ("Column") - Index der Spalte, in welche der Wert geschrieben wird; wenn nicht gesetzt, dann wird der Parameter f verwendet
  • f ("field") - Feldname der Zelle oder der Spalte, in welche der Wert geschrieben wird; wird nur verwendet, wenn col nicht gesetzt ost
  • i ("item") - Name des Segments, in welches der Wert geschrieben wird
  • ie ("if empty") - Wenn Y, wird der Wert nur in die Zelle geschrieben, wenn diese leer ist; default N; Funktionen werden ersetzt
  • row - Index der Reihe, in die geschrieben wird. Alternativ sind bei Grid-Segmenten folgende Reihenbezeichnungen möglich:
    • all - der Wert wird in alle Reihen geschrieben
    • allsel ("all selected") - der Wert wird in alle Reihen geschrieben, die mit der in der Prozedur #grd_seg mit der Parameter sc ("selection column") spezifizierten Zelle selektiert wurden
    • looprow - die in der Ausführung der Prozedur #grd_loop gerade aktive Reihe
    • sel ("selected") - die aktuell selektierte Reihe
  • z - Wert, der geschrieben wird

Beispiel

#cmd #page_val   i=vl   col=1   row=4   z=$HASH($PVAL(vl,1,2),SHA512)

#page_check

Um Eingaben zu Validieren, können Checks definiert werden. Diese werden nach Benutzereingaben ausgeführt. Führen diese Checks zu Fehlern, so wird das Speichern der Daten verhindert. Die Fehlerliste wird statt des Trees angezeigt. Mit dem Beseitigen der Fehler oder dem verwerfen der Änderungen wird die Fehlerliste wieder ausgeblendet.

Parameter

  • c ("caption") - Text, der beim Scheitern der Prüfung in die Fehlerliste aufgenommen wird.
  • chk ("check") - Wenn nicht Y, dann gilt die Prüfung als gescheitert; Funktionen werden ersetzt
  • cnd ("condition") - Wenn Y, wird die Prüfung ausgeführt; Funktionen werden ersetzt
  • y - Typ des Checks; default e
    • e ("error") - Fehler
    • n ("none") - Check wird geprüft, aber nicht angezeigt und verhindert auch nicht da Speichern
    • w ("warning") - Warnung; wird angezeigt, aber verhindert nicht das Speichern

Beispiele

#page_check   c="Das Passwort muss mindestens 6 Zeichen lang sein"   chk="$BOOL($LEN($PVAL(vl,1,2)) > 5)"
#page_check   c="Die Bestätigung stimmt nicht mit dem Paswort überein"   chk="$BOOL($PVAL(vl,1,2) = $PVAL(vl,1,3))"

#page_ready

Wird eine Seite nicht über #page_fill erstellt, sondern dadurch, dass das Kommando direkt aufgerufen wird, so müssen die Routinen, welche nach Aufbau der Seite ausgeführt werden müssen, explizit aufgerufen werden; dazu dient #page_ready.

Parameter

(keine)

Beispiel

#page_ready

$PAGE()

Ermittelt den Namen der aktuellen Page.

Parameter

(keine)

Beispiel

#btn  c=test  w=120  s="#message  c=$PAGE()"  se=b     h="Dies ist ein Test"

$PVAL()

Ermittelt einen Wert aus der Page

Text- und Memo-Segmente

Es muss nur der Name des Segments angegeben werden, $PVAL() gibt den kompletten Text zurück.

Grid- und XGrid-Segmente

Wie immer muss der Name des Segments als erster Parameter angegeben werden.

Als zweiter Parameter folgt entweder der Index der Spalte (0-relativ, die erste Spalte hat also den Index 0) oder der Feldname der Spalte.

Als dritter Parameter wird 0-relativ der Index der Zeile angegeben, alternativ eine Sonderzeile oder eine Aggregatfunktion.

Aggregatfunktionen

Für Grid- und XGrid-Segmente können Aggregatfunktionen gebildet werden. Erste Parameter ist der Name des Segments, zweiter Parameter Index der Spalte oder Feldname, als dritter Parameter der Name der Aggregatfunktion:

  • count - Anzahl der Datensätze
  • sum - Summe der Werte
  • max - Maximum der Werte
  • min - Minimum der Werte
  • avg - Durchschnitt der Werte
  • med - Median der Werte
  • countsel - Anzahl der selektierten Datensätze
  • sumsel - Summe der Werte der selektierten Datensätze
  • maxsel - Maximum der Werte der selektierten Datensätze
  • minsel - Minimum der Werte der selektierten Datensätze
  • avgsel - Durchschnitt der Werte der selektierten Datensätze
  • medsel - Median der Werte der selektierten Datensätze

VL-Segment

Wie immer muss der Name des Segments als erster Parameter angegeben werden.

Als zweiter und dritter Parameter wird 0-relativ der Index der Spalte und der Zeile angegeben.

Alternativ kann als zweiter Parameter ein Feldname angegeben werden. $PVAL() durchsucht dann alle Reihen und Spalten des VL-Segments nach diesem Feldnamen.

Sonderzeilen

Statt der Bezeichnung über die Zeilennummer sind auch die folgenden Werte möglich:

  • looprow - die aktuelle Zeile bei der Ausführung von #grd_loop
  • checkrow - die aktuelle Zeile bei der Ausführung von $GRD_CHECK
  • data - dieselbe Zeile im Grid wie das Kommando, das in dieser Zeile ausgeführt wird
  • sel - die selektierte Zeile

Sonderwerte

Bei Grid-, XGrid- und VL-Segmenten können Sonderwerte ermittelt werden. Es ist als zweiter Parameter ein Ausrufezeichen und als dritter Parameter der Name des Sonderwertes einzugeben:

  • looprow - der 0-relative Index der aktuellen Reihe in #grd_loop

Parameter

  1. Name des Segments
  2. Spaltenindex (0-relativ) oder Feldname; bei Sonderwerten ein Ausrufezeichen
  3. Reihenindex (0-relativ), alternativ eine Sonderreihe:
    1. looprow - aktuelle Reihe in #grd_loop
    2. all - es werden alle Reihen zurückgegeben, als Trennzeichen wird der vierte Parameter verwendet
    3. allsel - es werden alle selektierten Reihen zurückgegeben, als Trennzeichen wird der vierte Parameter verwendet
  4. Trennzeichen(folge), wenn mehrere Zeilen zurückgegeben werden

Beispiele

#cmd #message c=$PVAL(item,value,1)
#text $PVAL(item,name,looprow) - $PVAL(item,description,looprow)
#clipboard   t=$PVAL(grid,adrnr,all,$CHR(crlf))

Segmente

Eine Page ist in Primär-Regionen, diese in Kategorien und diese wiederum in Segmente eingeteilt.

Segment-Typen

VL-Segment

Ein VL-Segment ist ein Grid zur Darstellung und Bearbeitung eines einzelnen Datensatzes.

Das Standard-VL-Segment (VL für "value list") ist zweispaltig: Links der Namen, rechts der Wert. Es können jedoch auch weitere Spalten ergänzt werden, so dass der zur Verfügung stehende Platz in der Horizontalen besser genutzt werden kann oder dass weitere Werte in unsichtbaren Spalten gespeichert werden können.

VL-Segment


Grid-Segment

Ein Grid-Segment dient zur Darstellung und Bearbeitung mehrerer Datensätze.

Ein Standard-Grid hat eine Kopfzeile, kann jedoch mehrere Kopf- und Fußzeilen haben.

Grid-Segment


XGrid-Segment

Ein XGrid-Segment ähnelt einem Grid-Segment. Allerdings besteht hier die Möglichkeit, Reihen einer Tabelle als Spalten zu ergänzen.

Im nachfolgenden Bild gehören alle Spalte bis einschließlich Status zur Tabelle todo_todo, während die folgenden Spalten (und auch die Anzahl der folgenden Spalten) davon abhängt, welche Gruppen dem jeweiligen ToDo-Typ zugeordnet sind.

XGrid-Segment


Button-Segment

In ein Button-Segment können mehrere Buttons eingefügt werden.

Button-Segment mit zwei Buttons


Memo-Segment

Das Memo-Segment dient zu Anzeige und Bearbeitung von mehrzeiligem Text.

Memo-Segment


Text-Segment

Mit einem Text-Segment kann mehrzeiliger Text auf der Seite angezeigt werden. (Die zugrunde liegende Delphi-Komponente ist ein Memo, so dass der Text markiert und in die Zwischenablage kopiert werden kann.)

Text-Segmente werden bisweilen auch einfach dafür eingesetzt, den Abstand zwischen anderen Segmenten zu vergrößern.

Memo-Segment

Gemeinsame Parameter aller Segmente

Die folgenden Parameter können in allen Segmenten genutzt werden:

Parameter

  • b ("Buttons") - Buttons für das Segment; benötigt eine Überschrift (zur Not ein Leerzeichen), weil die Buttons rechts oben in der Überschriftszeile untergebracht werden; Funktionen werden ersetzt
  • c ("Caption") - Überschrift für das Segment; Funktionen werden ersetzt
  • hp ("help path") - noch ohne Funtion
  • n ("name") - Name des Segments, wird benötigt, wenn auf das Segment zugegriffen werden soll
  • mhc ("max height closed") - maximale Höhe im geschlossenen Zustand
  • mho ("max height opened") - maximale Höhe im geöffneten Zustand
  • oc ("open close") - Spezifiziert, ob das Segment im geöffneten und/oder geschlossenen Zustand der Kategorie angezeigt wird; Funktionen werden ersetzt; default o
    • c - Segment wird nur in geschlossenem Zustand angezeigt
    • o - Segment wird nur in geöffnetem Zustand angezeigt
    • oc - Segment wird in geöffnetem und geschlossenen Zustand angezeigt
  • r ("rights") - Rechtedefinition
  • ro ("read only") - Der Anwender kann die Daten im Segment nicht ändern

Beispiel

#grd_seg    frc=1   fcc=1   clt=ss   mhc=300   n=test   c=" "   b=HAI   sc=0

Text-, Memo- und Button-Segmente

#text_seg

Legt ein Text-Segment an.

Parameter

Text-Segmente haben nur die gemeinsamen Parameter aller Segmente.

Beispiel

#text_seg  c=Test
#textline Erste Zeile
#textline Zweite Zeile

#text_line

Fügt einem Text-Segment eine Zeile hinzu. Die komplette Zeile nach dem Prozedurennamen und dem folgenden Leerzeichen wird als neue Zeile hinzugefügt.

Parameter

Die komplette Zeile nach dem Prozedurennamen und dem folgenden Leerzeichen wird als neue Zeile dem Segment hinzugefügt.

Beispiel

#text_seg  c=Test
#textline Erste Zeile
#textline Zweite Zeile

#memo_seg

Legt ein Memo-Segment an, also ein Segment, in dem mehrzeiliger Text bearbeitet werden kann.

Data

Mit q=data werden die Texte in der Tabelle data_memo gespiechert. Diese Tabelle ist dafür vorgesehen, mal schnell ein Bemerkungsfeld zu beliebigen Daten hinzuzufügen, ohne die jeweilige Datenbak-Tabelle erweitern zu müssen.

Der Datensatz in data_memo wird mit den Spalten item und ref referenziert. Item wird über den Parameter i gesetzt und ist zwingend. Für ref wird der Parameter k verwendet, der üblicherweise auf die ID-Spalte der Daten gesetzt wird, mit denen das Memo-Feld verbunden werden soll. Bleibt k leer, so wird none als Konstante eingefügt.

File

Mehrzeiliger Text kann auch einfach in einer Datei auf der Festplatte gespeichert werden. Dazu wird q=file und fn auf den gewünschten Dateinamen gesetzt. Möchte man für unterschiedliche Datensätze unterschiedliche Texte und damit unterschiedliche Dateinamen, so holt man einfach die ID oder eine andere eindeutige Spalte mit in den Dateinamen.

Link

Zellen in VL- und Grid-Segmente können problemlos mehrzeiligen Text speichern, sie können ihn aber nicht brauchbar anzeigen und bearbeiten. Mit q=link lässt sich ein Memo-Segment an ein VL- oder Grid-Segment hängen, so dass mehrzeiliger Text dort im Memo-Segment angezeigt und bearbeitet wird. Der Parameter i referenziert auf das VL- oder Grid-Segment, mit f wird die Datenbankspalte angegeben. Mit w=0 wird üblicherweise die entsprechende Spalte im VL- oder Grid-Segment ausgeblendet.

In einem Grid-Segment wird der Feldinhalt der gerade aktuellen Zeile angezeigt. Bei einem Zeilenwechsel ändert sich dann auch der Inhalt der Memo-Segments.

Datenänderungen werden über das VL- oder Grid-Segment gespeichert.

Parameter

  • f ("field") - bei q=link der Feldname im verbundenen Segment
  • fn ("file name") - Dateiname, wird für q=file verwendet; Funktionen werden ersetzt
  • k ("key") - Wert für die Spalte ref in data_memo
  • i ("item") - bei q=link Name des Segments, bei q=data der Item-Name; bei letzterem werden Funktionen ersetzt
  • q ("Quelle") - Herkunft der Daten
    • data - Daten werden in der Tabelle data_memo gespeichert; benötigt die Parameter i und meist auch k
    • file - Daten werden in einer Datei gespeichert; benötigt den Parameter fn
    • link - Daten werden in einem anderen Segment gespeichert; benötigt die Parameter i und vl
  • z - Text des Memo-Segments; Wird von den Daten in q gegebenenfalls überschrieben

Zusätzlich gibt es die Parameter aller Segmente.

Beispiele

#memo_seg   q=link   i=vl   f=code   c="Code"   b=H
#memo_seg   q=file   fn=i:\temp\test.txt   c=$T(Notes)
#memo_seg   q=data   i=memo_reise   k=$PVAL(vl,reise_id)   c=" "  b=H


#btns_seg

Legt ein Button-Segment an.

Parameter

Button-Segmente haben nur die gemeinsamen Parameter aller Segmente. Meist werden überhaupt keine Parameter benötigt.

Beispiel

#btns_seg

#btn_btn

Legt einen Button in einem Button-Segment an.

Parameter

  • c ("caption") - Beschriftung des Buttons; Funktionen werden ersetzt
  • cmd ("command") -Kommando, das ausgeführt wird, wenn auf den Button geklickt wird (und ggf. die Bestätigungsabfrage mit Ja beantwortet wurde); Funktionen werden ersetzt (zum Zeitpunkt des Buttons-klicks)
  • cnf ("confirmation") - Beim Mausklick auf den Button wird zunächst ein Bestätigungs-Dialog mit dem im Parameter cnf angegebenen Text angezeigt. Nur wenn dieser Bestätigungs-Dialog mit Ja geschlossen wird, wird cmd ausgeführt. Funktionen werden bei Anzeige des Bestätigungs-Dialogs ersetzt. Ist cnf leer, unterbleibt die Anzeige.
  • r ("rights") - Rechte-Definition des Buttons; zum Ausführen des Buttons werden Schreibrechte benötigt
  • ro ("read only") - Mit Y wird die Ausführung des Buttons gesperrt; Funktionen werden ersetzt
  • w ("width") - Breite des Buttons

Beispiel

#btns_seg  
#btns_btn  c=$T(Test_special)  w=150   cmd="#pagefill  d=xspecial_page_list(test)"

VL-Segmente

VL-Segmente ("Value List") sind Gitter-Segmente zur Anzeige eines einzelnen Datensatzes.

Im Standard-Fall sind VL-Segmente zweispaltig: Auf der linken Seite wird die Beschriftung angezeigt, auf der rechten Seite der jeweilige Wert des Datensatzes.

VL-Segmente können aber auch mehr als zwei Spalten haben. Das können unsichtbare Spalten sein, um Daten für z.B. ein Memo-Segment zu beinhalten, das können aber auch sichtbare Spalten sein, um den Platz auf dem Bildschirm besser auszunutzen.

#vl_seg

Mit der Prozedur #vl_seg wird ein VL-Segment angelegt.

Parameter

  • cc ("ColumnCount") - Anzahl der Spalten; default 2; Funktionen werden ersetzt
  • clt (column line type) - Spezifiziert, ob Spalten verbreitert oder umgebrochen werden; default sf; Funktionen werden ersetzt
    • mf - multi line fixed
    • ms - multi line stretch
    • sf - single line fixed
    • ss - single line stretch
  • fcc (fixed columns count) - Spalten, die auch beim Scrollen links angezeigt werden; Wird bei #vl_seg sehr selten verwendet; default 0
  • w ("width") - Breite der Spalte (w1, w2, w3...); Funktionen werden ersetzt
  • wst ("width stretch") - Anzahl der Pixel, um welche die Spalte maximale verbreitert wird (wst1, wst2, wst3...); Funktionen werden ersetzt; findet nur bei clt=ss und clt=ms Verwendung

Zusätzlich gibt es die Parameter aller Segmente.

Beispiel

#vl_seg  cc=3  clt=ss   w1=100   w2=200   wst2=200   w3=200   n=vl   c=" "   b=H

#vl_line

Legt eine Zeile in einem VL-Segment an

Parameter

Die Parameter in #vl_line haben als Postfix die Nummer die Spalte, auf die sie sich beziehen.

  • c1, c2... ("caption") - Beschriftung der Spalte; Wird die Beschriftung ersetzt, wird die Zelle auf ReadOnly gesetzt; Funktionen werden ersetzt
  • chg1, chg2... ("change") - Kommando, das ausgeführt wird, wenn der Inhalt der Zelle geändert wird; siehe auch Beispiel für chg
  • cs1, cs2... ("col span") - Werte größer 1 fügen Zellen zusammen; default 1
  • cy1, cy2... ("char type")
    • l - LowerCase
    • n - Normal
    • u - UpperCase
  • f1, f2... ("field") - Feldname in der Datenbank
  • ld1, ld2... ("lookup data") - Name der Lookup-Liste, wenn der Datentyp lookup; Alternativ sql1, sql2..., um die Daten aus einem SQL-Statement zu ziehen
  • ls1, ls2... ("lookup special") - Alternativ zu ld: Name des Specials, wenn die Daten aus einem Special gezogen werden sollen
  • l1, l2... ("length") - Zeichenlänge der Zelle
  • nd1, nd2... ("no data") - Daten werden beim Speichern nicht zurück in die Datenbank geschrieben; Änderungen an den Daten versetzen das VL-Segment und somit die Page nicht in den Changed-Status
  • nv1, nv2... ("no value") - Wert, der eingefügt wird, wenn das Feld in der Datenmenge leer ist
  • nvi1, nvi2... ("no value insert") - Wert, der eingefügt wird, wenn das Feld in der Datenmenge leer ist; dann wird das Segment auch in den Insert-Modus gesetzt
  • nvic1, nvic2... ("no value insert change") - Wert, der eingefügt wird, wenn das Feld in der Datenmenge leer ist; dann wird das Segment in den Insert- und Changed-Modus gesetzt
  • pw1, pw2... ("password") - Wenn Y, dann werden statt des Inhalts Punkte angezeigt; Funktionen werden ersetzt
  • q1, q2... ("Quelle") - Datenquelle für die Zelle; siehe auch Beispiel für Datenquelle
  • r1, r2... ("rights") - Rechtedefinition der Zelle
  • ro1, ro2... ("read only") - Zelle kann nicht bearbeitet werden
  • y1, y2... ("type") - Datentyp der Spalte; default ist text
    • bool - bool'sche Felder mit Y und N; wird als Checkbox dargestellt
    • bool2 - bool'sche Felder, Y wird als angehakte Checkbox dargestellt, N als leeres Feld
    • curr - Currency, also Zahlen mit zwei Nachkommastellen
    • curr4 - Zahlen mit vier Nachkommastellen
    • date - Datum im Format dd.mm.yyyy
    • datemin - Datum im Format dd.mm.yyyy hh:mm
    • datesec / datesek - Datum im Format dd.mm.yyyy hh:mm:ss
    • guid - Inhalt wird als drei Punkte dargestellt; wird für GUIDs verwendet, die sich dann aber kopieren lassen
    • iban - noch nicht implementiert
    • int - Integer, also ganze Zahlen
    • link - Link-Symbol
    • lookup - Nachschlageliste
    • lookuplive - Nachschlageliste, die beim Öffnen neu und auch für jede Zelle individuell geladen wird
    • text - normaler Text
    • todo - Symbole für ToDo-Listen
  • z1, z2... - Wert der Zelle; im Unterschied zur Caption wird der Wert von #vl_data überschrieben, die Zelle wird auch nicht auf ReadOnly gesetzt.

Beispiele

#vl_line   c1="Name"   f2=name
#vl_line   c1="Type"   f2=type   ro=Y   y2=lookup   ld2=user_group_type   nv2=$FND(s,type)
#vl_line   c1="Data Special Id"   f2=data_special_id   ro2=Y   nvic2=$GUID()   f3=code

Beispiel für chg

#cmdclear
#cmd #page_val   i=vl   col=1   row=4   z=$HASH($PVAL(vl,1,2),SHA512)
...
vl_line   c1=$T(new_password)    nd2=Y     chg2=1   pw2=Y

Beispiel für Datenquelle

Im Normalfall ist mit einem VL-Segment immer nur eine Tabelle verbunden. Mit Hilfe eines Joins können zwar Daten aus mehreren Tabellen angezeigt werden, aber üblicherweisen werden die Daten nur in eine Tabelle zurück geschrieben, die anderen Zellen sind mit nd=Y gekennzeichnet.

Sollen Daten jedoch in mehrere Tabellen zurückgeschrieben werden, dann ist das Vorgehen das Folgende:

  • Die weiteren Tabellen benötigen eine Schlüsselspalte, welche denselben Inhalt wie die primäre Tabelle hat. Gegebenenfalls muss diese Spalte ergänzt werden. Bei der Benennung dieser Spalte gibt es zwei Möglichkeiten:
    • Die Spalte heißt genau so wie die Schlüsselspalte in der primären Tabelle (hier im Beispiel hat die Tabelle test_test2 die ID test_test2_id, und die angehängte Tabelle test_test2_add hat auch die ID test_test2_id - und nicht test_test2_add_id).
    • Die Spalte heißt nicht so wie die Schlüsselspalte in der primären Tabelle (hier im Beispiel hat die Tabelle test_add3 die Schlüsselspalte test_add3_id); die bei BAF "übliche" Benennung mit einem angehängten _id wie hier bei test_add3 ist zu bevorzugen.
  • Es wird ein SQL-Statement erstellt, um diese Tabellen zusammenzufügen. Die angehängten Tabellen werden mit einem left outer join verbunden. Dort, wo die ID-Spalten der angehängten Tabellen gleich wie in der primären Tabelle heißen (im Beispiel test_test2_id), werden sie umbenannt (im Beispiel yid).
  • In #vl_data werden die weiteren Tabellen als t2, t3... aufgezählt; hier im Beispiel t2=test_tes2_add und t3=test_add3. Wo sich der Name der Schlüsselspalte nicht auf dem Tabellennamen ableiten lässt, sind auch die Schlüsselspalten entsprechend anzugeben als k2, k3...; hier im Beispiel k2=yid
  • Die Schlüsselspalten der ergänzten Tabellen sind im VL-Segment zu speichern. Üblicherweise wird dafür eine ausgeblendete Spalte verwendet.
  • Bei jeder Zelle, die in einer der angehängten Tabellen gespeichert werden soll, ist mit dem Parameter q anzugeben, welches die angehängte Tabelle ist. y2 ist t2, y3 ist t3... (hier im Beispiel q2, weil die Daten in der zweiten Spalte der VL-Segments stehen).
  • Dort, wo Schlüsselspalten gleich heißen wie in der primären Tabelle und deswegen im SQL-Statement umbenannt werden müssen (hier im Beispiel yid statt test_test2_id), muss der Spaltenname in der Tabelle mit yf angegeben werden, damit die Daten korrekt zurück geschrieben werden (hier im Beispiel yf3=test_test2_id - die Ziffer 3 bei yf3 bezieht sich auf die (unsichtbare) Spalte im VL-Segment, nicht auf die Nummer der Tabelle)
  • Es ist sicherzustellen, dass alle beteiligten Tabellen dieselben Schlüsselwerte bekommen. Zu diesem Zweck wird im Beispiel die ID der primären Tabelle in den Value 1 geschrieben, ersatzweise wird eine neue GUID verwendet. Dieser Value wird dann mittels nvi in alle Schlüsselfelder geschrieben.
#setval   n=1   z=$FND(s,test_test2_id)   ie=$GUID()

#vl_seg  cc=3  clt=ss   w1=100  w2=200   wst2=200  w3=0   n=vl   c=" "  b=H
#vl_line   c1="ID"   f2=test_test2_id   ro2=Y   nvic2=$VAL(1)     f3=yid   yf3=test_test2_id    q3=y2   nvi3=$VAL(1)
#vl_line   c1="Zahl"   f2=zahl   f3=test_add3_id   q3=y3   nvi3=$VAL(1)
#vl_line   c1="Text"   f2=text
#vl_line   c1="Todo"   f2=boolsch   y2=todo
#vl_line   c1="Add 1"   f2=add_1     q2=y2
#vl_line   c1="Add 2"   f2=add_2     q2=y2
#vl_line   c1="Add 3"   f2=add_3     q2=y2
#vl_line   c1="Add 31"   f2=add31     q2=y3
#sql select t.test_test2_id, t.zahl, t.text, t.boolsch, a.test_test2_id as yid, a.add_1, a.add_2, a.add_3, b.test_add3_id, b.add31
#sql   from test_test2 t
#sql     left outer  join test_test2_add a on a.test_test2_id = t.test_test2_id 
#sql     left outer join test_add3 b on b.test_add3_id = t.test_test2_id 
#sql   where t.test_test2_id = :kid
#vl_data   q=sql   t=test_test2      t2=test_test2_add   k2=yid   t3=test_add3   kid=$FND(s,test_test2_id)

#vl_data

Füllt ein VL-Segment mit Daten

Parameter

  • k ("key") - Name der Schlüsselspalte; default ist der Tabellenname mit einem angehängten _id
  • k ("key") - Als Prefix für alle SQL-Parameter; siehe Beispiel
  • kid ("key id") - bei q=t der Wert der Schlüsselspalte, damit der Datensatz lokalisiert werden kann
  • q ("Quelle") - Datenherkunft
    • sql - SQL-Statement
    • t - Table
  • t ("table") - Name der Tabelle; obligatorisch bei q=t und wenn bei q=sql die Daten zurückgeschrieben werden sollen
  • t2, t3... ("table") weitere Tabellen, in die Daten gespeichert werden sollen; siehe Beispiel für Datenquelle in #vl_line

Beispiele

#vl_data   q=t   t=data_list   kid=$FND(s,data_list_id)  

#sql select * from menu_category where menu_category_id = :k_menu_category_id
#vl_data   q=sql   t=menu_category   k_menu_category_id=$FND(s,menu_category_id)

#sql select * from menu_category where menu_category_id = :kid
#vl_data   q=sql   t=menu_category   kid=$FND(s,menu_category_id)

Grid-Segmente

Grid-Segmente sind Segmente, in denen in Tabellenform mehrere Datensätze einer Datenbanktabelle oder einer SQL-Abfrage angezeigt werden. Grid-Segmente können Kopf- und Fußzeilen haben (default 1 Kopfzeile, 0 Fußzeilen)

#grd_seg

Mit der Prozedur #grd_seg wird ein Grid-Segment angelegt.

Parameter

  • clt (column line type) - Spezifiziert, ob Spalten verbreitert oder umgebrochen werden; default sf; Funktionen werden ersetzt
    • mf - multi line fixed
    • ms - multi line stretch
    • sf - single line fixed
    • ss - single line stretch
  • fcc (fixed columns count) - Spalten, die auch beim Scrollen links angezeigt werden; default 0; Funktionen werden ersetzt
  • frc (footer row count) - Anzahl der Fußzeilen; default 0; Funktionen werden ersetzt
  • hrc (header row count) - Anzahl der Kopfzeilen; default 0; Funktionen werden ersetzt
  • sc (selection column) - Spaltenindex der Selection-Zeile. Ein Grid-Segment kann eine Selection-Spalte haben, also eine Spalte vom Typ bool, mit deren Hilfe einzelne Zeilen ausgewählt werden können. Default ist -1, Funktionen werden ersetzt.

Zusätzlich gibt es die Parameter aller Segmente.

Beispiel

#grd_seg   frc=0   fcc=1   clt=ss   mhc=300   n=item

#grd_col

Mit der Prozedur #grd_col wird eine Spalte in einem Grid-Segment definiert.

Parameter

  • a (align) - Ausrichtung des Textes in der Spalte; default ist l.
    • c (center) - Text wird zentriert ausgerichetet
    • d2 (decimal 2) - Text wird rechtsbündig für zwei Nachkommastellen ausgerichtet
    • d4 (decimal 4) - Text wird rechtsbündig für vier Nachkommastellen ausgerichtet
    • l (left) - Text wird linksbündig ausgerichtet
    • r (right) - Text wird rechtsbündig ausgerichtet
  • a1, a2... (align) - [Header] Ausrichtung des Textes des Headers der Spalte der ersten, zweiten... Zeile. Zulässige Werte siehe Parameter a.
  • c (caption) - Spalten-Titel im Filter-Formular; Funktionen werden ersetzt. Bleibt dieser Parameter leer, so wird ersatzweise c1 verwendet.
  • c1, c2... (caption) - [Header] Spalten-Titel der ersten, zweiten... Zeile; Funktionen werden ersetzt.
  • cmd (command) - Kommando, zum Beispiel für Verlinkung; Funktionen werden sofort ersetzt.
  • cmdn (command no) - Kommando, zum Beispiel für Verlinkung; Funkionen werden erst bei Ausführung des Kommandos ersetzt; wird nur berücksichtigt, wenn cmd leer ist.
  • cs1, cs2... (ColSpan) - [Header] Die Zelle des Spaltentitels der ersten, zweiten... Zeile überspannt die angegebene Anzahl an Spalten. Default ist 1; Funktionen werden ersetzt.
  • cy (character type) - Groß- und Kleinschreibung; default ist n
    • l (lower case) - Spalte wird in Kleinbuchstaben dargestellt
    • n (normal) - Groß- und Kleinschreibung wie eingegeben
    • u (upper case) - Spalte wird in Großbuchstaben dargestellt
  • f (fieldname) - Feldname der Spalte in der Datenmenge; Funktionen werden ersetzt.
  • f1, f2... (fieldname) - [Header] Feldname des Spaltentitels der ersten, zweiten... Zeile; Funktionen werden ersetzt. Sind auch die Parameter c1, c2... gesetzt, dann werden die Texte zusammengefügt, wobei der Text aus c1, c2... vorangestellt wird.
  • fa1, fa2... (footer align) - [Footer] Ausrichtung des Textes der Fußzeile der Spalte der ersten, zweiten... Zeile. Zulässige Werte siehe Parameter a.
  • fc1, fc2... (footer caption) - [Footer] Spalten-Fußzeile der ersten, zweiten... Zeile. Ist im Text ein $-Zeichen enthalten, dann wird der Text als Zellen-Kommando interpretiert.
  • fcs1, fcs2... (footer ColSpan) - [Footer] Die Zelle der Fußzeile der ersten, zweiten... Zeile überspannt die angegebene Anzahl an Spalten. Default ist 1; Funktionen werden ersetzt.
  • ff1, ff2... (footer fieldname) - [Footer] Feldname des Fußzeile der ersten, zweiten... Zeile; Funktionen werden ersetzt. Sind auch die Parameter fc1, fc2... gesetzt, dann werden die Texte zusammengefügt, wobei der Text aus fc1, fc2... vorangestellt wird.
  • fh1, fh2... (footer hint) - [Footer] Feldname des Hint-Textes der Spalte der ersten, zweiten... Fußeile; Funktionen werden ersetzt. Gibt es in der Datenmenge keine Spalte dieses Namens, dann wird der Wert als Konstante ausgegeben.
  • fy1, fy2... (footer Typ) - [Footer] Datentyp des Datentyps der ersten, zweiten... Fußzeile; default ist text. Zulässige Werte siehe y.
  • h (hint) - Feldname des Hint-Textes in der Datenmenge; Funktionen werden ersetzt.
  • h1, h2... (hint) - [Header] Feldname des Hint-Textes der Spalte der ersten, zweiten... Zeile; Funktionen werden ersetzt. Gibt es in der Datenmenge keine Spalte dieses Namens, dann wird der Wert als Konstante ausgegeben.
  • jy (join type) - Im Standardfall werden bei Join-Gruppierung die Daten durch Kommata getrennt dargestellt. Sie können jedoch auch summiert werden, dafür ist jy=sum zu setzen.
  • l (length) - Maximale Länge in Zeichen bei der Eingabe
  • ld (LookupData) - Name der Nachschlageliste beim Spaltentyp y=lookup
  • llc (LookupLiveCommand) - Name oder Nummer des Kommandos, das beim Spaltentyp y=lookuplive verwendet wird; ls und ls dürfen nicht gesetzt werden
  • ls (LookupSpecial) - Name des Specials (hinterlegte SQL-Anweisung in xspecial), wird nur berücksichtigt, wenn ld nicht gesetzt ist
  • nd (no data) - Spalte wird beim Speichern nicht berücksichtigt; Änderungen versetzen das Grid auch nicht in den Zustand changed.
  • q (quelle) - Datenquelle für das Grid.
    • j, join - Daten aus einem Datenbank-Join werden gruppiert dargestellt
    • s, sql - SQL-Statement
    • t, tbl, tab, table - Datenbanktabelle
  • r (right) - Rechtedefinition der Spalte
  • ro (ReadOnly) - Wenn Y, dann kann die Spalte nicht beschrieben werden.
  • rof (ReadOnlyField) - Wenn der Inhalte der angegebenen Datenbankspalte Y ist, dann kann die betreffende Zelle nicht beschrieben werden.
  • ss1, ss2... (SortSymbols) - [Header] Mit Mausklick auf den Spaltentitel kann nach dieser Spalte sortiert werden, mit einem weiteren Mausklick die Sortierrichtung umgekehrt werden. Es werden dabei entsprechend Symbole rechts im Spaltentitel angezeigt. Um eine Sortierung zu verhinden, kann ss1, ss2... auf N gesetzt werden. Funktionen werden ersetzt.
  • w (width) - Breite der Spalte in Pixel; Funktionen werden ersetzt.
  • wst (width stretch) - Anzahl von Pixel, welche die Spalte maximal verbreitert wird, wenn Platz dafür da ist. Voraussetzung dafür ist, dass der Parameter clt von #grd_seg den Wert ss oder ms hat. Funktionen werden ersetzt.
  • y (typ) - Datentyp der Spalte; default ist text
    • bool - bool'sche Felder mit Y und N; wird als Checkbox dargestellt
    • bool2 - bool'sche Felder, Y wird als angehakte Checkbox dargestellt, N als leeres Feld
    • curr - Currency, also Zahlen mit zwei Nachkommastellen
    • curr4 - Zahlen mit vier Nachkommastellen
    • date - Datum im Format dd.mm.yyyy
    • datemin - Datum im Format dd.mm.yyyy hh:mm
    • datesec / datesek - Datum im Format dd.mm.yyyy hh:mm:ss
    • guid - Inhalt wird als drei Punkte dargestellt; wird für GUIDs verwendet, die sich dann aber kopieren lassen
    • iban - noch nicht implementiert
    • int - Integer, also ganze Zahlen
    • link - Link-Symbol
    • lookup - Nachschlageliste
    • lookuplive - Nachschlageliste, die beim Öffnen neu und auch für jede Zelle individuell geladen wird
    • text - normaler Text
    • todo - Symbole für ToDo-Listen
  • yf (Y fieldname) - Feldname der Spalte in einer zusätzlichen Datenmenge; Funktionen werden ersetzt.

Beispiele

#grd_col   f=translate_list_item_id   c1=ID   w=30   y=guid   ro=Y   nvi=$GUID()
#grd_col   f=user_group_id   c1=$T(group)   y=lookup   ls=system_groups_all   w=200   wst=200

#grd_data

Füllt das Grid mit Daten aus der Dankenbank.

Parameter

  • gc (grid cache) - Erhält dieser Paremeter einen Wert, dann wird das SQL-Statement nur beim erstmaligen Aufruf von #grd_data ausgeführt. Die Daten werden dann in einem Cache gespeichert, so dass erneute Aufrufe weniger lange dauern. Der Inhalt das Parameters wird als Name für die Seite im Cache verwendet und muss eindeutig sein - im Zweifelsfall verwendet man eine GUID. Hinweise: Wenn weitere Spalten der Abfrage und dem Grid hinzugefügt werden, bleiben diese erste mal leer. Auch Veränderungen der Daten durch andere User bleiben erst mal unsichtbar. Ein erneuter Start der BAF-Clients führt zu einem leeren Cache und somit zur erneuten Ausführung des SQL-Statements.
  • ior (insert one row) - Wenn Y, wird eine (leere) Zeile eingefügt, wenn die Datenmenge leer ist; default N; Funktionen werden ersetzt
  • k (key) - Name der Schlüsselspalte; per default der Tabellennamen plus ein angehängtes _id
  • k2, k3... - Name der Schlüsselspalten weiterer Tabellen; per default der Tabellennamen plus ein angehängtes _id
  • ocd (open cat on data) - Wenn Y, wird die übergeordnete Kategorie geöffnet, wenn das Grid Daten enthält; default N; Funktionen werden ersetzt
  • q (quelle) - Herkunft der Daten
    • j - Join
    • sql - SQL-Statement
    • t - Table
  • t (table) - Name der Datenbanktabelle, in welche die Daten beim Speichern zurückgeschrieben werden.
  • t2, t3... - Tabellennamen weiterer Tabellen


Beispiel

#grddata   q=sql   t=translate_list_item   kid=$FND(s,data_list_item_id)

#grd_add

Fügt einem Grid-Segment eine weitere Reihe hinzu.

Hinweis: Die Primärschlüsselspalte wird üblicherweise nicht in der Prozedur #grd_add gesetzt, sondern mit dem Parameter nvi in der Prozedur #grd_col.

Parameter

  • chg ("change") - Wenn Y, wird die neue Reihe gleich in den Changed-Modus gesetzt; default N; Funktionen werden ersetzt
  • f_ ("field) - Prefix für die Feldnamen der Spalten, deren Werte gesetzt werden sollen
  • i ("item") - Name des Grid-Segments

Beispiel

#grd_add   i=todo_add   f_ref=$VAR(todo_id)   f_ref_text=$VAR(todo_text)   f_ref_hint=$VAR(todo_hint)   f_status=1

#grd_loop

Die Prozedur #grd_loop führt eine Schleife über alle oder alle selektierten Reihen eines Grid-Segments durch.

Parameter

  • er (each row) - Kommando, das für jede oder jede selektierte Zeile des Grids ausgeführt wird.
  • ert (each row transaction) - Wenn Y, dann wird jeder Aufruf des mit er festgelegten Kommandos in einer Transaktion gekapselt
  • sc (selection column) - Index der Selection-Column; Wenn damit eine Spalte angegeben wird, dann wird das mit er festgelegte Kommando nur ausgeführt, wenn der Werte dieser Spalte in der betreffenden Reihe Y ist; default ist -1; Funktionen werden ersetzt.

Beispiel


#grd_cnt

Zählt die Zeilen in einem Grid. Es kann dabei eine Bedingung formuliert werden, welche Datensätze gezählt werden sollen.

Diese Prozedur kann auch dazu verwendet werden, um zu ermitteln, ob eine bestimmte Zeile schon im Grid vorhanden ist oder nicht. Davon lässt sich dann zum Beispiel abhängig machen, ob Daten in das Grid eingefügt werden sollen oder nicht.

Parameter

  • ccnd ("CountCondition") - Wenn Y, dann wird die Zeile gezählt. Default Y, Funktionen werden ersetzt.
  • i ("item") - Name des Grid- oder XGrid-Segments
  • n (name / number) - Name der Variable oder Nummer des Values, in die/den das Ergebnis geschrieben wird.
  • sc ("SelectionColumn") - Index der Spalte, die als Selection-Column verwendet wird. Eine Zeile wird dann nur gezählt, wenn sie auch selektiert ist. Default ist -1, dann wird keine SelectionColumn verwendet.

Beispiel

#grd_cnt   i=item   z=1   ccnd="$BOOL($PVAL(item,key,cntrow) > 5)"

XGrid-Segmente