Modul VAR neu: Unterschied zwischen den Versionen

Aus bafbal.de
Zur Navigation springen Zur Suche springen
 
(88 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 14: Zeile 14:
 
*n - Name der Variablen, Groß- und Kleinschreibung wird nicht unterschieden, zwingend erforderlich
 
*n - Name der Variablen, Groß- und Kleinschreibung wird nicht unterschieden, zwingend erforderlich
 
*r (rights) - Die Variable wird nur dann gesetzt, wenn das Recht ''write'' vorliegt; default ist ''frm''. Liegt das Recht ''read'' vor, so wird statt dem Inhalt von ''z'' der Inhalt von ''zr'' gesetzt. Liegt kein Recht vor, dann wird der Inhalt von ''zn'' gesetzt
 
*r (rights) - Die Variable wird nur dann gesetzt, wenn das Recht ''write'' vorliegt; default ist ''frm''. Liegt das Recht ''read'' vor, so wird statt dem Inhalt von ''z'' der Inhalt von ''zr'' gesetzt. Liegt kein Recht vor, dann wird der Inhalt von ''zn'' gesetzt
 +
*rf (replace functions) - Wenn Y, dann werden nach der Zuweisung auf die Variable nochmals die Funktionen ersetzt. Wird zum Beispiel benötigt, wenn Code mit Funktionen mittels $DATA() aus der Datenbank geladen wird; Funktionen werden ersetzt, default N; siehe Beispiel
 
*z - Wert der Variablen, Funktionen werden ersetzt, default ist ein leerer String
 
*z - Wert der Variablen, Funktionen werden ersetzt, default ist ein leerer String
 
*zn - Wert der Variablen, wenn das Recht r nicht vorliegt
 
*zn - Wert der Variablen, wenn das Recht r nicht vorliegt
Zeile 24: Zeile 25:
 
  #var_set  n=edt    z=$EDT(edt1)  ie=42
 
  #var_set  n=edt    z=$EDT(edt1)  ie=42
 
  #var_set  n=_page_kunde_adressänderung_ro  z=N  zn=Y  zr=Y  r=kundenservice
 
  #var_set  n=_page_kunde_adressänderung_ro  z=N  zn=Y  zr=Y  r=kundenservice
 +
 +
Zum Parameter rf: $NOW() in die Zwischenablage kopieren und dann ausführen:
 +
 +
#var_set  n=test  z=$CLIPBOARD()  rf=N
 +
#message  c=$VAR(test)
 +
#var_set  n=test  z=$CLIPBOARD()  rf=Y
 +
#message  c=$VAR(test)
  
 
==#var_setempty==
 
==#var_setempty==
Zeile 62: Zeile 70:
 
** datetime - Es wird dem Datum eine Anzahl von Tagen hinzugefügt, Ergebnis als datetime
 
** datetime - Es wird dem Datum eine Anzahl von Tagen hinzugefügt, Ergebnis als datetime
 
** int - Es wird eine Ganzzahl-Addition vorgenommen
 
** int - Es wird eine Ganzzahl-Addition vorgenommen
 +
** month - Es wird dem Datum eine Anzahl von Monaten hinzugefügt
 
** text - Der Wert wird als Text hinzugefügt
 
** text - Der Wert wird als Text hinzugefügt
 
*z - Wert, welcher der Variablen hinzugefügt wird, Funktionen werden ersetzt, default ist ein leerer String oder eine 0
 
*z - Wert, welcher der Variablen hinzugefügt wird, Funktionen werden ersetzt, default ist ein leerer String oder eine 0
Zeile 145: Zeile 154:
 
(keine)
 
(keine)
  
'''Beispiel'''
+
Folgen dem #cmd_clear Zeichen, so werden die dem gerade gelöschten Kommando hinzugefügt. Auf diese Weise lässt sich etwas prägnanter formulieren.
 +
 
 +
'''Beispiele'''
  
 
  #cmd_clear3
 
  #cmd_clear3
 +
#cmd_clear #grd_add  i=grid  f_logtext="Kunde angerufen und nicht erreicht."
  
 
==#cmd_clearall==
 
==#cmd_clearall==
Zeile 174: Zeile 186:
  
 
*ber - wenn Y, werden die Zeilenumbrüche innerhalb von Feldern durch Leerzeichen ersetzt. Die Felder müssen dabei in doppelten Anführungszeichen eingeschlossen sein.
 
*ber - wenn Y, werden die Zeilenumbrüche innerhalb von Feldern durch Leerzeichen ersetzt. Die Felder müssen dabei in doppelten Anführungszeichen eingeschlossen sein.
 +
* e ("encoding") - Encoding der zu öffnenden Datei, zulässig sind ''ansi'', ''ascii'', ''utf7'', ''utf8'', ''unicode'' und ''bigendianunicode''. Bei leerem oder nicht gesetzten Parameter wird das Default-Encoding verwendet (Bei Windows ansi, sonst utf8).
 
*fn - ("Filename") Dateiname der CSV-Datei
 
*fn - ("Filename") Dateiname der CSV-Datei
 +
*hhr ("has header row") - Wenn Y, ist die erste Zeile der CSV-Datei eine Überschriften-Zeile; für diese wird das in er spezifizierten Kommando nicht ausgeführt, dafür können Spaltenbezeichner für den Zugriff auf die einzelnen Spalten verwendet werden. Groß- und Kleinschreibung ist unerheblich. Muss bereits hier gesetzt werden, wenn mit $CSV_LINE auf den Header zugegriffen werden soll, bevor #csv_line ausgeführt wird.
 
*txt ("Text") - alternativ zum Dateinamen fn die Nummer eines Textes, der als CSV-Datei verwendet werden soll.
 
*txt ("Text") - alternativ zum Dateinamen fn die Nummer eines Textes, der als CSV-Datei verwendet werden soll.
  
Zeile 190: Zeile 204:
  
 
*er ("each row") - Kommando, das für jede Zeile der CSV-Datei ausgeführt wird.  
 
*er ("each row") - Kommando, das für jede Zeile der CSV-Datei ausgeführt wird.  
*ert ("each row transaction") - Für jede Ausführung des in er spezifizierten Kommandos wird eine eigene Datenbank-Transaktion ausgeführt.
+
*ert ("each row transaction") - Für jede Ausführung des in er spezifizierten Kommandos wird eine eigene Datenbank-Transaktion ausgeführt, Funktionen werden ersetzt
*hhr ("has header row") - Wenn Y, ist die erste Zeile der CSV-Datei eine Überschriften-Zeile; für diese wird das in er spezifizierten Kommando nicht ausgeführt, dafür können Spaltenbezeichner für den Zugriff auf die einzelnen Spalten verwendet werden.
+
*hhr ("has header row") - Wenn Y, ist die erste Zeile der CSV-Datei eine Überschriften-Zeile; für diese wird das in er spezifizierten Kommando nicht ausgeführt, dafür können Spaltenbezeichner für den Zugriff auf die einzelnen Spalten verwendet werden. Groß- und Kleinschreibung ist unerheblich.
*m ("maximum") - Maximale Anzahl der Zeilen, die verarbeitet wird. Wird gerne bei der Entwicklung verwendet, um die Bearbeitungsgeschwindigkeit zu erhöhen.
+
*m ("maximum") - Maximale Anzahl der Zeilen, die verarbeitet wird. Wird gerne bei der Entwicklung verwendet, um die Bearbeitungsgeschwindigkeit zu erhöhen. Funktionen werden ersetzt
*sep ("separator") - Trennzeichen zwichen den Spalten, default ist das Semikolon
+
*sep ("separator") - Trennzeichen zwichen den Spalten, default ist das Semikolon, Funktionen werden ersetzt
 +
*trim - Wenn Y, dann werden in jeder Zelle führende und nachhängende Leerzeichen entfernt; default N, Funktionen werden ersetzt
  
 
'''Beispiel'''
 
'''Beispiel'''
  
 
  #csv_line  er=test_csv_line  hhr=Y  m=3
 
  #csv_line  er=test_csv_line  hhr=Y  m=3
 +
 +
==#csv_check==
 +
 +
<nowiki>#csv_check prüft die CSV-Datei</nowiki>
 +
 +
'''Parameter'''
 +
 +
*cnt ("count") - Anzahl der Header-Einträge, die geprüft wird; Funktionen werden ersetzt
 +
*h1, h2... ("header") - Eintrag im Header, der auf existenz geprüft wird; Groß und Kleinschreibung ist unerheblich, Funktionen werden ersetzt.
 +
*n ("name" / "number") - Name der Variable oder Nummer des Values, in die/den das Ergebnis (Y oder N) geschrieben wird; Funktionen werden ersetzt
 +
*res ("result") - Name der Variable oder Nummer des Values, in die/den der Ergebnistext geschrieben wird; Funktionen werden ersetzt
 +
*sep ("separator") - Trennzeichen zwischen den einzelnen Spalten; Funktionen werden ersetzt
 +
*y - Typ der Prüfung; Funktionen werden ersetzt, default header
 +
** header - Prüft die Existenz von Spaltennamen im Header. Die zu prüfenden Spaltennamen werden als h1, h2... übergeben, cnt ist entsprechend zu setzen. Wenn alle geprüften Spaltennamen vorhanden sind, wird Y zurück gegeben, ansonsten N. Die fehlenden Spaltennamen werden als Ergebnistext zurück gegeben.
 +
 +
'''Beispiel'''
 +
 +
#csv_open  fn=C:\temp\mad\done\MTF3108_ET2607_selektion.CSV
 +
#csv_check  n=1  res=2  cnt=3  h1=eins  h2=zwei  h3=drei
 +
#coutl $VAL(1) - $VAL(2)
  
 
==#csv_paste==
 
==#csv_paste==
Zeile 231: Zeile 266:
 
* ern - ("each row no") Das Kommando, das für jede Zeile der Datenmenge aufgerufen wird. Funktionen werden nicht ersetzt. Wenn ''ern'' einen Wert hat, bleibt ''er'' unberücksichtigt. Üblicherweise wird ''er'' verwendet.
 
* ern - ("each row no") Das Kommando, das für jede Zeile der Datenmenge aufgerufen wird. Funktionen werden nicht ersetzt. Wenn ''ern'' einen Wert hat, bleibt ''er'' unberücksichtigt. Üblicherweise wird ''er'' verwendet.
 
* ert ("each row transaction") - Für jede Ausführung des in er spezifizierten Kommandos wird eine eigene Datenbank-Transaktion ausgeführt.
 
* ert ("each row transaction") - Für jede Ausführung des in er spezifizierten Kommandos wird eine eigene Datenbank-Transaktion ausgeführt.
 +
* fr ("first row") - Wenn dieser Parameter einen Wert hat, dann muss die kopierte CSV-Datei in der ersten Zeile auch diesen Wert haben, oder die Aktion wird abgebrochen; Funktionen werden ersetzt
 
* hhr ("has header row") - Wenn Y, ist die erste Zeile der CSV-Datei eine Überschriften-Zeile; für diese wird das in er spezifizierten Kommando nicht ausgeführt, dafür können Spaltenbezeichner für den Zugriff auf die einzelnen Spalten verwendet werden.
 
* hhr ("has header row") - Wenn Y, ist die erste Zeile der CSV-Datei eine Überschriften-Zeile; für diese wird das in er spezifizierten Kommando nicht ausgeführt, dafür können Spaltenbezeichner für den Zugriff auf die einzelnen Spalten verwendet werden.
 
* mrs ("multi row start") - Erste Spalte für den Multi-Row-Bereich
 
* mrs ("multi row start") - Erste Spalte für den Multi-Row-Bereich
 
* sep ("separator") - Trennzeichen zwichen den Spalten, default ist das Tabulatorzeichen
 
* sep ("separator") - Trennzeichen zwichen den Spalten, default ist das Tabulatorzeichen
 +
* trim - Wenn Y, dann werden in jeder Zelle führende und nachhängende Leerzeichen entfernt; default N, Funktionen werden ersetzt
 
* y - Typ; default s
 
* y - Typ; default s
 
** m - multi; siehe Abschnitt Multi-Row
 
** m - multi; siehe Abschnitt Multi-Row
Zeile 253: Zeile 290:
 
# Nummer der CSV-Datei
 
# Nummer der CSV-Datei
 
# Name der Spalte oder 0-relative Spaltennummer. Name der Spalte setzt voraus, dass bei #csv_line der Parameter hhr gleich Y ist.
 
# Name der Spalte oder 0-relative Spaltennummer. Name der Spalte setzt voraus, dass bei #csv_line der Parameter hhr gleich Y ist.
 +
# optional: Stelle der Zeichens, ab dem der Inhalt des CSV-Feldes zurück gegeben wird
 +
# optional: Anzahl der Zeichen, die maximal zurück gegeben werden; wird meist dafür verwendet, damit die maximale Länge von Datenbankfeldern nicht überschritten wird.
  
'''Beispiel'''
+
'''Beispiele'''
  
 
  #setvar  n=test  z=$CSV(1,0)
 
  #setvar  n=test  z=$CSV(1,0)
Zeile 260: Zeile 299:
 
Hier im Beispiel wird in der ersten CSV-Datei (#csv_open) auf die erste Spalte (0, da 0-relativ) zugegriffen.
 
Hier im Beispiel wird in der ersten CSV-Datei (#csv_open) auf die erste Spalte (0, da 0-relativ) zugegriffen.
  
=Text=
+
#setvar  n=test  z=$CSV(1,0,1,30)
  
==#text==
+
Wie oben, nur werden nur die ersten 30 Zeichen zurück gegeben
  
<nowiki>#text fügt dem Text eine Zeile hinzu</nowiki>
+
==$CSV_LINE()==
  
Es handelt sich dabei um eine nummerierte Prozedur. #text fügt dem ersten Text eine Zeile hinzu, #text2 fügt dem zweiten Text eine Zeile hinzu, und so weiter.
+
<nowiki>$CSV_LINE() Gibt eine ganze Zeile einer CSV-Datei zurück</nowiki>
  
 
'''Parameter'''
 
'''Parameter'''
  
<nowiki>#text hat keine benannten Parameter. Die ganze Zeile nach dem #text und dem trennenden Leerzeichen wird hinzugefügt.</nowiki>
+
# Nummer der CSV-Datei
 +
# Name der Zeile: header gibt die Header-Zeile zurück, current die aktuelle Zeile in #csv_line
  
Funktionen werden ersetzt.
 
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  #text Zeile 1
+
Die Funktion $CSV_LINE wird insbesondere dafür verwendet, um CSV-Dateien mit Daten zu ergänzen. Hier im Beispiel wird jede Zeile mit einer GUID ergänzt.
  #text Zeile 2
+
 
  #text Und jetzt noch eine GUID: $GUID()
+
#cmd_clear #text $CSV_LINE(1,current)$GUID();
  #text Der folgende Text kommt in Großbuchstaben: $UPP(hello world)
+
 +
#csv_open  fn=c:\temp\ex.csv  hhr=Y
 +
#text_clear $CSV_LINE(1,header)guid;
 +
#csv_line  er=1  hhr=Y
 +
 +
#text_save  fn=c:\temp\ex2.csv
 +
 
 +
Nach dem Öffnen der bestehenden CSV-Datei (es muss hier bereits hhr gesetzt werden) wird zunächst der Header in Text 1 eingefügt, ergänzt um die Spalte ''guid'' und das abschließende Semikolon. Danach gehen wir mit #csv_line durch alle Zeile, fügen diese komplett in Text 1 ein und hängen eine GUID hinten dran. Danach wird die Datei gespeichert.
 +
 
 +
=Text=
 +
 
 +
==#text==
 +
 
 +
<nowiki>#text fügt dem Text eine Zeile hinzu</nowiki>
 +
 
 +
Es handelt sich dabei um eine nummerierte Prozedur. #text fügt dem ersten Text eine Zeile hinzu, #text2 fügt dem zweiten Text eine Zeile hinzu, und so weiter.
 +
 
 +
'''Parameter'''
 +
 
 +
<nowiki>#text hat keine benannten Parameter. Die ganze Zeile nach dem #text und dem trennenden Leerzeichen wird hinzugefügt.</nowiki>
 +
 
 +
Funktionen werden ersetzt.
 +
 
 +
'''Beispiel'''
 +
 
 +
  #text Zeile 1
 +
  #text Zeile 2
 +
  #text Und jetzt noch eine GUID: $GUID()
 +
  #text Der folgende Text kommt in Großbuchstaben: $UPP(hello world)
  
 
==#textn==
 
==#textn==
Zeile 307: Zeile 374:
  
 
(keine)
 
(keine)
 +
 +
Folgen dem #text_clear Zeichen, so werden die dem gerade gelöschten Text hinzugefügt. Auf diese Weise lässt sich etwas prägnanter formulieren.
  
 
'''Beispiel'''
 
'''Beispiel'''
Zeile 314: Zeile 383:
 
  #text7 Zeile 2
 
  #text7 Zeile 2
  
Das vorangestellt #text_clear stellt sicher, dass Text7 leer ist.
+
Das vorangestellt #text_clear stellt sicher, dass Text7 leer ist. Alternativ könnte man formulieren:
 +
 
 +
#text_clear7 Zeile 1
 +
#text7 Zeile 2
  
 
==#text_save==
 
==#text_save==
Zeile 370: Zeile 442:
 
  #text_props  srt=Y  dup=ign
 
  #text_props  srt=Y  dup=ign
  
==$TEXT()==
+
==#text_set==
  
Mit der Funktion $TEXT() wird auf den Inhalt des Textes zugegriffen.
+
<nowiki>#text_set setzt eine bestimmte Zeile eines Textes</nowiki>
 +
 
 +
Es handelt sich dabei um eine nummerierte Prozedur. #text_set bezieht sich auf den ersten Text, #text_set2 bezieht sich auf den zweiten Text, und so weiter.
  
 
'''Parameter'''
 
'''Parameter'''
  
# Nummer des Textes
+
* i ("index") - 0-relativer Index der Zeile, die geschrieben werden soll. Mit ''last'' kann die letzte Zeile geschrieben werden, mit ''all'' werden alle Zeilen ersetzt, das wird dann gebraucht, wenn mehrzeiliger Text zugewiesen werden soll; Funktionen werden ersetzt
 +
* z - Text, der geschrieben wird; Funktionen werden ersetzt
  
'''Beispiel'''
+
'''Beispiele'''
 
 
#text Zeile 1
 
#text Zeile 2
 
#text Zeile 3
 
#message  c=$TEXT(1)
 
  
=Code=
+
#text_set  i=2  z="dritte Zeile"
 +
#text_set  i=last  z="letzte Zeile"
 +
#text_set  i=all  z=$CLIPBOARD()
  
Grundsätzlich gilt in BAL: Eine Prozedur - eine Zeile.
+
==#text_sort==
 
 
Bei vielen und/oder langen Parametern führt das zu recht langen Code-Zeilen und zu Unübersichtlichkeit. Hier können nun Teile der Parameter mit #code in weitere Zeile ausgelagert werden, deren Inhalt dann mit $CODE$ oder $CODE$ der eigentlichen Code-Zeile hinzugefügt wird.
 
  
==#code==
+
<nowiki>#text_sort sortiert einen Text</nowiki>
  
Fügt Text dem Code-Speicher hinzu.
+
Es handelt sich dabei um eine nummerierte Prozedur. #text_sort bezieht sich auf den ersten Text, #text_sort2 bezieht sich auf den zweiten Text, und so weiter.
  
 
'''Parameter'''
 
'''Parameter'''
  
<nowiki>#code hat keine benannten Parameter. Die ganze Zeile nach dem #code und dem trennenden Leerzeichen wird hinzugefügt.</nowiki>
+
* y - Typ, default alpha, Funktionen werden ersetzt
 +
** alpha - sortiert alphanumerisch
 +
** inv - invertiert die gegebene Reihenfolge
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  #code cnt=2
+
  #val_set  n=1  z=",OU=2nd_Level_T1,OU=Kundenservice,OU=Benutzer,OU=Testtours,OU=Travel"
  #code fn1=G:\pics\pic5d68865cdaba62_62767562.jpg
+
#text_clear
  #code fn2=G:\pics\pic5d913c48682128_67979256.jpg
+
  #text_dissect  z=$VAL(1)  sep=",OU="
  #email_send   from=test@****.de   to=info@*****************.de   bcc=info@*****.de   subject=Testmail   text=$TEXT(1)   $CODE$
+
  #coutl  $TEXT(1)
 +
  #text_sort   y=inv
 +
#text_compose   n=1   sep=.
 +
#val_set   n=1   z=tt.$VAL(1)
 +
#coutl $VAL(1)
  
==$CODE$ / $CODEN$==
+
Ergebnis ist:
 +
2nd_Level_T1
 +
Kundenservice
 +
Benutzer
 +
Testtours
 +
tt.Testtours.Benutzer.Kundenservice.2nd_Level_T1.
  
<nowiki>$CODE$ und $CODEN$ sind keine Funktionen, auch wenn sie auf den ersten Blick ähnlich aussehen. Sie haben keine Parameter und auch keine Klammern, dafür ein abschließendes $.</nowiki>
+
==#text_dissect==
  
Beide Anweisungen fügen den Code-Speicher der jeweiligen Zeile hinzu. $CODE$ löscht danach den Code-Speicher, $CODEN$ tut das nicht, so dass dieselben Parameter wiederholt eingefügt werden können (beim letzten Einfügen sollte dann $CODE$ verwendet werden).
+
<nowiki>#text_dissect zerteilt einen String anhand einer vorgegebenen Trennzeichenfolge und fügt das Ergebnis dem betreffenden Text hinzu. Gegebenenfalls muss der Text vorher mit #text_clear geleert werden.</nowiki>
  
=Separierte Zeile=
+
Es handelt sich dabei um eine nummerierte Prozedur. #text_dissect bezieht sich auf den ersten Text, #text_dissect bezieht sich auf den zweiten Text, und so weiter.
  
Eine separierte Zeile ist eine Textzeile, die mehrere gleichartige Werte enthält, die durch Trennzeichen getrennt sind.
+
'''Parameter'''
  
Beispiel:
+
* cnd - ("condition") Die Prozedur wird nur dann ausgeführt, wenn das Statement in cnd Y ergibt. Default ist Y, Funktionen werden ersetzt
 +
* ls ("last separator") - wenn Y, wird die sep-Zeichenfolge noch mal dem String angehängt; default N, Funktionen werden ersetzt
 +
* sep ("separator") - Zeichenfolge, anhand der String zerteilt wird; Funktionen werden ersetzt
 +
* z - String, der zerlegt wird; Funktionen werden ersetzt
  
3244,4465,7763,4536,4356,7777
+
'''Beispiel'''
  
Solche Zeilen können mit #sepline aufgetrennt werden.
+
Siehe #text_sort
  
==#sepline==
+
==#text_compose==
  
Trennt eine separierte Zeile auf und führt für jeden Wert das mit er angegebene Kommando aus.
+
<nowiki>#text_compose setzt einen Text mithilfe eines Trennzeichens zu einem String zusammen</nowiki>
  
Es handelt sich dabei um eine nummerierte Prozedur (#sepline, #sepline2...)
+
Es handelt sich dabei um eine nummerierte Prozedur. #text_compose bezieht sich auf den ersten Text, #text_compose bezieht sich auf den zweiten Text, und so weiter.
  
 
'''Parameter'''
 
'''Parameter'''
  
* er ("each row") - Das Kommando, das für jeden Wert der separierten Zeile aufgerufen wird. Funktionen werden ersetzt.
+
* cnd - ("condition") Die Prozedur wird nur dann ausgeführt, wenn das Statement in cnd Y ergibt. Default ist Y, Funktionen werden ersetzt
* ern ("each row no") - Das Kommando, das für jeden Wert der separierten Zeile aufgerufen wird. Funktionen werden nicht ersetzt. Wenn ''ern'' einen Wert hat, bleibt ''er'' unberücksichtigt. Üblicherweise wird ''er'' verwendet.
+
* ls ("last separator") - Wenn Y, wird die Trennzeichenfolge auch noch mal am Ende des Strings eingefügt; default N, Funktionen werden ersetzt
* ert ("each row transaction") - Wenn Y, wird für jeden Wert der separierten Zeile eine eigene Transaktion gestartet und nach der Abarbeitung des Kommandos wieder geschlossen.
+
* n - Nummer des Values oder Name der Variable, in welche der String geschrieben wird; Funktionen werden ersetzt
* m ("maximum") - Es wird maximal für die Anzahl der angegebenen Werte das in er angegebene Kommando ausgeführt. Dieser Parameter wird häufig dazu verwendet, während der Entwicklung mit einer geringen Zahl von Datensätzen zu arbeiten; Funktionen werden ersetzt.
+
* sep ("separator") - Trennzeichenfolge, die beim Zusammenfügen des Textes verwendet wird; Funktionen werden ersetzt
* sep ("separator") - Das oder die Trennzeichen; default ist das Semikolon.
 
* z - Der Inhalt der separierten Zeile; Funktionen werden ersetzt.
 
  
 
'''Beispiel'''
 
'''Beispiel'''
  
#cmd #cout  c=$SEPLINE(1)
+
Siehe #text_sort
#sepline z=3244,4465,7763,4536,4356,7777  sep=,  er=1
+
 
 +
==#text_act==
  
==$SEPLINE()==
+
<nowiki>#text_act bearbeitet einen Text</nowiki>
  
Greift auf den einzelnen Wert einer mit #sepline getrennten Zeile zu.
+
Es handelt sich dabei um eine nummerierte Prozedur. #text_act bezieht sich auf den ersten Text, #text_act bezieht sich auf den zweiten Text, und so weiter.
  
 
'''Parameter'''
 
'''Parameter'''
 
+
* c ("caption") - Text der Zeile, die bei insert eingefügt werden soll; Funktionen werden ersetzt
# Nummer der separierten Zeile
+
* cnd - ("condition") Die Prozedur wird nur dann ausgeführt, wenn das Statement in cnd Y ergibt. Default ist Y, Funktionen werden ersetzt
 +
* cu ("current") - 0-relative Zeilennummer der Operation; default 0, Funktionen werden ersetzt
 +
* ne ("new") - 0-relative Zeilennummer als Ziel bei move; default 0, Funktionen werden ersetzt
 +
* y - Typ der Operation; Funktionen werden ersetzt
 +
** delete - Löscht die Zeile an Position cu ("current")
 +
** insert - Fügt den Text c an der Position cu ("current") ein
 +
** move - verschiebt die Zeile cu ("current") nach Zeile ne ("new")
  
 
'''Beispiel'''
 
'''Beispiel'''
 +
#text_act  y=move  cu=0
  
#cmd #cout  c=$SEPLINE(3)
+
==#text_loop==
#sepline3 z=3244;4465;7763;4536;4356;7777    er=1
 
  
=User und Rechte=
+
<nowiki>#text_loop geht durch die Zeilen eines Textes und ruft für jede Zeile ''er'' auf</nowiki>
  
Aus Gründen der Übersichtlichkeit ist die Rechtevergabe zweistufig:
+
Es handelt sich dabei um eine nummerierte Prozedur. #text_loop  bezieht sich auf den ersten Text, #text_loop2  bezieht sich auf den zweiten Text, und so weiter.
  
# Es werden (meist am Anfang eines Primär-Kommandos) Rechte-Definitionen erstellt, die einer oder mehreren Benutzergruppen Rechte (lesen oder lesen und schreiben) zuweisen. Die Rechte werden dabei implizit auch allen Untergruppen der angegebenen Benutzergruppe erteilt (Zum Beispiel: Rechte der Gruppe ''user'' hat auch implizit die Gruppe ''user.admin'').
+
'''Parameter'''
# Dem Parameter r verschiedener Prozeduren kann dann eine Rechte-Definition zugewiesen werden.
 
  
Den Parameter r als Rechte-Definition berücksichtigen die folgenden Prozeduren:
+
* cnd - ("condition") Die Prozedur wird nur dann ausgeführt, wenn das Statement in cnd Y ergibt. Default ist Y, Funktionen werden ersetzt
 +
* db - ("database") Name der Datenbank, auf die sich ert bezieht
 +
* er - ("each row") Das Kommando, das für jede Zeile der Datenmenge aufgerufen wird. Funktionen werden ersetzt.
 +
* ern - ("each row no") Das Kommando, das für jede Zeile der Datenmenge aufgerufen wird. Funktionen werden nicht ersetzt. Wenn ''ern'' einen Wert hat, bleibt ''er'' unberücksichtigt. Üblicherweise wird ''er'' verwendet.
 +
* ert - ("each row transaction") Wenn Y, wird für jede Zeile der Datenmenge eine eigene Transaktion gestartet und nach der Abarbeitung des Kommandos wieder geschlossen.
 +
* m - ("maximum") Es wird maximal für die Anzahl der angegebenen Zeilen das in er angegebene Kommando ausgeführt. Dieser Parameter wird häufig dazu verwendet, während der Entwicklung mit einer geringen Zahl von Datensätzen zu arbeiten.
 +
* nex ("no exception") - Wenn Y, wird bei Exceptions in er nicht abgebrochen, sondern mit dem nächsten Datensatz fortgesetzt. Default N, Funktionen werden ersetzt.
 +
* n - Name der Variable, in welche die 0-relative Schleifenvariable geschrieben wird. (Es würde auch in einen Value geschrieben, wenn es sich um eine Nummer handelt, das ergibt in der Praxis aber meist nicht viel Sinn) Funktionen werden ersetzt
  
* #frm
+
'''Beispiel'''
* Buttons (#btn, #btns_btn)
 
* Alle Segmente (#text_seg, #memo_seg, #btns_seg, vl_seg, #grd_seg, #xgrd_seg)
 
* Tree (#tree_add, #tree_fill, #tree_fillsql, Lese-Recht reicht)
 
* Grid-Spalten (#grd_col, #xgrd_col)
 
* #vl_line (für die komplette Zeile (r) und die einzelne Zelle (r1, r2, r3...))
 
  
Wo der Parameter r nicht gesetzt ist, wird die Rechte-Definition der Formulars verwendet.
+
#text_clear eins
 +
#text zwei
 +
#text drei
 +
 +
#cmd_clear #coutl - $TEXT(1,$VAR(eins))
 +
#text_loop  er=1  n=eins
  
==#rights==
+
==#tvl_add==
  
Setzt eine Rechte-Definition im betreffenden Kommando.
+
Addiert dem Wert in einer Text-Valueliste einen Wert hinzu. Es handelt sich dabei um eine nummerierte Prozedur: #tvl_add arbeitet mit Text 1, #tvl_add2 mit Text 2 und so weiter.
  
 
'''Parameter'''
 
'''Parameter'''
  
* n ("name") - Name der Rechte-Definition; default ist ''frm'', also dsa Default-Recht für das Formular.
+
* cnd ("condition") - Die Prozedur wird nur dann ausgeführt, wenn das Statement in cnd Y ergibt. Default ist Y, Funktionen werden ersetzt
* r_ ("right") - Prefix für die Benutzergruppe. Für die Rechte-Definition sind die folgenden Werte zulässig
+
* n ("name") - Name der Zeile, der ein Wert hinzugefügt wird; Funktionen werden ersetzt.
** n ("no") - kein Recht
+
* y - Typ der Operation, Funktionen werden ersetzt, default text
** r ("read") - nur lesen
+
** curr - Es wird eine Fixkomma-Addition vorgenommen
** w ("write") - lesen und schreiben
+
** date - Es wird dem Datum eine Anzahl von Tagen hinzugefügt
 +
** datetime - Es wird dem Datum eine Anzahl von Tagen hinzugefügt, Ergebnis als datetime
 +
** int - Es wird eine Ganzzahl-Addition vorgenommen
 +
** text - Der Wert wird als Text hinzugefügt
 +
* z - Der Wert, der hinzugefügt wird
 +
 
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  #rights n=frm   r_user=r   r_user.admin=w
+
  #text eins=1
 +
  #text zwei=2
 +
#text drei=3
 +
#tvl_add  y=int   n=zwei   z=1
 +
#coutl $TEXT(1)
  
Setzt für alle User das Lese-Recht und für Administratoren das Lese- und Schreibrecht.
+
==$TEXT()==
  
==#rights_clear==
+
Mit der Funktion $TEXT() wird auf den Inhalt des Textes zugegriffen.
 
 
Löscht alle Rechte-Definitionen im betreffenden Kommando
 
  
 
'''Parameter'''
 
'''Parameter'''
  
(keine)
+
# Nummer des Textes
 +
# optional Zeile des Textes (0-relativ). Wenn es keinen zweiten Parameter gibt, wird der komplette Text zurück gegeben. Alternativ als zweiter Parameter eine Sonderfunktion:
 +
## cnt / count - Gibt die Anzahl der Zeilen zurück
 +
## last - Gibt die letzte Zeile zurück
 +
## ix - Gibt die Position des Textes im dritten Parameter zurück
 +
## as_line - Gibt den Text als eine Zeile zurück, Zeilenumbrüche werden durch den dritten Parameter ersetzt
 +
# optional in abhängigkeit vom zweiten Paremeter
 +
## wenn zweiter Parameter ix: Textzeile, nach der mit ix gesucht wird
 +
## wenn zweiter Parameter as_line: Zeichenfolge, mit der die Zeilenumbrüche ersetzt werden
  
'''Beispiel'''
+
'''Beispiele'''
  
  #rights_clear
+
  #text Zeile 1
 +
#text Zeile 2
 +
#text Zeile 3
 +
#message  c=$TEXT(1)
  
==$USERID()==
+
#code url=$TEXT(1,as_line,&)
  
Die ID des angemeldeten Users
+
=Code=
  
'''Parameter'''
+
Grundsätzlich gilt in BAL: Eine Prozedur - eine Zeile.
  
(keine)
+
Bei vielen und/oder langen Parametern führt das zu recht langen Code-Zeilen und zu Unübersichtlichkeit. Hier können nun Teile der Parameter mit #code in weitere Zeile ausgelagert werden, deren Inhalt dann mit $CODE$ oder $CODE$ der eigentlichen Code-Zeile hinzugefügt wird.
  
'''Beispiel'''
+
==#code==
  
#sql_exec  kusr=$USERID()
+
Fügt Text dem Code-Speicher hinzu.
  
==$RIGHTUSERID()==
+
'''Parameter'''
  
Administratoren können andere User einstellen (Userliste links unten im BAF-Client), vor allem um deren Rechte zu prüfen. Die UserID dieses ausgewählten Users kann mit der Funktion $RIGHTUSERID() ermittelt werden.
+
<nowiki>#code hat keine benannten Parameter. Die ganze Zeile nach dem #code und dem trennenden Leerzeichen wird hinzugefügt.</nowiki>
  
In fast allen Fällen gilt der folgende Grundsatz: Lesende Operationen mit $RIGHTUSERID(), schreibende Operationen mit $USERID().
+
'''Beispiel'''
  
'''Parameter'''
+
#code cnt=2
 +
#code fn1=G:\pics\pic5d68865cdaba62_62767562.jpg
 +
#code fn2=G:\pics\pic5d913c48682128_67979256.jpg
 +
#email_send  from=test@****.de  to=info@*****************.de  bcc=info@*****.de  subject=Testmail  text=$TEXT(1)  $CODE$
  
(keine)
+
==$CODE$ / $CODEN$==
  
'''Beispiel'''
+
<nowiki>$CODE$ und $CODEN$ sind keine Funktionen, auch wenn sie auf den ersten Blick ähnlich aussehen. Sie haben keine Parameter und auch keine Klammern, dafür ein abschließendes $.</nowiki>
  
#sql_open  kusr=$RIGHTUSERID()
+
Beide Anweisungen fügen den Code-Speicher der jeweiligen Zeile hinzu. $CODE$ löscht danach den Code-Speicher, $CODEN$ tut das nicht, so dass dieselben Parameter wiederholt eingefügt werden können (beim letzten Einfügen sollte dann $CODE$ verwendet werden).
  
==$ADM()==
+
=Separierte Zeile=
  
Gibt den ersten Parameter (oder Y) zurück, wenn der angemeldete User Administrator-Rechte hat, andernfalls den zweiten Parameter (oder N).
+
Eine separierte Zeile ist eine Textzeile, die mehrere gleichartige Werte enthält, die durch Trennzeichen getrennt sind.
  
'''Parameter'''
+
Beispiel:
  
# Wert, der zurückgegeben wird, wenn der angemeldete User Administrator-Rechte hat; sofern kein Wert angegeben ist, Y
+
3244,4465,7763,4536,4356,7777
# Wert, der zurückgegeben wird, wenn der angemeldete User keine Administrator-Rechte hat; sofern kein Wert angegeben ist, N
 
  
(keine)
+
Solche Zeilen können mit #sepline aufgetrennt werden.
  
'''Beispiel'''
+
==#sepline==
  
~ $ADM()
+
Trennt eine separierte Zeile auf und führt für jeden Wert das mit er angegebene Kommando aus.
  
==$RADM()==
+
Es handelt sich dabei um eine nummerierte Prozedur (#sepline, #sepline2...)
 
 
Gibt den ersten Parameter (oder Y) zurück, wenn der ausgewählte User Administrator-Rechte hat, andernfalls den zweiten Parameter (oder N).
 
  
 
'''Parameter'''
 
'''Parameter'''
  
# Wert, der zurückgegeben wird, wenn der ausgewählte User Administrator-Rechte hat; sofern kein Wert angegeben ist, Y
+
* er ("each row") - Das Kommando, das für jeden Wert der separierten Zeile aufgerufen wird. Funktionen werden ersetzt.
# Wert, der zurückgegeben wird, wenn der ausgewählte User keine Administrator-Rechte hat; sofern kein Wert angegeben ist, N
+
* ern ("each row no") - Das Kommando, das für jeden Wert der separierten Zeile aufgerufen wird. Funktionen werden nicht ersetzt. Wenn ''ern'' einen Wert hat, bleibt ''er'' unberücksichtigt. Üblicherweise wird ''er'' verwendet.
 +
* ert ("each row transaction") - Wenn Y, wird für jeden Wert der separierten Zeile eine eigene Transaktion gestartet und nach der Abarbeitung des Kommandos wieder geschlossen.
 +
* m ("maximum") - Es wird maximal für die Anzahl der angegebenen Werte das in er angegebene Kommando ausgeführt. Dieser Parameter wird häufig dazu verwendet, während der Entwicklung mit einer geringen Zahl von Datensätzen zu arbeiten; Funktionen werden ersetzt.
 +
* sep ("separator") - Das oder die Trennzeichen; default ist das Semikolon.
 +
* z - Der Inhalt der separierten Zeile; Funktionen werden ersetzt.
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  ~ $RADM()
+
  #cmd #cout  c=$SEPLINE(1)
 +
#sepline z=3244,4465,7763,4536,4356,7777  sep=,  er=1
  
=Ausführen=
+
==$SEPLINE()==
  
==#exec==
+
Greift auf den einzelnen Wert einer mit #sepline getrennten Zeile zu.
 
 
Führt ein anderes Kommando aus
 
  
 
'''Parameter'''
 
'''Parameter'''
  
* #cmd ("command") - Names des (Primär- oder Sub-) Kommandos, das ausgeführt werden soll.
+
# Nummer der separierten Zeile
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  #exec   cmd="xtodo_page_add(XU,$PVAL(vl,user_user_id),$PVAL(vl,login),$PVAL(vl,shortname)$CHR(crlf)$PVAL(vl,firstname) $PVAL(vl,lastname))"
+
  #cmd #cout   c=$SEPLINE(3)
 +
#sepline3 z=3244;4465;7763;4536;4356;7777    er=1
  
==#batchexec==
+
=User und Rechte=
  
Speichert den Text n in der Datei batch.bat und führt diese aus.
+
Aus Gründen der Übersichtlichkeit ist die Rechtevergabe zweistufig:
  
'''Parameter'''
+
# Es werden (meist am Anfang eines Primär-Kommandos) Rechte-Definitionen erstellt, die einer oder mehreren Benutzergruppen Rechte (lesen oder lesen und schreiben) zuweisen. Die Rechte werden dabei implizit auch allen Untergruppen der angegebenen Benutzergruppe erteilt (Zum Beispiel: Rechte der Gruppe ''user'' hat auch implizit die Gruppe ''user.admin'').
 +
# Dem Parameter r verschiedener Prozeduren kann dann eine Rechte-Definition zugewiesen werden.
  
* clr ("clear") - Wenn Y, wird der Text nach Ausführung des Batch-Datei gelöscht; Default Y; Funktionen werden ersetzt;
+
Den Parameter r als Rechte-Definition berücksichtigen die folgenden Prozeduren:
* n ("number") - Nummer des Textes; der mit #text gespeicherte Text hat die Nummer 1
 
  
'''Beispiel'''
+
* #frm
 +
* Buttons (#btn, #btns_btn)
 +
* Alle Segmente (#text_seg, #memo_seg, #btns_seg, vl_seg, #grd_seg, #xgrd_seg)
 +
* Tree (#tree_add, #tree_fill, #tree_fillsql, Lese-Recht reicht)
 +
* Grid-Spalten (#grd_col, #xgrd_col)
 +
* #vl_line (für die komplette Zeile (r) und die einzelne Zelle (r1, r2, r3...))
  
#batchexec  n=1
+
Wo der Parameter r nicht gesetzt ist, wird die Rechte-Definition der Formulars verwendet.
  
==#file_open==
+
==#rights==
  
Öffnet eine Datei (oder auch eine Webseite)
+
Setzt eine Rechte-Definition im betreffenden Kommando.
  
 
'''Parameter'''
 
'''Parameter'''
  
* fn ("FileName") - Name der Datei oder die URL der Webseite
+
* n ("name") - Name der Rechte-Definition; default ist ''frm'', also dsa Default-Recht für das Formular.
 +
* r_ ("right") - Prefix für die Benutzergruppe. Für die Rechte-Definition sind die folgenden Werte zulässig
 +
** n ("no") - kein Recht
 +
** r ("read") - nur lesen
 +
** w ("write") - lesen und schreiben
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  #file_open fn=c:\temp\test.csv
+
  #rights n=frm  r_user=r  r_user.admin=w
#file_open  fn=https://www.google.de
 
  
==#loop==
+
Setzt für alle User das Lese-Recht und für Administratoren das Lese- und Schreibrecht.
 +
 
 +
==#rights_clear==
 +
 
 +
Löscht alle Rechte-Definitionen im betreffenden Kommando.
  
BAL kennt keine Schleifen als Sprachelement. Um Schleifen mit einer fest Schleifenzahl auszuführen, wird die Przedur #loop verwendet.
+
(Wird in der Praxis selten benötigt, weil Kommandos mit leerer Rechte-Definition starten.)
  
 
'''Parameter'''
 
'''Parameter'''
  
* er - ("each row") Das Kommando, das für jede Zeile der Datenmenge aufgerufen wird. Funktionen werden ersetzt.
+
(keine)
* ern - ("each row no") Das Kommando, das für jede Zeile der Datenmenge aufgerufen wird. Funktionen werden nicht ersetzt. Wenn ''ern'' einen Wert hat, bleibt ''er'' unberücksichtigt. Üblicherweise wird ''er'' verwendet.
 
* ert - ("each row transaction") Wenn Y, wird für jede Zeile der Datenmenge eine eigene Transaktion gestartet und nach der Abarbeitung des Kommandos wieder geschlossen.
 
* lf ("loop from") - Anfangswert der Schleifenvariable; Funktionen werden ersetzt.
 
* lt ("loop to") - Endwert der Schleifenvariable; Funktionen werden ersetzt.
 
* n ("name") - Name der Variablen, in der die Schleifenvariable gespeichert wird (damit sie an anderer Stelle gelesen werden kann); Funktionen werden ersetzt.
 
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  #loop  lf=42  lt=1337  er=test_line
+
  #rights_clear
  
==$EXEC==
+
==$USERID()==
  
Führt ein Kommando. Im ausgeführten Kommando kann eine Variable gesetzt werden, die dann als Funktionsergebnis von $EXEC zurückgegeben wird.
+
Die ID des angemeldeten Users
  
 
'''Parameter'''
 
'''Parameter'''
  
# Kommando, das ausgeführt werden soll
+
(keine)
# optional: Der Name der Variablen, in der das Ergebnis steht; default ist ''result''
 
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  #frm  c="test_funkexec"  y=console
+
  #sql_exec   kusr=$USERID()
#cout   c=$EXEC(test_funkexec_line)
 
  
-- test_funkexec_line
+
==$RIGHTUSERID()==
#var_set  n=result  z=42
 
  
=Dateien und Verzeichnisse=
+
Administratoren können andere User einstellen (Userliste links unten im BAF-Client), vor allem um deren Rechte zu prüfen. Die UserID dieses ausgewählten Users kann mit der Funktion $RIGHTUSERID() ermittelt werden.
  
==#dir_force==
+
In fast allen Fällen gilt der folgende Grundsatz: Lesende Operationen mit $RIGHTUSERID(), schreibende Operationen mit $USERID().
 
 
Stellt sicher, dass es den spezifizierten Verzeichnispfad gibt, indem erforderlichenfalls Verzeichnisse angelegt werden.
 
  
 
'''Parameter'''
 
'''Parameter'''
  
* n ("name") - Names des Pfads
+
(keine)
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  #dir_force   n=c:\temp\pdf
+
  #sql_open   kusr=$RIGHTUSERID()
  
==#dir_proc==
+
==$ADM()==
  
Durchsucht ein Verzeichnis nach Dateien, die den angegebenen Kriterien entsprechen, und führt für jede gefundene Datei ''cmd'' aus.
+
Gibt den ersten Parameter (oder Y) zurück, wenn der angemeldete User Administrator-Rechte hat, andernfalls den zweiten Parameter (oder N).
  
 
'''Parameter'''
 
'''Parameter'''
  
* cmd ("command") - Kommando, das für jede gefundene Datei ausgeführt wird
+
# Wert, der zurückgegeben wird, wenn der angemeldete User Administrator-Rechte hat; sofern kein Wert angegeben ist, Y
* dn ("DirectoryName") - Pfad des Verzeichnisses, in dem die Dateien gesucht werden; Funktionen werden ersetzt.
+
# Wert, der zurückgegeben wird, wenn der angemeldete User keine Administrator-Rechte hat; sofern kein Wert angegeben ist, N
* done - Verzeichnis, in das die Dateien nach Abarbeitung verschoben werden (sofern der Parameter nicht leer ist).
+
 
* fn ("filename") - Suchkriterium für den Dateinamen; Funktionen werden ersetzt; Default *
+
(keine)
* n ("name") - Name der Variablen, in welcher der Dateiname der aktuell zu bearbeitenden Datei inklusive Pfad gespeichert wird; Funktionen werden ersetzt; Default dir_proc
 
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  #procdir  dn=c:\temp\in  done=c:\temp\done  fn=*.csv  cmd=importcsv_line
+
  ~ $ADM()
  
==$DIR()==
+
==$RADM()==
  
Ermittelt einen Verzeichnisnamen. Trailing Path Delimiter (\ bei Windows) wird immer angehängt.
+
Gibt den ersten Parameter (oder Y) zurück, wenn der ausgewählte User Administrator-Rechte hat, andernfalls den zweiten Parameter (oder N).
  
 
'''Parameter'''
 
'''Parameter'''
  
# Bezeichnung des Verzeichnisses
+
# Wert, der zurückgegeben wird, wenn der ausgewählte User Administrator-Rechte hat; sofern kein Wert angegeben ist, Y
## appdata - Verzeichnis für Anwendungsdaten des Users
+
# Wert, der zurückgegeben wird, wenn der ausgewählte User keine Administrator-Rechte hat; sofern kein Wert angegeben ist, N
## cappdata - gemeinsames Verzeichnis für Anwendungsdaten aller User
 
## cdoc - gemeinsames Dokumentenverzeichnis  aller User
 
## cfav / cfavorites - gemeinsames Favoritenverzeichnis aller User
 
## cmusic - gemeinsames Musikverzeichnis aller User
 
## cpic / cpictures - gemeinsames Bilderverzeichnis aller User
 
## cvideo - gemeinsames Videoverzeichnis aller User
 
## desktop - Desktopverzeichnis des Rechners
 
## '''doc''' / docdir - Dokumentenverzeichnis des Users
 
## downloads - Downloadsverzeichnis des Users
 
## fav / favorites - Favoritenverzeichnis des Users
 
## fonts - Fontsverzeichnis des Rechners
 
## music - Musikverzeichnis des Users
 
## pic / pictures - Bilderverzeichnis des Users
 
## prog / program - Programmverzeichnis des Rechners
 
## prog86 / program86 - Programm86-Verzeichnis des Rechners
 
## '''root''' - Root-Verzeichnis des BAF-Clients bzw. des BAF-Servers
 
## '''userroot''' / usrroot - User-Verzeichnis des BAF-Clients
 
## video - Videoverzeichnis des Users
 
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  #text_save  fn=$DIR(doc)test.txt
+
  ~ $RADM()
 +
 
 +
=Ausführen=
  
==$FILEDIALOG()==
+
==#exec==
  
Führt einen Dateiauswahl-Dialog aus und gibt den gewählten Dateinamen zurück. Im Falle des Abbruchs wird ''abort'' zurück gegeben.
+
Führt ein anderes Kommando aus
  
 
'''Parameter'''
 
'''Parameter'''
  
# Wenn der erste Parameter ''save'' lautet, wird ein Speichern-Dialog, sonst ein Öffnen-Dialog aufgerufen.
+
* cnd (condition) - Die Variable wird nur dann gesetzt, wenn  cnd=Y ist; Funktionen werden ersetzt
# Filter-Statement, immer Kombinationen aus Text (Text-Dateien *.txt) und Filter-Statement(*.txt), getrennt durch Pipes.
+
* cmd ("command") - Names des (Primär- oder Sub-) Kommandos, das ausgeführt werden soll.
# Standard-Dateierweiterung
+
* ex ("exception") - Name oder Nummer des Kommandos, das ausgeführt wird, wenn bei der Ausführung von cmd eine Exception auftritt; siehe Beispiele
 +
* fin ("finally") - Name oder Nummer des Kommandos, das nach der Ausführung von cmd ausgeführt wird - egal ob eine Exception aufgetreten ist oder nicht. Wird nur berücksichtigt, wenn der Parameter ex nicht gesetzt ist.
 +
 
 +
'''Beispiele'''
  
'''Beispiel'''
+
#exec  cmd="xtodo_page_add(XU,$PVAL(vl,user_user_id),$PVAL(vl,login),$PVAL(vl,shortname)$CHR(crlf)$PVAL(vl,firstname) $PVAL(vl,lastname))"
  
#text_save  fn="$FILEDIALOG(save,Text-Dateien *.txt|*.txt|Alle Dateien *.*|*.*,txt)"
+
Das folgende Beispiel löst das Problem, dass ein neues PDF unter demselben Dateinamen nicht erstellt werden kann, wenn beim vorherigen Versuche der Erstellung eine Exception aufgetreten ist. In einem solchen Fall wurde ein #pdf_start, aber kein #pdf_stop ausgeführt, und die geöffnete Datei sperrt diesen Dateiname, bis der BAF-Client geschlossen wird. Lösung dieses Problems ist es, im Parameter ex ein #pdf stop auszuführen; auf das Öffnen der Datei kann in einem solchen Fall verzichtet werden. Mit der Funktion $DATA() wird hier im Beispiel gezielt eine Exception ausgelöst.
  
(Bitte beachten: Wegen der Leerzeichen im Filter-Statement muss der ganze Parameter in doppelte Anführungszeichen gesetzt werden.)
+
#frm  c="c_test_pdf"  y=console
 +
 +
#cmd_clear
 +
#cmd #pdf_text  c="Hello World"
 +
-- #cmd #pdf_text  c="Hello World $DATA(dat,test)"
 +
#cmd #pdf_stop  o=Y
 +
 +
#pdf_start  fn=$DIR(doc)\test.pdf
 +
#exec  cmd=1  ex="#pdf_stop  o=N"
 +
 +
#cout  c="c_test_pdf executed"
  
=Ini-Dateien=
+
==#batchexec==
  
Der BAF-Client verwendet eine Ini-Datei im Root-Verzeichnis (vor allem für die Datenbankverbindungen) und eine Ini-Datei ''BafClientFM.ini'' im User-Anwendungsverzeichnis (vor allem für die Formularpositionen). Es können aber auch weitere Ini-Dateien verwendet werden.
+
Speichert den Text n in der Datei batch.bat und führt diese aus.
 
 
==#ini_val==
 
 
 
Schreibt einen Wert in die Ini-Datei. #ini_val ist eine nummerierte Prozedur: #ini_val schreibt in die erste Ini-Datei, #ini_val2 in die zweite Ini-Datei und so weiter. Diese Ini-Dateien werden zunächst nur im Speicher gehalten und müssen explizit aus einer Datei geladen oder in eine Datei gespeichert werden.
 
  
 
'''Parameter'''
 
'''Parameter'''
  
* i ("item" / "ident") - Name des Eintrags in der Ini-Datei; Funktionen werden ersetzt
+
* clr ("clear") - Wenn Y, wird der Text nach Ausführung des Batch-Datei gelöscht; Default Y; Funktionen werden ersetzt;
* n ("name") - Wenn der Parameter n den Wert ''usr'' oder ''user'' hat, dann bleibt die Nummer der Ini-Datei unberücksichtigt und der Wert wird in die Datei ''BafClientFM.ini'' im im User-Anwendungsverzeichnis geschrieben.
+
* n ("number") - Nummer des Textes; der mit #text gespeicherte Text hat die Nummer 1
* sec ("section") - Abschnitt in der Ini-Datei; Funktionen werden ersetzt; default ''values''
 
* z - Wert, der in die Ini-Datei geschrieben wird; Funktionen werden ersetzt.
 
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  #ini_val  i=date_last   z=$NOW()
+
  #batchexec   n=1
  
==#ini_load==
+
==#file_open==
  
Lädt eine Ini-Datei aus einer Datei. Es handelt sich um eine nummerierte Prozedur: #ini_load lädt die Ini-Datei 1, #ini_load2 lädt die Ini-Datei 2 und so weiter.
+
Öffnet eine Datei (oder auch eine Webseite)
  
 
'''Parameter'''
 
'''Parameter'''
  
* fn ("FileName") - Dateiname der Datei, die geladen wird
+
* fn ("FileName") - Name der Datei oder die URL der Webseite
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  #ini_load  fn=$DIR(userroot)werte.ini
+
  #file_open  fn=c:\temp\test.csv
 +
#file_open  fn=https://www.google.de
  
==#ini_save==
+
==#loop==
  
Speichert eine Ini-Datei ineine Datei. Es handelt sich um eine nummerierte Prozedur: #ini_save speichert die Ini-Datei 1, #ini_save2 speichert die Ini-Datei 2 und so weiter.
+
BAL kennt keine Schleifen als Sprachelement. Um Schleifen mit einer fest Schleifenzahl auszuführen, wird die Prozedur #loop verwendet. lf muss nicht kleiner als lt sein, #loop kann auch von oben nach unten zählen.
  
 
'''Parameter'''
 
'''Parameter'''
  
* fn ("FileName") - Dateiname der Datei, in die gespeichert wird
+
* er - ("each row") Das Kommando, das für jede Zeile der Datenmenge aufgerufen wird. Funktionen werden ersetzt.
 +
* ern - ("each row no") Das Kommando, das für jede Zeile der Datenmenge aufgerufen wird. Funktionen werden nicht ersetzt. Wenn ''ern'' einen Wert hat, bleibt ''er'' unberücksichtigt. Üblicherweise wird ''er'' verwendet.
 +
* ert - ("each row transaction") Wenn Y, wird für jede Zeile der Datenmenge eine eigene Transaktion gestartet und nach der Abarbeitung des Kommandos wieder geschlossen.
 +
* lf ("loop from") - Anfangswert der Schleifenvariable; Funktionen werden ersetzt.
 +
* lt ("loop to") - Endwert der Schleifenvariable; Funktionen werden ersetzt.
 +
* n ("name") - Name der Variablen, in der die Schleifenvariable gespeichert wird (damit sie an anderer Stelle gelesen werden kann); Funktionen werden ersetzt.
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  #ini_save   fn=$DIR(userroot)werte.ini
+
  #loop   lf=42  lt=1337  er=test_line
  
==$INI()==
+
==#exit==
  
Liest einen Wert aus einer Ini-Datei.
+
Die Prozedur #exit bricht die Ausführung auf der jeweiligen Code-Ebene (Kommando bzw. Sub-Kommando) ab
  
 
'''Parameter'''
 
'''Parameter'''
  
# Nummer der Ini-Datei, alternativ ''usr'' oder ''root''
+
(keine)
# Item (Ident)
 
# optional: Sektion; wenn nicht vorhanden, dann ''values''. Wenn ''db!'', dann wird als Sektion die aktuell gewählte Datenbankverbindung verwendet (in diesem Fall sollte als erster Parameter ''root'' verwendet werden).
 
# optional: Default-Wert; wenn nicht vorhanden, dann ein leerer String
 
  
'''Beispiele'''
+
'''Beispiel'''
 +
 
 +
#page  ras=Y
 +
 +
...
 +
 +
~ $EMPTY($PVAL(vl,id))  and  $PVAL(vl,status) > 20
 +
#sql select nextval('ausza_id') as id
 +
#sql_openval  f_id=1
 +
#page_val  i=vl  f=id  z=$VAL(1)
 +
#save
 +
#exit
 +
 +
~~
 +
 +
...
 +
 
 +
Der Beispiel-Code befindet sich auf der Seite xausza_page_ausza und baut die entsprechende Seite auf. Er prüft, ob bereits eine ID-Gesetzt ist - wenn nicht, wird über eine Datenbank-Sequenz die nächste ID abgefragt, in das VL-Segment geschrieben und die Seite gespeichert. Beim Speichern der Seite wird sie jedoch neu aufgerufen, also komplett neu aufgebaut, was erst einmal kein Problem ist. Danach würde aber die Ausführung auf der Code-Ebene, auf der sich #save befindet, fortgeführt, was zur Folge hat, dass die dann folgenden Segmente doppelt erscheinen (zunächst die aus dem Neu-Aufbau der Seite, dann die, die von der Fortsetzung des Codes her stammen).
  
#var_set  n=datum  z=$INI(1,datum)
+
Um dies zu vermeiden muss die Ausführung des Codes nach #save abgebrochen werden.
#var_set  n=datum  z=$INI(1,datum,bearbeitung,$TODAY())
 
  
==$INITEXT()==
+
==$EXEC==
  
Gibt die komplette Ini-Datei zurück. Wird vor allem beim Debugging verwendet.
+
Führt ein Kommando. Im ausgeführten Kommando kann eine Variable gesetzt werden, die dann als Funktionsergebnis von $EXEC zurückgegeben wird.
  
 
'''Parameter'''
 
'''Parameter'''
  
# Nummer der Ini-Datei, alternativ ''usr'' oder ''root''
+
# Kommando, das ausgeführt werden soll
 +
# optional: Der Name der Variablen, in der das Ergebnis steht; default ist ''result''
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  #coutl $INITEXT(usr)
+
  #frm  c="test_funkexec"  y=console
 +
#cout  c=$EXEC(test_funkexec_line)
  
=Zwischenablage=
+
-- test_funkexec_line
 +
#var_set  n=result  z=42
  
Das BAF-Framework unterstützt die Zwischenablage nur für Text.
+
=Dateien und Verzeichnisse=
  
==#clipboard==
+
==#file_op==
  
Schreibt einen Text in die Zwischenablage
+
Führt eine Operation mit einer Datei oder einem Verzeichnis aus
  
 
'''Parameter'''
 
'''Parameter'''
  
* z - Wert, der in der Zwischenablage gespeichert werden soll; Funktionen werden ersetzt
+
* cnd - ("condition") Die Prozedur wird nur dann ausgeführt, wenn das Statement in cnd Y ergibt. Default ist Y, Funktionen werden ersetzt
 +
* fn ("FileName") - Name der Datei oder des Verzeichnisses
 +
* n - Name der Variable oder Nummer des Values, in die/den das Ergebnis der Operation (Y oder N) geschrieben wird.
 +
* on ("old name) - der bisherige Dateiname bei RenameFile
 +
* y - Typ der Operation
 +
** cd / createdir - Erzeugt ein Verzeichnis
 +
** cf / copyfile - Kopiert eine Datei (von on zu fn)
 +
** df / deletefile - Löscht eine Datei
 +
** fd / forcedirectories - Stellt sicher, dass ein Pfad vorhanden ist
 +
** rd / removedir - Entfernt ein Verzeichnis
 +
** rf / renamefile - Benennt eine Datei um, kann auch dazu verwendet werden, eine Datei zu verschieben
  
 
'''Beispiele'''
 
'''Beispiele'''
  
  #clipboard   z=$TEXT()
+
  #file_op   y=renamefile  on=c:\temp\debug.txt  fn=c:\temp\test\debug.txt  n=1
  #clipboard   z=$CHR(dquote)$PVAL(test,zahl,allsel,$CHR(crlf))$CHR(dquote)
+
#cout  c=$VAL(1)
 +
 +
  #file_op   y=fd  fn=c:\eins\zwei\drei\vier
  
==$CLIPBOARD()==
+
==#file_search==
  
Gibt den Text aus der Zwischenablage zurück.
+
Sucht Dateien und schreibt die Ergebnisliste in einen Text.
  
 
'''Parameter'''
 
'''Parameter'''
  
(keine)
+
* all - wenn Y, dann werden nach dem Dateinamen auch noch das Dateidatum, die Größe und die Attribute in den Text geschrieben. Default N, Funktionen werden ersetzt
 +
* clr - ("clear") wenn Y, wird der Text vor der Suche geleert. Default Y, Funktionen werden ersetzt
 +
* cnd - ("condition") Die Prozedur wird nur dann ausgeführt, wenn das Statement in cnd Y ergibt. Default ist Y, Funktionen werden ersetzt
 +
* fn ("FileName") - Suchstring, siehe Beispiel; Funktionen werden ersetzt
 +
* n ("number") - Nummer des Textes, in den die Ergebnisliste geschrieben wird; default 1, Funktionen werden ersetzt.
 +
* y - Typ der Suche. Default AnyFile, Funktionen werden ersetzt
 +
** AnyFile
 +
** ReadOnly
 +
** Hidden
 +
** SysFile
 +
** VolumeID
 +
** Directory
 +
** Archive
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  #setvar   n=clp   z=$CLIPBOARD()
+
  #file_search  fn=c:\*.ini   n=1   y=0  all_=Y
 
+
#coutl $TEXT(1)
=String-Funktionen=
 
  
Die folgenden Funktionen geben einen String zurück.
+
==#file_wait==
  
==$CHR()==
+
Wartet, bis zumindest eine Datei vorhanden ist, die den Kriterien entspricht, und führt dann cmd aus. Wird nach der in to eingestellten Zeit keine Datei gefunden, dann wird mit dem in cmdto eingestellten Kommando abgebrochen.
 
 
Gibt ein Zeichen (ggf zwei Zeichen) zurück
 
  
 
'''Parameter'''
 
'''Parameter'''
  
# Ansi-Zeichennummer oder eine der folgenden Bezeichnungen:
+
* all - wenn Y, dann werden nach dem Dateinamen auch noch das Dateidatum, die Größe und die Attribute in den Text geschrieben. Default N, Funktionen werden ersetzt
## crlf - Zeilenumbruch #13#10
+
* cmd - Kommando, das ausgeführt wird, sobald eine Datei gefunden wird; Funktionen werden ersetzt
## cr - Zeichen #13
+
* cmdto - Kommando, das ausgeführt wird, sobald die Prozedur wegen eines TimeOuts abgebrochen wird; Funktionen werden ersetzt
## lf - Zeichen #10
+
* cnd - ("condition") Die Prozedur wird nur dann ausgeführt, wenn das Statement in cnd Y ergibt. Default ist Y, Funktionen werden ersetzt
## tab - Tabulator
+
* fn ("FileName") - Suchstring, siehe Beispiel; Funktionen werden ersetzt
## quote - ' (einfache Anführungszeichen)
+
* sleep - Zeit in ms zwischen den einzelnen Suchen nach einer Datei, die den Kriterien entspricht; Default 1000, Funktionen werden ersetzt
## dquote - " (doppelte Anführungszeichen)
+
* to ("TimeOut") - Zeit in ms, nach der die Ausführung abgebrochen wird; Default 15000, Funktionen werden ersetzt
## space / leer - Leerzeichen
+
* y - Typ der Suche. Default AnyFile, Funktionen werden ersetzt
## comma / komma - , (Komma)
+
** AnyFile
## questionmark / qmark / frage / fragezeichen - ?
+
** ReadOnly
## bro / bracket_open - (
+
** Hidden
## brc / bracket_close - )
+
** SysFile
## dollar - $
+
** VolumeID
 +
** Directory
 +
** Archive
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  #exec   cmd="xtodo_page_add(XU,$PVAL(vl,user_user_id),$PVAL(vl,login),$PVAL(vl,shortname)$CHR(crlf)$PVAL(vl,firstname) $PVAL(vl,lastname))"
+
  #cmd_clear #cout c="Gefunden"
 +
#cmd_clear2 #cout c="TimeOut"
 +
 +
#file_wait  fn=C:\temp\test\*.txt   cmd=1  cmdto=2
  
==$COPY()==
+
==#dir_force==
  
Kopiert aus dem String im ersten Parameter einen Teil der Zeichen.
+
Stellt sicher, dass es den spezifizierten Verzeichnispfad gibt, indem erforderlichenfalls Verzeichnisse angelegt werden.
  
 
'''Parameter'''
 
'''Parameter'''
  
# String, aus dem kopiert werden soll
+
* n ("name") - Names des Pfads
# Position im String, ab dem Zeichen kopiert werden sollen
 
# optional: Anzahl der Zeichen, die kopiert werden sollen. Wenn dieser Parameter fehlt, werden alle Zeichen ab der angegebenen Position kopiert.
 
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  #grdcol   f=ref  c1="Ref"  w=30  y=link  ro=Y  cmdn=xtodo_add(link,$COPY($PVAL(grid,ctype,sel),1,2))
+
  #dir_force   n=c:\temp\pdf
  
==$EXEC()==
+
==#dir_proc==
  
Führt ein Kommando aus und gibt ein Funktionsergebnis zurück.
+
Durchsucht ein Verzeichnis nach Dateien, die den angegebenen Kriterien entsprechen, und führt für jede gefundene Datei ''cmd'' aus.
  
 
'''Parameter'''
 
'''Parameter'''
  
# Kommando, das ausgeführt werden soll.
+
* cmd ("command") - Kommando, das für jede gefundene Datei ausgeführt wird
# optional: Name der Variable, die als Funktionsergebnis zurück gegeben werden soll; default ''result''
+
* dn ("DirectoryName") - Pfad des Verzeichnisses, in dem die Dateien gesucht werden; Funktionen werden ersetzt.
 +
* done - Verzeichnis, in das die Dateien nach Abarbeitung verschoben werden (sofern der Parameter nicht leer ist). Funktionen werden ersetzt.
 +
* fn ("filename") - Suchkriterium für den Dateinamen; Funktionen werden ersetzt; Default *
 +
* n ("name") - Name der Variablen, in welcher der Dateiname der aktuell zu bearbeitenden Datei inklusive Pfad gespeichert wird; Funktionen werden ersetzt; Default dir_proc
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  #val_set   n=test   z=$EXEC(testkommando)
+
  #dir_proc   dn=c:\temp\in   done=c:\temp\done  fn=*.csv  cmd=importcsv_line
  
==$GUID()==
+
==$FILEINFO()==
  
Erzeugt eine GUID und gibt sie zurück.
+
Liefert Infos über eine Datei
  
 
'''Parameter'''
 
'''Parameter'''
  
# optional: Name einer Variablen, in welcher die GUID zusätzlich gespeichert wird.
+
# Dateiname
 +
# Typ der Information, es stehen dabei folgende Optionen zur Verfügung
 +
#* size - Dateigröße in Byte
 +
#* size_point - Dateigröße in Byte, Punkte alle drei Zeichen von rechts
 +
#* size_auto - Dateigröße in Byte, kB, MB oder GB, je nach Größe; mit Einheit
 +
#* size_kb - Dateigröße in kB (analog Windows-Explorer)
 +
#* date - Datum im Format dd.mm.yyyy
 +
#* date_yyyy - Datum im Format yyyymmdd
 +
#* datetime - Datum und Uhrzeit im Format dd.mm.yyyy hh:mm:ss
 +
#* datetime_yyyy - Datum im Format yyyymmddhhmmss
 +
#* exists - Y, wenn die Datei existiert, sonst N
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  #sql_exec   kid=$GUID()
+
  #var_set   n=fn  z="T:\Tools Gruppenrechte\BC3 light\BafClientFM.exe"
 +
#coutl $FILEINFO($VAR(fn),size)
 +
#coutl $FILEINFO($VAR(fn),size_point)
 +
#coutl $FILEINFO($VAR(fn),size_auto)
 +
#coutl $FILEINFO($VAR(fn),size_kb)
 +
#coutl $FILEINFO($VAR(fn),date)
 +
#coutl $FILEINFO($VAR(fn),date_yyyy)
 +
#coutl $FILEINFO($VAR(fn),datetime)
 +
#coutl $FILEINFO($VAR(fn),datetime_yyyy)
 +
#coutl $FILEINFO($VAR(fn),exists)
  
==$HASH()==
+
Ergebnis
  
Erzeugt einen Hash-Wert vom String im ersten Parameter.
+
27668480
 +
27.668.480
 +
26,39 MB
 +
27.020 kB
 +
02.05.2023
 +
20230502
 +
02.05.2023 12:20:09
 +
20230502122009
 +
Y
  
'''Parameter'''
+
==$DIR()==
  
# String, von welchem der Hash gebildet werden soll.
+
Ermittelt einen Verzeichnisnamen. Trailing Path Delimiter (\ bei Windows) wird immer angehängt.
# zu verwendender Hash-Algorithmus:
 
## sha512
 
## sha512_256
 
## sha512_224
 
## sha384
 
## sha256
 
## sha224
 
## sha1
 
## md5 (Hinweis: MD5 gilt seit Längerem als nicht mehr sicher. Verwenden Sie ihn nur, wenn dies aus Gründen der Abwärts-Kompatbilität zwingend ist.)
 
 
 
'''Beispiel'''
 
 
 
#page_val  i=vl  col=1  row=3  z=$HASH($PVAL(vl,1,2),sha512)
 
 
 
==$INVLOOKUP()==
 
 
 
Ermittelt den Key aus einer Nachschlageliste bei Übergabe des Values.
 
  
 
'''Parameter'''
 
'''Parameter'''
  
# Name der Nachschlageliste
+
# Bezeichnung des Verzeichnisses
# Valuedes Eintrags
+
## appdata - Verzeichnis für Anwendungsdaten des Users
# Default-Wert; wird verwendet, wenn der Rückgabe-Wert leer ist
+
## cappdata - gemeinsames Verzeichnis für Anwendungsdaten aller User
 
+
## cdoc - gemeinsames Dokumentenverzeichnis  aller User
'''Beispiel'''
+
## cfav / cfavorites - gemeinsames Favoritenverzeichnis aller User
 +
## cmusic - gemeinsames Musikverzeichnis aller User
 +
## cpic / cpictures - gemeinsames Bilderverzeichnis aller User
 +
## cvideo - gemeinsames Videoverzeichnis aller User
 +
## desktop - Desktopverzeichnis des Rechners
 +
## '''doc''' / docdir - Dokumentenverzeichnis des Users
 +
## downloads - Downloadsverzeichnis des Users
 +
## fav / favorites - Favoritenverzeichnis des Users
 +
## fonts - Fontsverzeichnis des Rechners
 +
## music - Musikverzeichnis des Users
 +
## pic / pictures - Bilderverzeichnis des Users
 +
## prog / program - Programmverzeichnis des Rechners
 +
## prog86 / program86 - Programm86-Verzeichnis des Rechners
 +
## '''root''' - Root-Verzeichnis des BAF-Clients bzw. des BAF-Servers
 +
## '''userroot''' / usrroot - User-Verzeichnis des BAF-Clients
 +
## video - Videoverzeichnis des Users
  
#cout  c="$INVLOOKUP(general_status,aktiv,Wert nicht vorhanden)"
+
'''Beispiel'''
  
 +
#text_save  fn=$DIR(doc)test.txt
  
==$LOOKUP()==
+
==$FILEDIALOG()==
  
Ermittelt einen Wert aus einer Nachschlageliste.
+
Führt einen Dateiauswahl-Dialog aus und gibt den gewählten Dateinamen zurück. Im Falle des Abbruchs wird ''abort'' zurück gegeben.
  
 
'''Parameter'''
 
'''Parameter'''
  
# Name der Nachschlageliste
+
# Wenn der erste Parameter ''save'' lautet, wird ein Speichern-Dialog, sonst ein Öffnen-Dialog aufgerufen.
# Key des Eintrags
+
# Filter-Statement, immer Kombinationen aus Text (Text-Dateien *.txt) und Filter-Statement(*.txt), getrennt durch Pipes.
# Default-Wert; wird verwendet, wenn der Rückgabe-Wert leer ist
+
# Standard-Dateierweiterung
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  #cout   c="$LOOKUP(general_status,1,Status nicht gesetzt)"
+
  #text_save   fn="$FILEDIALOG(save,Text-Dateien *.txt|*.txt|Alle Dateien *.*|*.*,txt)"
 +
 
 +
(Bitte beachten: Wegen der Leerzeichen im Filter-Statement muss der ganze Parameter in doppelte Anführungszeichen gesetzt werden.)
 +
 
 +
=ZIP=
  
==$LOW()==
+
==#zip_create==
  
Wandelt den übergebenen String in Kleinbuchstaben um.
+
Erzeugt eine ZIP-Datei
  
 
'''Parameter'''
 
'''Parameter'''
  
# String, der in Kleinbuchstaben gewandelt werden soll.
+
* cnd ("condition") - Wenn Y, wird die Prozedur ausgeführt; default Y, Funktionen werden ersetzt
 +
* cnt ("count") - Anzahl der Dateien, die der ZIP-Datei hinzugefügt werden; Funktionen werden ersetzt
 +
* dir ("directory") - Verzeichnis, wenn das nicht bei allen fn1, fn2... angegeben werden soll
 +
* fn ("FileName") - Der Dateiname, unter dem die ZIP-Datei gespeichert wird; Funktionen werden ersetzt
 +
* fn1, fn2,... ("FileName") - Die Dateien, die in der ZIP-Datei gespeichert werden; die Anzahl wird mit dem Parameter cnt bestimmt; Funktionen werden ersetzt
 +
* list - Nummer eines Textes (#text, #text2...), in dem die Dateien gelistet sind, die der ZIP-Datei hinzugefügt werden sollen. Wenn list ein Wert größer 0 hat, werden cnt und fn1, fn2... ignoriert. Default 0, Funktionen werden ersetzt.
 +
* pw ("PassWord") - Password der erzeugten ZIP-Datei; Funktionen werden ersetzt.
 +
* pwc ("PassWordCrypted") - Wenn Y, dann ist das Passwort mit der Verschlüsselungsfunktion auf der Seite Tools des Code-Dialogs verschlüsselt. Hinweis: Mit dieser Verschlüsselung verhindert man lediglich, dass das Passwort direkt aus dem Code ausgelesen werden kann. Wird der BAF-Client mit dem Delphi-Debugger ausgeführt, lässt sich leicht an die betreffende Stelle ein Breakpoint setzen und das Passwort dann im Klartext auslesen (dieselbe Unit uBafCrypt vorausgesetzt).
 +
 
 +
'''Beispiele'''
 +
#zip_create  fn=$VAR(root).zip  list=1
 +
 +
#var_set  n=fn_zip  z=tt_mail_$VAR(reise)-$VAR(reisename)_$PAD($VAR(lfdnr),4,L,0)_$NOWFMT(yyyymmdd).zip
 +
#file_op  y=df  fn=$VAR(path)\$VAR(fn_zip)
 +
#code cnt=2
 +
#code fn1=$VAR(filename).txt
 +
#code fn2=$VAR(filename).sab
 +
#zip_create  dir=$VAR(path)  fn=$VAR(path)\$VAR(fn_zip)    pw=$VAR(pw)  $CODE$
 +
 
 +
Die Prozedur #zip_create ersetzt nicht vorherige Dateien. Von daher im Zweifelsfall wie im zweiten Beispiel vorher eine Datei dieses Namens löschen.
  
'''Beispiel'''
+
=Ini-Dateien=
  
~ $LOW($EDT(edt1)) = bus
+
Der BAF-Client verwendet eine Ini-Datei im Root-Verzeichnis (vor allem für die Datenbankverbindungen) und eine Ini-Datei ''BafClientFM.ini'' im User-Anwendungsverzeichnis (vor allem für die Formularpositionen). Es können aber auch weitere Ini-Dateien verwendet werden.
  
==$LOWNOSPACE()==
+
==#ini_val==
  
Wandelt einen String in Kleinbuchstaben und ersetzt alle Leerzeichen durch Unterstriche.
+
Schreibt einen Wert in die Ini-Datei. #ini_val ist eine nummerierte Prozedur: #ini_val schreibt in die erste Ini-Datei, #ini_val2 in die zweite Ini-Datei und so weiter. Diese Ini-Dateien werden zunächst nur im Speicher gehalten und müssen explizit aus einer Datei geladen oder in eine Datei gespeichert werden.
  
 
'''Parameter'''
 
'''Parameter'''
  
# String, der gewandelt werden soll
+
* i ("item" / "ident") - Name des Eintrags in der Ini-Datei; Funktionen werden ersetzt
 +
* n ("name") - Wenn der Parameter n den Wert ''usr'' oder ''user'' hat, dann bleibt die Nummer der Ini-Datei unberücksichtigt und der Wert wird in die Datei ''BafClientFM.ini'' im im User-Anwendungsverzeichnis geschrieben.
 +
* sec ("section") - Abschnitt in der Ini-Datei; Funktionen werden ersetzt; default ''values''
 +
* z - Wert, der in die Ini-Datei geschrieben wird; Funktionen werden ersetzt.
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  #page_val  i=vl  col=1  row=3   z=$LOWNOSPACE($PVAL(vl,1,2))
+
  #ini_val  i=date_last   z=$NOW()
  
 +
==#ini_load==
  
==$NOCRLF()==
+
Lädt eine Ini-Datei aus einer Datei. Es handelt sich um eine nummerierte Prozedur: #ini_load lädt die Ini-Datei 1, #ini_load2 lädt die Ini-Datei 2 und so weiter.
 
 
Entfernt Zeilenumbrüche
 
  
 
'''Parameter'''
 
'''Parameter'''
  
# String, aus dem die Zeilenumbrüche entfernt werden sollen
+
* fn ("FileName") - Dateiname der Datei, die geladen wird
# optional: Zeichenfolge, die an Stelle der Zeilenumbrüche eingefügt werden sollen
 
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  #val_set   n=2  z=$NOCRLF($VAL(1),;)
+
  #ini_load   fn=$DIR(userroot)werte.ini
  
==$NVL()==
+
==#ini_save==
  
Liefert einen Ersatzwert, wenn der Wert leer ist.
+
Speichert eine Ini-Datei ineine Datei. Es handelt sich um eine nummerierte Prozedur: #ini_save speichert die Ini-Datei 1, #ini_save2 speichert die Ini-Datei 2 und so weiter.
  
 
'''Parameter'''
 
'''Parameter'''
  
# String, der als Funktionsergebnis zurückgegeben wird
+
* fn ("FileName") - Dateiname der Datei, in die gespeichert wird
# String, der als Funktionsergebnis zurückgegeben wird, wenn der erste Parameter leer ist
 
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  sql   where ckey <= $NVL($PVAL(grid,nummer,lookuplive),0)
+
  #ini_save   fn=$DIR(userroot)werte.ini
  
Liefert $PVAL einen leeren Wert zurück (z.B., weil die Gridzeile neu angelegt wurde und daher noch keine Nummer eingetragen ist), so wird statt dessen 0 verwendet, damit die WHERE-Klausel syntaktisch korrekt ist.
+
==$INI()==
  
==$PAD()==
+
Liest einen Wert aus einer Ini-Datei.
 
 
Füllt links oder rechts bis zur vorgegebenen Länge mit Zeichen auf.
 
  
 
'''Parameter'''
 
'''Parameter'''
  
# Der ursprüngliche String
+
# Nummer der Ini-Datei, alternativ ''usr'' oder ''root''
# Soll-Länge. Ist der ursprüngliche String bereits länger, wird er nicht gekürzt, es werden aber auch keine weiteren Zeichen hinzugefügt
+
# Item (Ident)
# Wenn L, werden die Zeichen vorne hinzugefügt, andernfalls hinten
+
# optional: Sektion; wenn nicht vorhanden, dann ''values''. Wenn ''db!'', dann wird als Sektion die aktuell gewählte Datenbankverbindung verwendet (in diesem Fall sollte als erster Parameter ''root'' verwendet werden).
# Zeichen, die soweit und so oft hinzugefügt werden, bis die Soll-Länge erreicht ist. Umfasst der Parameter mehrere Zeichen, werden diese ggf. nicht alle hinzugefügt.
+
# optional: Default-Wert; wenn nicht vorhanden, dann ein leerer String
  
'''Beispiel'''
+
'''Beispiele'''
  
  sql   text1 = '$PAD($VAR(text1),70,R, )'
+
  #var_set   n=datum  z=$INI(1,datum)
 +
#var_set  n=datum  z=$INI(1,datum,bearbeitung,$TODAY())
  
==$SUBSTR()==
+
==$INITEXT()==
  
Kopiert aus dem String im ersten Parameter einen Teil der Zeichen.
+
Gibt die komplette Ini-Datei zurück. Wird vor allem beim Debugging verwendet.
 
 
(Hinweis: Selbe Funktionalität wie $COPY())
 
  
 
'''Parameter'''
 
'''Parameter'''
  
# String, aus dem kopiert werden soll
+
# Nummer der Ini-Datei, alternativ ''usr'' oder ''root''
# Position im String, ab dem Zeichen kopiert werden sollen
 
# optional: Anzahl der Zeichen, die kopiert werden sollen. Wenn dieser Parameter fehlt, werden alle Zeichen ab der angegebenen Position kopiert.
 
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  #grdcol  f=ref  c1="Ref"  w=30  y=link  ro=Y  cmdn=xtodo_add(link,$SUBSTR($PVAL(grid,ctype,sel),1,2))
+
  #coutl $INITEXT(usr)
  
==$STREP()==
+
=Zwischenablage=
  
("string replace") Ersetzt Zeichen im String durch andere Zeichen.
+
Das BAF-Framework unterstützt die Zwischenablage nur für Text.
  
'''Parameter'''
+
==#clipboard==
  
# String, in welchen Zeichen ersetzt werden sollen.
+
Schreibt einen Text in die Zwischenablage
# Zeichen, die ersetzt werden sollen
+
 
# Zeichen, die an deren Stelle treten sollen
+
'''Parameter'''
# optional: Optionen (kombinierbar)
+
 
## i - Groß- und Kleinschreibung ignorieren
+
* z - Wert, der in der Zwischenablage gespeichert werden soll; Funktionen werden ersetzt
## a - Alle Vorkommen ersetzen (andernfalls wird nur das erste Vorkommen ersetzt)
 
  
 
'''Beispiele'''
 
'''Beispiele'''
  
  #page_val  i=vl  col=1  row=3   z="$STREP($PVAL(vl,1,2), ,_,a)"
+
  #clipboard   z=$TEXT()
  #page_val  i=vl  col=1  row=3   z=$STREP($PVAL(vl,1,2),$CHR(space),_,a)
+
  #clipboard   z=$CHR(dquote)$PVAL(test,zahl,allsel,$CHR(crlf))$CHR(dquote)
  
Hinweis: Beide Beispiele haben exakt dieselbe Funktion. Im oberen Beispiel steht das Leerzeichen direkt im Text, dafür muss der komplette Parameter in doppelte Anführungszeichen, im unteren Beispiel wird das Leerzeichen durch $CHR(space) eingefügt, dafür können die Leerzeichen unterbleiben.
+
==$CLIPBOARD()==
  
==$STREXTR()==
+
Gibt den Text aus der Zwischenablage zurück.
 
 
("string extract") Extrahiert einen Teil aus einem String.
 
  
 
'''Parameter'''
 
'''Parameter'''
  
# String, aus dem extrahiert werden soll
+
(keine)
# Extraktionstyp
 
## ffe ("from first exclude") - Extrahiert ab der Zeichenfolge im dritten Parameter und schließt diese Zeichenfolge aus
 
## ffi ("from first include") - Extrahiert ab der Zeichenfolge im dritten Parameter und schließt diese Zeichenfolge ein
 
## tfe ("to first exclude") - Extrahiert bis zur Zeichenfolge im dritten Parameter und schließt diese Zeichenfolge aus
 
## tfi ("to first include") - Extrahiert bis zur Zeichenfolge im dritten Parameter und schließt diese Zeichenfolge ein
 
  
 +
'''Beispiel'''
 +
 +
#setvar  n=clp  z=$CLIPBOARD()
  
'''Beispiele'''
+
=String-Funktionen=
  
#cout  c="$STREXTR(test;test2,ffe,;)"    -- Ergebnis: test2
+
Die folgenden Funktionen geben einen String zurück.
#cout  c="$STREXTR(test;test2,ffi,;)"    -- Ergebnis: ;test2
 
#cout  c="$STREXTR(test;test2,tfe,;)"    -- Ergebnis: test
 
#cout  c="$STREXTR(test;test2,tfi,;)"    -- Ergebnis: test;
 
#cout  c="$STREXTR(test;!§§test2,tfe,;!§§)"    -- Ergebnis: test
 
  
==$TRIM()==
+
==$BASE64()==
  
Entfernt Leerzeichen und Zeilenumbrüche am Rand des Strings
+
En- oder Decodiert einen Text im Base64-Code
  
 
'''Parameter'''
 
'''Parameter'''
  
# String, der getrimmt werden soll
+
# Encoding oder Decoding:
# optional
+
## e - Encoding
## L - trimmt nur auf der linken Seite
+
## d - Decoding
## R - trimmt nur auf der rechten Seite
+
# Text, der en-oder decodet werden soll.
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  #var_set  n=test  z=$TRIM($VAL(1),R)
+
  #coutl $BASE64(e,Dies ist ein Test)
 +
 
  
==$UPP()==
+
==$CHR()==
  
Wandelt den übergebenen String in Großbuchstaben um.
+
Gibt ein Zeichen (ggf zwei Zeichen) zurück
  
 
'''Parameter'''
 
'''Parameter'''
  
# String, der in Großbuchstaben gewandelt werden soll.
+
# Ansi-Zeichennummer oder eine der folgenden Bezeichnungen:
 
+
## crlf - Zeilenumbruch #13#10
 +
## cr - Zeichen #13
 +
## lf - Zeichen #10
 +
## tab - Tabulator
 +
## quote - ' (einfache Anführungszeichen)
 +
## dquote - " (doppelte Anführungszeichen)
 +
## space / leer - Leerzeichen
 +
## comma / komma - , (Komma)
 +
## questionmark / qmark / frage / fragezeichen - ?
 +
## bro / bracket_open - (
 +
## brc / bracket_close - )
 +
## dollar - $
 +
 
 
'''Beispiel'''
 
'''Beispiel'''
  
  ~ $UPP($EDT(edt1)) = BUS
+
  #exec  cmd="xtodo_page_add(XU,$PVAL(vl,user_user_id),$PVAL(vl,login),$PVAL(vl,shortname)$CHR(crlf)$PVAL(vl,firstname) $PVAL(vl,lastname))"
  
=Integer-Funktionen=
+
==$COPY()==
  
Die folgenden Funktionen geben eine ganze Zahl zurück
+
Kopiert aus dem String im ersten Parameter einen Teil der Zeichen.
 
 
==$DEC()==
 
 
 
Verringert die Zahl im ersten Parameter.
 
  
 
'''Parameter'''
 
'''Parameter'''
  
# Zahl die verringert werden soll.
+
# String, aus dem kopiert werden soll
# optional: Zahl, um die verringert werden soll. Wenn nicht vorhanden, dann 1.
+
# Position im String, ab dem Zeichen kopiert werden sollen
 +
# optional: Anzahl der Zeichen, die kopiert werden sollen. Wenn dieser Parameter fehlt, werden alle Zeichen ab der angegebenen Position kopiert.
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  #setval   n=1   z=$DEC($VAL(1))
+
  #grdcol   f=ref  c1="Ref"  w=30  y=link  ro=Y   cmdn=xtodo_add(link,$COPY($PVAL(grid,ctype,sel),1,2))
  
==$ICALC()==
+
==$EXEC()==
  
Führt eine Berechnung mit ganzzahligen Werten durch.
+
Führt ein Kommando aus und gibt ein Funktionsergebnis zurück.
  
 
'''Parameter'''
 
'''Parameter'''
  
# Operator, es stehen zur Verfügung
+
# Kommando, das ausgeführt werden soll.
## +
+
# optional: Name der Variable, die als Funktionsergebnis zurück gegeben werden soll; default ''result''
## -
 
## *
 
## div
 
## mod
 
# Erste Zahl
 
# Zweite Zahl
 
# optional beim Operator +: weitere Summanden
 
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  #cout   c=$ICALC(mod,17,5)
+
  #val_set   n=test  z=$EXEC(testkommando)
  
==$INC()==
+
==$GUID()==
  
Erhöht die Zahl im ersten Parameter.
+
Erzeugt eine GUID und gibt sie zurück.
  
 
'''Parameter'''
 
'''Parameter'''
  
# Zahl die erhöht werden soll.
+
# optional: Name einer Variablen, in welcher die GUID zusätzlich gespeichert wird.
# optional: Zahl, um die erhöht werden soll. Wenn nicht vorhanden, dann 1.
 
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  #setval   n=1  z=$INC($VAL(1))
+
  #sql_exec   kid=$GUID()
  
==$INTLEN()==
+
==$HASH()==
  
Ist der String im Parameter eine ganz Zahl, dann wird deren Länge in Zeichen zurückgegeben, andernfalls -1; ein leerer String im ersten Parameter ergibt 0.
+
Erzeugt einen Hash-Wert vom String im ersten Parameter.
  
 
'''Parameter'''
 
'''Parameter'''
  
# Zahl, deren Länge ermittelt wird.
+
# String, von welchem der Hash gebildet werden soll.
 +
# zu verwendender Hash-Algorithmus:
 +
## sha512
 +
## sha512_256
 +
## sha512_224
 +
## sha384
 +
## sha256
 +
## sha224
 +
## sha1
 +
## md5 (Hinweis: MD5 gilt seit Längerem als nicht mehr sicher. Verwenden Sie ihn nur, wenn dies aus Gründen der Abwärts-Kompatbilität zwingend ist.)
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  ~ $INTLEN($EDT(edt1)) = 4
+
  #page_val  i=vl  col=1  row=3  z=$HASH($PVAL(vl,1,2),sha512)
  
==$LEN()==
+
==$INCLUDE()==
  
Ermittelt die Länge eines Strings in Zeichen.
+
Stellt sicher, dass der als dritter Parameter übergebene Text am Anfang oder am Ende steht, gegebenenfalls wird er dort eingefügt.
  
 
'''Parameter'''
 
'''Parameter'''
  
# String, dessen Länge ermittelt werden soll.
+
# Typ der Operation
 +
## lead(oder leading) - Text muss am Anfang stehen
 +
## leadci(oder leadingci oder leadingcaseinsensitive) - Text muss am Anfang stehen, Groß- und Kleinschreibung wird ignoriert
 +
## trail(oder trailing) - Text muss am Ende stehen
 +
## trailci(oder trailci oder trailingcaseinsensitive) - Text muss am Ende stehen, Groß- und Kleinschreibung wird ignoriert
 +
# Text, in den gegebenenfalls eingefügt wird
 +
# Text, der gegebenenfalls eingefügt wird
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  ~ $LEN($EDT(edt1)) = 4
+
  #cout  c=$INCLUDE(trailci,test.PDF,.pdf)
 +
 
  
==$POS()==
+
==$INVLOOKUP()==
  
Ermittelt die Position des Substrings in einem String. Das Funktionsergebnis ist die Position, das erste Zeichen ist 1. 0 wird zurück gegeben, wenn der Substring im String nicht vorkommt.
+
Ermittelt den Key aus einer Nachschlageliste bei Übergabe des Values.
  
 
'''Parameter'''
 
'''Parameter'''
  
# Substring (nach dem gesucht wird)
+
# Name der Nachschlageliste
# String (in dem gesucht wird)
+
# Value des Eintrags
# optional: Wenn ic (ignore case), dann wird bei der Suche die Groß- und Kleinschreibung nicht beachtet.
+
# Default-Wert; wird verwendet, wenn der Rückgabe-Wert leer ist
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  ~ $POS($EDT(edt1),$VAR(1),ic) > 0
+
  #cout  c="$INVLOOKUP(general_status,aktiv,Wert nicht vorhanden)"
  
=Datumsfunktionen=
+
==$LOOKUP()==
  
==$INCDATE()==
+
Ermittelt einen Wert aus einer Nachschlageliste.
 
 
Die Funktione  $INCDATE() verändert das Datum im ersten Parameter um die Anzahl Tage im zweiten Parameter.
 
  
 
'''Parameter'''
 
'''Parameter'''
  
# Datum, das verändert werden soll
+
# Name der Nachschlageliste
# optional: Die Tage, um die verändert werden soll; wenn leer, dann 1.
+
# Key des Eintrags
 +
# Default-Wert; wird verwendet, wenn der Rückgabe-Wert leer ist
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  #cout  c=$INCDATE($NOW(),-3)   clr=Y
+
  #cout  c="$LOOKUP(general_status,1,Status nicht gesetzt)"
  
==$INT2TIME()==
+
==$LOW()==
  
Macht aus z.B. 1130 die Zeit 11:30
+
Wandelt den übergebenen String in Kleinbuchstaben um.
  
 
'''Parameter'''
 
'''Parameter'''
  
# Zeit im Integer-Format
+
# String, der in Kleinbuchstaben gewandelt werden soll.
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  #sql_exec  k_time=$INT2TIME($VAL(1))
+
  ~ $LOW($EDT(edt1)) = bus
  
==$NOW()==
+
==$LOWNOSPACE()==
  
Gibt das aktuelle Datum und die aktuelle Uhrzeit im Format dd.mm.yyyy hh:mm:ss zurück.
+
Wandelt einen String in Kleinbuchstaben und ersetzt alle Leerzeichen durch Unterstriche.
  
 
'''Parameter'''
 
'''Parameter'''
  
(keine)
+
# String, der gewandelt werden soll
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  #execsql   k_datechg=$NOW()
+
  #page_val   i=vl  col=1  row=3  z=$LOWNOSPACE($PVAL(vl,1,2))
 +
 
  
==$NOWFMT()==
+
==$NOCRLF()==
  
Gibt das aktuelle Datum und/oder die aktuelle Uhrzeit im angegebenen Format zurück.
+
Entfernt Zeilenumbrüche
  
 
'''Parameter'''
 
'''Parameter'''
  
# Formatierungsstring (Syntax wie FormatDateTime in Delphi)
+
# String, aus dem die Zeilenumbrüche entfernt werden sollen
 +
# optional: Zeichenfolge, die an Stelle der Zeilenumbrüche eingefügt werden sollen
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  #sql_exec   k_datechg="$NOWFMT(yyyy-mm-dd hh:mm:ss)"
+
  #val_set   n=2  z=$NOCRLF($VAL(1),;)
  
==$NOWMIN()==
+
==$NVL()==
  
Gibt das aktuelle Datum und die aktuelle Uhrzeit ohne Sekunden (also dd.mm.yyyy hh:mm) zurück
+
Liefert einen Ersatzwert, wenn der Wert leer ist.
  
 
'''Parameter'''
 
'''Parameter'''
  
(keine)
+
# String, der als Funktionsergebnis zurückgegeben wird
 +
# String, der als Funktionsergebnis zurückgegeben wird, wenn der erste Parameter leer ist
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  #sql_exec   k_datechg=$NOWMIN()
+
  sql   where ckey <= $NVL($PVAL(grid,nummer,lookuplive),0)
 +
 
 +
Liefert $PVAL einen leeren Wert zurück (z.B., weil die Gridzeile neu angelegt wurde und daher noch keine Nummer eingetragen ist), so wird statt dessen 0 verwendet, damit die WHERE-Klausel syntaktisch korrekt ist.
  
==$TODAY()==
+
==$ONLYCHAR()==
  
Gibt das aktuelle Datum im Format dd.mm.yyyy zurück.
+
Entfernt unerwünschte Zeichen aus einem String.
  
 
'''Parameter'''
 
'''Parameter'''
  
(keine)
+
# Der ursprüngliche String
 +
# optional: Typ der Funktion
 +
## (leer) - Es werden alle Zeichen aus dem String entfernt, die keine Buchstaben (['a'..'z', 'A'..'Z', 'ä', 'ö', 'ü', 'Ä','Ö', 'Ü', 'ß']) sind
 +
## charnum - Es werden alle Zeichen aus dem String entfernt, die keine Buchstaben oder Zahlen sind
 +
## low - Es werden alle Zeichen aus dem String entfernt, die keine Buchstaben sind, Ergebnis in Kleinbuchstaben
 +
## upp - Es werden alle Zeichen aus dem String entfernt, die keine Buchstaben sind, Ergebnis in Großbuchstaben
 +
## charnumlow - Es werden alle Zeichen aus dem String entfernt, die keine Buchstaben oder Zahlen sind, Ergebnis in Kleinbuchstaben
 +
## charnumupp - Es werden alle Zeichen aus dem String entfernt, die keine Buchstaben oder Zahlen sind, Ergebnis in Großbuchstaben
 +
## uml - Es werden alle Zeichen aus dem String entfernt, die keine Buchstaben (['a'..'z', 'A'..'Z') sind, Umlaute werden konvertiert (ä -> ae, ö -> oe, ü -> ue, Ä -> Ae, Ö -> Oe, Ü -> Ue, ß -> ss)
 +
## umlcharnum - Es werden alle Zeichen aus dem String entfernt, die keine Buchstaben oder Zahlen sind, Umlaute werden konvertiert
 +
## umllow - Es werden alle Zeichen aus dem String entfernt, die keine Buchstaben sind, Ergebnis in Kleinbuchstaben, Umlaute werden konvertiert
 +
## umlupp - Es werden alle Zeichen aus dem String entfernt, die keine Buchstaben sind, Ergebnis in Großbuchstaben, Umlaute werden konvertiert
 +
## umlcharnumlow - Es werden alle Zeichen aus dem String entfernt, die keine Buchstaben oder Zahlen sind, Ergebnis in Kleinbuchstaben, Umlaute werden konvertiert
 +
## umlcharnumupp - Es werden alle Zeichen aus dem String entfernt, die keine Buchstaben oder Zahlen sind, Ergebnis in Großbuchstaben, Umlaute werden konvertiert
 +
## no191 / not191 - Es werden alle Zeichen mit der ANSI-Nummer 191 (¿) entfernt
 +
 
  
'''Beispiel'''
+
'''Beispiele'''
  
  #sql_exec  k_datechg=$TODAY()
+
  #coutl $ONLYCHAR(Baden-Württemberg)
 +
#coutl $ONLYCHAR(Baden-Württemberg,umllow)
  
==$DFMT()==
+
==$PAD()==
  
("date formated") Formatiert das übergebene Datum.  
+
Füllt links oder rechts bis zur vorgegebenen Länge mit Zeichen auf.
  
 
'''Parameter'''
 
'''Parameter'''
  
# Datum, ggf. mit Uhrzeit, das formatiert werden soll.
+
# Der ursprüngliche String
# Formatierungsstring wie in Delphi
+
# Soll-Länge. Ist der ursprüngliche String bereits länger, wird er nicht gekürzt, es werden aber auch keine weiteren Zeichen hinzugefügt
 +
# Wenn L, werden die Zeichen vorne hinzugefügt, andernfalls hinten
 +
# Zeichen, die soweit und so oft hinzugefügt werden, bis die Soll-Länge erreicht ist. Umfasst der Parameter mehrere Zeichen, werden diese ggf. nicht alle hinzugefügt.
 +
# optional: Länge, auf die der ursprüngliche String vor der weiteren Verarbeitung gekürzt wird.
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  #sql_exec   k_datechg="$DFMT($NOW(),yyyy-mm-dd hh:mm:ss)"
+
  sql   text1 = '$PAD($VAR(text1),70,R, )'
 +
 
 +
==$RANDOM()==
  
=Bool'sche Funktionen=
+
Ermittelt einen zufälligen Wert
  
Die folgenden Funktionen geben Y oder N zurück.
+
'''Parameter'''
  
==$BOOL()==
+
# Typ des Ergebnisses
 +
## curr - Zahl mit zwei Nachkommastellen in den Grenzen Parameter 2 - Parameter 3
 +
## curr4 - Zahl mit vier Nachkommastellen in den Grenzen Parameter 2 - Parameter 3
 +
## date - Datum in den Grenzen Parameter 2 - Parameter 3
 +
## int - ganze Zahl  in den Grenzen Parameter 2 - Parameter 3
 +
## ld - Key einer Nachschlageliste, Name der Nachschlageliste im Parameter 2
 +
## ldv - Value einer Nachschlageliste, Name der Nachschlageliste im Parameter 2
 +
## ls - Key eines Specials, Name des Specials im Parameter 2
 +
## lsv - Value eines Specials, Name des Specials im Parameter 2
 +
## text, text2, text3... - Zeile eines Textes
 +
# untere Grenze bzw. Name der Nachschlageliste oder des Specials
 +
# obere Grenze
  
Wertet das bool'sche Statement im Parameter aus.
+
'''Beispiel'''
  
'''Operatoren'''
+
#coutl $RANDOM(date,01.01.2022,31.12.2022)
 +
#coutl $RANDOM(text2)
  
* = gleich
+
==$SUBSTR()==
* == gleich ohne Berücksichtigung der Groß- und Kleinschreibung
+
 
* <> ungleich
+
Kopiert aus dem String im ersten Parameter einen Teil der Zeichen.
* != ungleich
 
* > größer
 
* >= größer gleich
 
* < kleiner
 
* <= kleiner gleich
 
* and Und-Verknüpfung
 
* or ODER-Verknüpfung
 
  
Hinweis: Die Statements werden von links nach rechts ausgewertet, and und or sind gleichwetig, gegebenenfalls müssen Klammern eingesetzt werden.
+
(Hinweis: Selbe Funktionalität wie $COPY())
  
 
'''Parameter'''
 
'''Parameter'''
  
# Bool'sches Statement, das ausgewertet wird
+
# String, aus dem kopiert werden soll
 +
# Position im String, ab dem Zeichen kopiert werden sollen
 +
# optional: Anzahl der Zeichen, die kopiert werden sollen. Wenn dieser Parameter fehlt, werden alle Zeichen ab der angegebenen Position kopiert.
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  #cout   c="$BOOL((17 > 22) or (5 > 3))"
+
  #grdcol   f=ref  c1="Ref"   w=30 y=link   ro=Y  cmdn=xtodo_add(link,$SUBSTR($PVAL(grid,ctype,sel),1,2))
  #cout   c="$BOOL(17 > 22 or 5 > 3)"
 
  
==$EMPTY()==
+
==$STREP()==
  
Gibt Y zurück, wenn der Parameter ein leerer String ist. (Leerzeichen zählen auch als leerer String.)
+
("string replace") Ersetzt Zeichen im String durch andere Zeichen.
  
 
'''Parameter'''
 
'''Parameter'''
  
# String, der geprüft wird
+
# String, in welchen Zeichen ersetzt werden sollen.
 
+
# Zeichen, die ersetzt werden sollen
'''Beispiel'''
+
# Zeichen, die an deren Stelle treten sollen
 +
# optional: Optionen (kombinierbar)
 +
## i - Groß- und Kleinschreibung ignorieren
 +
## a - Alle Vorkommen ersetzen (andernfalls wird nur das erste Vorkommen ersetzt)
 +
 
 +
'''Beispiele'''
 +
 
 +
#page_val  i=vl  col=1  row=3  z="$STREP($PVAL(vl,1,2), ,_,a)"
 +
#page_val  i=vl  col=1  row=3  z=$STREP($PVAL(vl,1,2),$CHR(space),_,a)
  
~ $EMPTY($DATE(n,grpname))
+
Hinweis: Beide Beispiele haben exakt dieselbe Funktion. Im oberen Beispiel steht das Leerzeichen direkt im Text, dafür muss der komplette Parameter in doppelte Anführungszeichen, im unteren Beispiel wird das Leerzeichen durch $CHR(space) eingefügt, dafür können die Leerzeichen unterbleiben.
  
==$IN()==
+
==$STROP()==
  
Gibt Y zurück, wenn sich der erste Parameter in der Menge der nachfolgenden Parameter befindet. Groß- und Kleinschreibung wird im Gegensatz zu $INIC() beachtet
+
("string operation") Sammelsurium von String-Operationen
  
 
'''Parameter'''
 
'''Parameter'''
  
# Wert, der geprüft wird
+
# Typ der Operation
# Liste, gegen die geprüft wird
+
## trim - entfernt führende und folgende Leerzeichen
 +
## trimleft - entfernt führende Leerzeichen
 +
## trimright - entferne folgende Leerzeichen
 +
## quote - setzt den String in einfache Anführungszeichen
 +
## unquote - entfernt einschließende einfache Anführungszeichen
 +
## dquote - setzt den String in doppelte Anführungszeichen
 +
## unqduote - entfernt einschließende doppelte Anführungszeichen
 +
## ex_filepath - entspricht der Delphi-Funktion ExtractFilePath
 +
## ex_filedir - entspricht der Delphi-Funktion ExtractFileDir
 +
## ex_filedrive - entspricht der Delphi-Funktion ExtractFileDrive
 +
## ex_filename - entspricht der Delphi-Funktion ExtractFileName
 +
## ex_fileext - entspricht der Delphi-Funktion ExtractFileExt
 +
# String, der bearbeitet werden soll
  
'''Beispiel'''
 
  
Die erste Anweisung gibt Y und die zweite N zurück
+
'''Beispiele'''
  
  #cout   c="$IN(beta,alpha,beta,gamma,delta)"
+
  #cout   c=$STROP(quote,Test)
#cout    c="$IN(beta,alpha,BETA,gamma,delta)"
 
  
==$INIC()==
+
==$STREXTR()==
  
Gibt Y zurück, wenn sich der erste Parameter in der Menge der nachfolgenden Parameter befindet. Groß- und Kleinschreibung wird im Gegensatz zu $IN() nicht beachtet beachtet
+
("string extract") Extrahiert einen Teil aus einem String.
  
 
'''Parameter'''
 
'''Parameter'''
  
# Wert, der geprüft wird
+
# String, aus dem extrahiert werden soll
# Liste, gegen die geprüft wird
+
# Extraktionstyp
 +
## ffe ("from first exclude") - Extrahiert ab der Zeichenfolge im dritten Parameter und schließt diese Zeichenfolge aus
 +
## ffi ("from first include") - Extrahiert ab der Zeichenfolge im dritten Parameter und schließt diese Zeichenfolge ein
 +
## tfe ("to first exclude") - Extrahiert bis zur Zeichenfolge im dritten Parameter und schließt diese Zeichenfolge aus
 +
## tfi ("to first include") - Extrahiert bis zur Zeichenfolge im dritten Parameter und schließt diese Zeichenfolge ein
 +
## fle ("from last exclude") - Extrahiert ab dem letzten Vorkommen der Zeichenfolge im dritten Parameter und schließt diese Zeichenfolge aus
 +
## fli ("from last include") - Extrahiert ab dem letzten Vorkommen der Zeichenfolge im dritten Parameter und schließt diese Zeichenfolge ein
 +
## tle ("to last  exclude") - Extrahiert bis zum letzten Vorkommen der Zeichenfolge im dritten Parameter und schließt diese Zeichenfolge aus
 +
## tli ("to last include") - Extrahiert bis zum letzten Vorkommen der Zeichenfolge im dritten Parameter und schließt diese Zeichenfolge ein
  
'''Beispiel'''
 
  
Beide Anweisungen geben Y zurück
+
# Trennzeichen
 +
 
 +
'''Beispiele'''
  
  #cout    c="$INIC(beta,alpha,beta,gamma,delta)"
+
  #cout   c="$STREXTR(test;test2,ffe,;)"   -- Ergebnis: test2
  #cout   c="$INIC(beta,alpha,BETA,gamma,delta)"
+
#cout  c="$STREXTR(test;test2,ffi,;)"    -- Ergebnis: ;test2
 +
#cout  c="$STREXTR(test;test2,tfe,;)"   -- Ergebnis: test
 +
  #cout   c="$STREXTR(test;test2,tfi,;)"    -- Ergebnis: test;
 +
#cout  c="$STREXTR(test;!§§test2,tfe,;!§§)"   -- Ergebnis: test
  
==$ISCURR()==
+
==$TRIM()==
  
Gibt Y zurück, wenn sich der Parameter in einen Currency-Wert wandeln lässt
+
Entfernt Leerzeichen und Zeilenumbrüche am Rand des Strings
  
 
'''Parameter'''
 
'''Parameter'''
  
# Wert, der geprüft wird
+
# String, der getrimmt werden soll
 +
# optional
 +
## L - trimmt nur auf der linken Seite
 +
## R - trimmt nur auf der rechten Seite
  
 
'''Beispiel'''
 
'''Beispiel'''
  
~ $ISCURR($DATA(n,rechnungssumme))
+
#var_set  n=test  z=$TRIM($VAL(1),R)
  
==$ISINT()==
+
==$UPP()==
  
Gibt Y zurück, wenn sich der Parameter in einen ganzzahligen Wert wandeln lässt
+
Wandelt den übergebenen String in Großbuchstaben um.
  
 
'''Parameter'''
 
'''Parameter'''
  
# Wert, der geprüft wird
+
# String, der in Großbuchstaben gewandelt werden soll.
  
 
'''Beispiel'''
 
'''Beispiel'''
  
~ $ISINT($DATA(n,tage))
+
~ $UPP($EDT(edt1)) = BUS
  
==$INTMAX()==
+
==$VT()==
  
Gibt Y zurück, wenn die Zahl im ersten Parameter nicht größer ("maximal gleich") als die Zahl im zweiten Parameter ist.
+
Die Funktion $VT ("Value Translate") ersetzt Werte durch andere. Groß- und Kleinschreibung wird beim Vergleich berücksichtigt.
  
 
'''Parameter'''
 
'''Parameter'''
  
# Zahl, die verglichen wird
+
# String, dessen Inhalte ersetzt werden soll
# Zahl. mit der vergleichen wird
+
# Else-Ergebnis; wird dann verwendet, wenn keine andere Entsprechung erkannt wird.
 +
# Vergleichswert 1
 +
# Ergebnis, wenn Vergleichswert 1 dem ersten Parameter entspricht
 +
# Vergleichswert 2
 +
# Ergebnis, wenn Vergleichswert 2 dem ersten Parameter entspricht
 +
# Vergleichswert 3
 +
# Ergebnis, wenn Vergleichswert 3 dem ersten Parameter entspricht
 +
...
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  ~ $INTMAX($DATA(n,lfdnr), 17)
+
  #coutl $VT(Frau,1,Herr,2,Frau,3)
 +
-- Frau -> 3
 +
-- Herr -> 2
 +
-- Test -> 1
 +
-- Firma -> 1
 +
 
 +
==$VTVL()==
 +
 
 +
Die Funktion $VTVL ("Value Translate ValueList") ersetzt Werte durch andere. Groß- und Kleinschreibung wird beim Vergleich berücksichtigt.
 +
 
 +
Im Gegensatz zu $VT werden die zu prüfenden Werte und deren Entsprechungen nicht über Parameter übergeben, sondern aus einer Werte-Liste geholt, die in einem Text gespeichert sein muss.
 +
 
 +
Eine solche Werte-Liste lässt sich wie folgt aufbauen
  
==$INTMIN()==
+
key1=value1
 +
key2=value2
 +
key3=value3
 +
key4=value4
 +
...
  
Gibt Y zurück, wenn die Zahl im ersten Parameter nicht kleiner ("minimal gleich") als die Zahl im zweiten Parameter ist.
+
Eine solche Werte-Liste lässt sich auch mit #sql_opentvl erzeugen, siehe Beispiel.
  
 
'''Parameter'''
 
'''Parameter'''
  
# Zahl, die verglichen wird
+
# String, dessen Inhalte ersetzt werden soll
# Zahl. mit der vergleichen wird
+
# Else-Ergebnis; wird dann verwendet, wenn keine andere Entsprechung erkannt wird.
 +
# Nummer des Textes, in dem sich die Werteliste befindet.
 +
...
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  ~ $INTMIN($DATA(n,lfdnr), 17)
+
  #sql select userid as ckey, shortname as cvalue from user_user
 +
#sql_opentvl n=1
 +
#coutl $VTVL(591,(nicht gefunden),1)
 +
 
 +
==$XR()==
  
==$NEMPTY()==
+
Die Funktion $XR ("XmlReplace") ersetzt in XML nicht zulässige Zeichen:
 +
* aus & wird $amp ;
 +
* aus < wird &lt ;
 +
* aus > wird &gt ;
 +
* aus " wird &quot ;
 +
* aus ' wird &apos ;
  
("not empty") Gibt Y zurück, wenn der Parameter nicht leer ist.  
+
(Hinweis: Das Leerzeichen vor dem Semikolon soll verhindern, dass die Zeichen hier in der Darstellung ersetzt werden und wird nicht eingefügt.)
  
 
'''Parameter'''
 
'''Parameter'''
  
# String, dessen Inhalt geprüft wird. Leerzeichen gelten als leerer String.
+
# String, dessen Zeichen ggf. ersetzt werden sollen
  
 
'''Beispiel'''
 
'''Beispiel'''
 
~ $NEMPTY($EDT(edt1))
 
  
==$DATEMINREL()==
+
#text <firmenname>$XR($DATA(dat,firmenname))</firmenname>
  
Gibt Y zurück, wenn das Datum im ersten Parameter nicht kleiner ("minimal gleich") dem aktuellen Datum ist, das um die Anzahl Tage im zweiten Parameter verändert wurde. Wird gerne verwendet, um das Erreichen von Deadlines zu prüfen.
+
==$XRR()==
 +
 
 +
Umkehrfunktion von $XR()
 +
* aus $amp ; wird &
 +
* aus &lt ; wird <
 +
* aus &gt ; wird >
 +
* aus &quot ; wird "
 +
* aus &apos ; wird '
  
 
'''Parameter'''
 
'''Parameter'''
  
# Datum, das geprüft wird
+
# String, dessen Zeichen ggf. ersetzt werden sollen
# Anzahl an Tage, die dem aktuellen Datum vor der Prüfung hinzu addiert werden
 
  
'''Beispiel'''
+
=Integer-Funktionen=
  
~ $DATEMINREL($DATA(n,datum), 3)
+
Die folgenden Funktionen geben eine ganze Zahl zurück
  
==$DATEMAXREL()==
+
==$DEC()==
  
Gibt Y zurück, wenn das Datum im ersten Parameter nicht größer ("maximal gleich") dem aktuellen Datum ist, das um die Anzahl Tage im zweiten Parameter verändert wurde. Wird gerne verwendet, um das Erreichen von Deadlines zu prüfen.
+
Verringert die Zahl im ersten Parameter.
  
 
'''Parameter'''
 
'''Parameter'''
  
# Datum, das geprüft wird
+
# Zahl die verringert werden soll.
# Anzahl an Tage, die dem aktuellen Datum vor der Prüfung hinzu addiert werden
+
# optional: Zahl, um die verringert werden soll. Wenn nicht vorhanden, dann 1.
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  ~ $DATEMAXREL($DATA(n,datum), 3)
+
  #setval  n=1  z=$DEC($VAL(1))
  
==$DATEBETWEEN==
+
==$ICALC()==
  
Gibt Y zurück, wenn das Datum des ersten Parameters im angegebenen Bereich liegt.
+
Führt eine Berechnung mit ganzzahligen Werten durch.
 
 
Alle Paremeter, die sich nicht in ein Datum wandeln lassen, werden zu 0 (30.12.1899) konvertiert.
 
  
 
'''Parameter'''
 
'''Parameter'''
  
# Wert, der geprüft wird
+
# Operator, es stehen zur Verfügung
# Untere Grenze des Bereichs
+
## +
# Obere Grenze des Bereichs
+
## -
# und weitere: Das Ergebnis ist auch dann Y, wenn der erste Parameter diesem Datum entspricht. Siehe Beispiel.
+
## *
 +
## div
 +
## mod
 +
# Erste Zahl
 +
# Zweite Zahl
 +
# optional beim Operator +: weitere Summanden
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  #cout  c="Test $DATEBETWEEN($TODAY(),1.1.2020,2.2.2022)"
+
  #cout  c=$ICALC(mod,17,5)
  
==$NOT==
+
==$INC()==
  
Invertiert einen bool'schen Wert. Aus Y (y, J, j, 1) wird N und aus N wird Y.
+
Erhöht die Zahl im ersten Parameter.
  
 
'''Parameter'''
 
'''Parameter'''
  
# Wert, der invertiert wird
+
# Zahl die erhöht werden soll.
 +
# optional: Zahl, um die erhöht werden soll. Wenn nicht vorhanden, dann 1.
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  #coutl $NOT(2)
+
  #setval  n=1  z=$INC($VAL(1))
  
==$NUMBETWEEN==
+
==$INTLEN()==
  
Gibt Y zurück, wenn die Zahl des ersten Parameters im angegebenen Bereich liegt.
+
Ist der String im Parameter eine ganz Zahl, dann wird deren Länge in Zeichen zurückgegeben, andernfalls -1; ein leerer String im ersten Parameter ergibt 0.
  
Alle Paremeter, die sich nicht in eine Zahl wandeln lassen, werden zu 0 konvertiert.
+
'''Parameter'''
  
'''Parameter'''
+
# Zahl, deren Länge ermittelt wird.
  
# Wert, der geprüft wird
+
'''Beispiel'''
# Untere Grenze des Bereichs
+
 
# Obere Grenze des Bereichs
+
~ $INTLEN($EDT(edt1)) = 4
# und weitere: Das Ergebnis ist auch dann Y, wenn der erste Parameter dieser Zahl entspricht. Siehe Beispiel.
+
 
 +
==$LEN()==
 +
 
 +
Ermittelt die Länge eines Strings in Zeichen.
  
'''Beispiele'''
+
'''Parameter'''
  
#page_check  c="Die Schuhgröße muss zwischen 28 und 56 liegen"  chk="$NUMBETWEEN($PVAL(vl,schuhgroesse),28,56)"
+
# String, dessen Länge ermittelt werden soll.
#page_check  c="Die Schuhgröße muss zwischen 28 und 56 liegen"  chk="$NUMBETWEEN($PVAL(vl,schuhgroesse),28,56,)"
 
  
Die beiden Beispiele unterscheiden sich auf den ersten Blick kaum. Bei der ersten Zeile muss jedoch eine Schuhgröße eingegeben werden. Bleibt das Feld im VL-Segment leer, so wird dieser fehlende Wert nach 0 konvertiert und liegt nicht zwischen 28 und 56.
+
'''Beispiel'''
  
Anders bei der zweiten Zeile: Das Komma vor der schließenden Klammer sorgt für einen vierten Parameter, der ebenfalls leer ist und damit nach 0 gewandelt wird. Auf diese Weise werden die leere Eingaben (und die Eingabe von 0) gültig.
+
~ $LEN($EDT(edt1)) = 4
  
==$REGEX()==
+
==$LEVENSHTEIN()==
  
Die Funktion $REGEX() ("regular expressions") prüft, ob der String in Parameter 1 den Anforderungen von Parameter 2 entspricht (Ergebnis Y) oder nicht (Ergebnis N).
+
Ermittelt die Levenshtein-Distanz (https://de.wikipedia.org/wiki/Levenshtein-Distanz) der beiden übergebenen Strings
  
 
'''Parameter'''
 
'''Parameter'''
  
# String, der geprüft werden soll
+
# erster String
# Regulärer Ausdruck, mit dem der String in Parameter 2 geprüft wird.
+
# zweiter String
  
 
'''Beispiel'''
 
'''Beispiel'''
  
~ $REGEX($VAR(med),^[A-Z]{3}$)
+
#coutl $LEVENSHTEIN(alpha,beta)
 +
 
 +
==$POS()==
  
==$TEXT_HASLINE()==
+
Ermittelt die Position des Substrings in einem String. Das Funktionsergebnis ist die Position, das erste Zeichen ist 1. 0 wird zurück gegeben, wenn der Substring im String nicht vorkommt.
 +
 
 +
'''Parameter'''
 +
 
 +
# Substring (nach dem gesucht wird)
 +
# String (in dem gesucht wird)
 +
# optional: Wenn ic (ignore case), dann wird bei der Suche die Groß- und Kleinschreibung nicht beachtet.
 +
 
 +
'''Beispiel'''
 +
 
 +
~ $POS($EDT(edt1),$VAR(1),ic) > 0
 +
 
 +
==$RANDOM()==
 +
 
 +
Ermittelt einen zufälligen Wert zwischen der oberen und unteren Grenze
 +
 
 +
'''Parameter'''
 +
 
 +
# Typ
 +
## int - zufällige Ganzzahl
 +
## date - zufälliges Datum
 +
## curr - zufällige Zahl mit zwei Nachkommastellen
 +
## curr4 - zufällige Zahl mit vier Nachkommastellen
 +
## text1, text2, text3... - zufällige Zeile aus dem jeweiligen Text; text ist text1; untere und obere Grenze bleiben unberücksichtigt
 +
## ld - zufälliger Schlüssel-Wert aus einer Nachschlageliste. Der Name der Nachschlageliste ist als zweiter Parameter (untere Grenze) zu übergeben
 +
## ldv - zufälliger Text aus einer Nachschlageliste. Der Name der Nachschlageliste ist als zweiter Parameter (untere Grenze) zu übergeben
 +
## ls - zufälliger Schlüssel-Wert aus einem Special. Der Name des Specials ist als zweiter Parameter (untere Grenze) zu übergeben
 +
## lsv - zufälliger Text aus einem Special. Der Name des Specials ist als zweiter Parameter (untere Grenze) zu übergeben
 +
# untere Grenze
 +
# obere Grenze
 +
 
 +
'''Beispiel'''
 +
 
 +
#coutl $RANDOM(int,1,6)
 +
 
 +
=Datumsfunktionen=
 +
 
 +
==$INCDATE()==
 +
 
 +
Die Funktione  $INCDATE() verändert das Datum im ersten Parameter um die Anzahl Tage im zweiten Parameter.
 +
 
 +
'''Parameter'''
 +
 
 +
# Datum, das verändert werden soll
 +
# optional: Die Tage, um die verändert werden soll; wenn leer, dann 1.
 +
 
 +
'''Beispiel'''
 +
 
 +
#cout  c=$INCDATE($NOW(),-3)  clr=Y
 +
 
 +
==$INT2TIME()==
 +
 
 +
Macht aus z.B. 1130 die Zeit 11:30
 +
 
 +
'''Parameter'''
 +
 
 +
# Zeit im Integer-Format
 +
 
 +
'''Beispiel'''
 +
 
 +
#sql_exec  k_time=$INT2TIME($VAL(1))
 +
 
 +
==$NOW()==
 +
 
 +
Gibt das aktuelle Datum und die aktuelle Uhrzeit im Format dd.mm.yyyy hh:mm:ss zurück.
 +
 
 +
'''Parameter'''
 +
 
 +
(keine)
 +
 
 +
'''Beispiel'''
 +
 
 +
#execsql  k_datechg=$NOW()
 +
 
 +
==$NOWFMT()==
 +
 
 +
Gibt das aktuelle Datum und/oder die aktuelle Uhrzeit im angegebenen Format zurück.
 +
 
 +
'''Parameter'''
 +
 
 +
# Formatierungsstring (Syntax wie FormatDateTime in Delphi)
 +
 
 +
'''Beispiel'''
 +
 
 +
#sql_exec  k_datechg="$NOWFMT(yyyy-mm-dd hh:mm:ss)"
 +
 
 +
==$NOWMIN()==
 +
 
 +
Gibt das aktuelle Datum und die aktuelle Uhrzeit ohne Sekunden (also dd.mm.yyyy hh:mm) zurück
 +
 
 +
'''Parameter'''
 +
 
 +
(keine)
 +
 
 +
'''Beispiel'''
 +
 
 +
#sql_exec  k_datechg=$NOWMIN()
 +
 
 +
==$TODAY()==
 +
 
 +
Gibt das aktuelle Datum im Format dd.mm.yyyy zurück.
 +
 
 +
Hinweis: Wenn das Datum in einem anderen Format benötigt wird, ist $NOWFMT() das Mittel der Wahl.
 +
 
 +
'''Parameter'''
 +
 
 +
(keine)
 +
 
 +
'''Beispiel'''
 +
 
 +
#sql_exec  k_datechg=$TODAY()
 +
 
 +
==$DFMT()==
 +
 
 +
("date formated") Formatiert das übergebene Datum.
 +
 
 +
'''Parameter'''
 +
 
 +
# Datum, ggf. mit Uhrzeit, das formatiert werden soll.
 +
# Formatierungsstring wie in Delphi
 +
# optional: Wenn hn ("hide null"), dann wird ein leerer String zurück gegeben, wenn das Datum kleiner/gleich 1
 +
 
 +
'''Beispiel'''
 +
 
 +
#sql_exec  k_datechg="$DFMT($NOW(),yyyy-mm-dd hh:mm:ss)"
 +
 
 +
=Bool'sche Funktionen=
 +
 
 +
Die folgenden Funktionen geben Y oder N zurück.
 +
 
 +
==$BFMT()==
 +
 
 +
Formatiert einen bool'schen Wert
 +
 
 +
'''Parameter'''
 +
 
 +
# Bool'scher Wert
 +
# optional: Ergebnis, wenn Wert Y ('y', 'J', 'j', '1') ist, default Y
 +
# optional: Ergebnis, wenn Wert N (also nicht 'Y', 'y', 'J', 'j', '1') ist, default N
 +
 
 +
'''Beispiel'''
 +
#cout  c=$BFMT($VAR(test),x,)
 +
 
 +
==$BOOL()==
 +
 
 +
Wertet das bool'sche Statement im Parameter aus.
 +
 
 +
'''Operatoren'''
 +
 
 +
* = gleich
 +
* == gleich ohne Berücksichtigung der Groß- und Kleinschreibung
 +
* <> ungleich
 +
* != ungleich
 +
* > größer
 +
* >= größer gleich
 +
* < kleiner
 +
* <= kleiner gleich
 +
* and Und-Verknüpfung
 +
* or ODER-Verknüpfung
 +
 
 +
Hinweis: Die Statements werden von links nach rechts ausgewertet, and und or sind gleichwetig, gegebenenfalls müssen Klammern eingesetzt werden.
 +
 
 +
'''Parameter'''
 +
 
 +
# Bool'sches Statement, das ausgewertet wird
 +
 
 +
'''Beispiel'''
 +
 
 +
#cout  c="$BOOL((17 > 22) or (5 > 3))"
 +
#cout  c="$BOOL(17 > 22 or 5 > 3)"
 +
 
 +
==$EMPTY()==
 +
 
 +
Gibt Y zurück, wenn der Parameter ein leerer String ist. (Leerzeichen zählen auch als leerer String.)
 +
 
 +
'''Parameter'''
 +
 
 +
# String, der geprüft wird
 +
 
 +
'''Beispiel'''
 +
 
 +
~ $EMPTY($DATE(n,grpname))
 +
 
 +
==$IN()==
 +
 
 +
Gibt Y zurück, wenn sich der erste Parameter in der Menge der nachfolgenden Parameter befindet. Groß- und Kleinschreibung wird im Gegensatz zu $INIC() beachtet
 +
 
 +
'''Parameter'''
 +
 
 +
# Wert, der geprüft wird
 +
# Liste, gegen die geprüft wird
 +
 
 +
'''Beispiel'''
 +
 
 +
Die erste Anweisung gibt Y und die zweite N zurück
 +
 
 +
#cout    c="$IN(beta,alpha,beta,gamma,delta)"
 +
#cout    c="$IN(beta,alpha,BETA,gamma,delta)"
 +
 
 +
==$INIC()==
 +
 
 +
Gibt Y zurück, wenn sich der erste Parameter in der Menge der nachfolgenden Parameter befindet. Groß- und Kleinschreibung wird im Gegensatz zu $IN() nicht beachtet beachtet
 +
 
 +
'''Parameter'''
 +
 
 +
# Wert, der geprüft wird
 +
# Liste, gegen die geprüft wird
 +
 
 +
'''Beispiel'''
 +
 
 +
Beide Anweisungen geben Y zurück
 +
 
 +
#cout    c="$INIC(beta,alpha,beta,gamma,delta)"
 +
#cout    c="$INIC(beta,alpha,BETA,gamma,delta)"
 +
 
 +
==$ISCURR()==
 +
 
 +
Gibt Y zurück, wenn sich der Parameter in einen Currency-Wert wandeln lässt
 +
 
 +
'''Parameter'''
 +
 
 +
# Wert, der geprüft wird
 +
 
 +
'''Beispiel'''
 +
 
 +
~ $ISCURR($DATA(n,rechnungssumme))
 +
 
 +
==$ISDATE()==
 +
 
 +
Gibt Y zurück, wenn sich der Parameter in ein Datums- oder DatumsZeit-Wert wandeln lässt
 +
 
 +
'''Parameter'''
 +
 
 +
# Wert, der geprüft wird
 +
# Prüfoperation, default ist date
 +
## date - prüft, ob in ein Datum gewandelt werden kann
 +
## datetime - prüft, ob in ein Datums-Zeit-Wert gewandelt werden kann
 +
 
 +
 
 +
'''Beispiel'''
 +
 
 +
~ $ISDATE($DATA(n,beginn))
 +
 
 +
==$ISINT()==
 +
 
 +
Gibt Y zurück, wenn sich der Parameter in einen ganzzahligen Wert wandeln lässt
 +
 
 +
'''Parameter'''
 +
 
 +
# Wert, der geprüft wird
 +
 
 +
'''Beispiel'''
 +
 
 +
~ $ISINT($DATA(n,tage))
 +
 
 +
==$INTMAX()==
 +
 
 +
Gibt Y zurück, wenn die Zahl im ersten Parameter nicht größer ("maximal gleich") als die Zahl im zweiten Parameter ist.
 +
 
 +
'''Parameter'''
 +
 
 +
# Zahl, die verglichen wird
 +
# Zahl. mit der vergleichen wird
 +
 
 +
'''Beispiel'''
 +
 
 +
~ $INTMAX($DATA(n,lfdnr), 17)
 +
 
 +
==$INTMIN()==
 +
 
 +
Gibt Y zurück, wenn die Zahl im ersten Parameter nicht kleiner ("minimal gleich") als die Zahl im zweiten Parameter ist.
 +
 
 +
'''Parameter'''
 +
 
 +
# Zahl, die verglichen wird
 +
# Zahl. mit der vergleichen wird
 +
 
 +
'''Beispiel'''
 +
 
 +
~ $INTMIN($DATA(n,lfdnr), 17)
 +
 
 +
==$NEMPTY()==
 +
 
 +
("not empty") Gibt Y zurück, wenn der Parameter nicht leer ist.
 +
 
 +
'''Parameter'''
 +
 
 +
# String, dessen Inhalt geprüft wird. Leerzeichen gelten als leerer String.
 +
 
 +
'''Beispiel'''
 +
 +
~ $NEMPTY($EDT(edt1))
 +
 
 +
==$DATEMINREL()==
 +
 
 +
Gibt Y zurück, wenn das Datum im ersten Parameter nicht kleiner ("minimal gleich") dem aktuellen Datum ist, das um die Anzahl Tage im zweiten Parameter verändert wurde. Wird gerne verwendet, um das Erreichen von Deadlines zu prüfen.
 +
 
 +
'''Parameter'''
 +
 
 +
# Datum, das geprüft wird
 +
# Anzahl an Tage, die dem aktuellen Datum vor der Prüfung hinzu addiert werden
 +
 
 +
'''Beispiel'''
 +
 
 +
~ $DATEMINREL($DATA(n,datum), 3)
 +
 
 +
==$DATEMAXREL()==
 +
 
 +
Gibt Y zurück, wenn das Datum im ersten Parameter nicht größer ("maximal gleich") dem aktuellen Datum ist, das um die Anzahl Tage im zweiten Parameter verändert wurde. Wird gerne verwendet, um das Erreichen von Deadlines zu prüfen.
 +
 
 +
'''Parameter'''
 +
 
 +
# Datum, das geprüft wird
 +
# Anzahl an Tage, die dem aktuellen Datum vor der Prüfung hinzu addiert werden
 +
 
 +
'''Beispiel'''
 +
 
 +
~ $DATEMAXREL($DATA(n,datum), 3)
 +
 
 +
==$DATEBETWEEN==
 +
 
 +
Gibt Y zurück, wenn das Datum des ersten Parameters im angegebenen Bereich liegt.
 +
 
 +
Alle Paremeter, die sich nicht in ein Datum wandeln lassen, werden zu 0 (30.12.1899) konvertiert.
 +
 
 +
'''Parameter'''
 +
 
 +
# Wert, der geprüft wird
 +
# Untere Grenze des Bereichs
 +
# Obere Grenze des Bereichs
 +
# und weitere: Das Ergebnis ist auch dann Y, wenn der erste Parameter diesem Datum entspricht.
 +
 
 +
'''Beispiel'''
 +
 
 +
#cout  c="Test $DATEBETWEEN($TODAY(),1.1.2020,2.2.2022)"
 +
 
 +
==$NOT==
 +
 
 +
Invertiert einen bool'schen Wert. Aus Y (y, J, j, 1) wird N und aus N wird Y.
 +
 
 +
'''Parameter'''
 +
 
 +
# Wert, der invertiert wird
 +
 
 +
'''Beispiel'''
 +
 
 +
#coutl $NOT(2)
 +
 
 +
==$NUMBETWEEN==
 +
 
 +
Gibt Y zurück, wenn die Zahl des ersten Parameters im angegebenen Bereich liegt.
 +
 
 +
Alle Paremeter, die sich nicht in eine Zahl wandeln lassen, werden zu 0 konvertiert.
 +
 
 +
'''Parameter'''
 +
 
 +
# Wert, der geprüft wird
 +
# Untere Grenze des Bereichs
 +
# Obere Grenze des Bereichs
 +
# und weitere: Das Ergebnis ist auch dann Y, wenn der erste Parameter dieser Zahl entspricht. Siehe Beispiel.
 +
 
 +
'''Beispiele'''
 +
 
 +
#page_check  c="Die Schuhgröße muss zwischen 28 und 56 liegen"  chk="$NUMBETWEEN($PVAL(vl,schuhgroesse),28,56)"
 +
#page_check  c="Die Schuhgröße muss zwischen 28 und 56 liegen"  chk="$NUMBETWEEN($PVAL(vl,schuhgroesse),28,56,)"
 +
 
 +
Die beiden Beispiele unterscheiden sich auf den ersten Blick kaum. Bei der ersten Zeile muss jedoch eine Schuhgröße eingegeben werden. Bleibt das Feld im VL-Segment leer, so wird dieser fehlende Wert nach 0 konvertiert und liegt nicht zwischen 28 und 56.
 +
 
 +
Anders bei der zweiten Zeile: Das Komma vor der schließenden Klammer sorgt für einen vierten Parameter, der ebenfalls leer ist und damit nach 0 gewandelt wird. Auf diese Weise werden die leere Eingaben (und die Eingabe von 0) gültig.
 +
 
 +
==$REGEX()==
 +
 
 +
Die Funktion $REGEX() ("regular expressions") prüft, ob der String in Parameter 1 den Anforderungen von Parameter 2 entspricht (Ergebnis Y) oder nicht (Ergebnis N).
 +
 
 +
'''Parameter'''
 +
 
 +
# String, der geprüft werden soll
 +
# Regulärer Ausdruck, mit dem der String in Parameter 2 geprüft wird.
 +
 
 +
'''Beispiel'''
 +
 
 +
~ $REGEX($VAR(med),^[A-Z]{3}$)
 +
 
 +
==$TEXT_HASLINE()==
  
 
Die Funktion $TEXT_HASLINE() prüft, ob die als Parameter 2 übergebene Textzeile in einem Text vorkommt. Es wird nur auf komplette Textzeilen geprüft. Wird zum Beispiel verwendet, um eine Liste von Kundennummern zu erstellen, und dann auf einzelne Nummern zu prüfen.
 
Die Funktion $TEXT_HASLINE() prüft, ob die als Parameter 2 übergebene Textzeile in einem Text vorkommt. Es wird nur auf komplette Textzeilen geprüft. Wird zum Beispiel verwendet, um eine Liste von Kundennummern zu erstellen, und dann auf einzelne Nummern zu prüfen.
  
'''Parameter'''
+
'''Parameter'''
 
+
 
# Nummer des Textes
+
# Nummer des Textes
# Textzeile, deren Vorkommen geprüft wird
+
# Textzeile, deren Vorkommen geprüft wird
# Ergebnis, wenn die Textzeile vorkommt; default Y
+
# Ergebnis, wenn die Textzeile vorkommt; default Y
# Ergebnis, wenn die Textzeile nicht vorkommt; default N
+
# Ergebnis, wenn die Textzeile nicht vorkommt; default N
 
+
 
'''Beispiel'''
+
'''Beispiel'''
 
+
 
  #coutl $TEXT_HASLINE(1,990000018,1,0)
+
  #coutl $TEXT_HASLINE(1,990000018,1,0)
 
+
 
 +
 
 +
==$VIBAN()==
 +
 
 +
Die Funktion $VIBAN() ("validate IBAN") prüft eine IBAN anhand der Prüfziffern (3. und 4. Stelle).
 +
 
 +
'''Parameter'''
 +
 
 +
# IBAN, die geprüft werden soll
 +
 
 +
'''Beispiel'''
 +
 
 +
#coutl $VIBAN(DE12345)
 +
 
 +
=Currency-Funktionen=
 +
 
 +
==$CCALC()==
 +
 
 +
Führt eine Berechnung mit Festkommawerten durch
 +
 
 +
'''Operatoren'''
 +
 
 +
** + - Addition
 +
** - - Subtraktion
 +
** * - Multiplikation
 +
** / - Division
 +
** % - Division und Multiplikation des Ergebnisses mit 100
 +
** +4 - Addition und Ausgabe mit 4 Nachkommastellen
 +
** -4 - Subtraktion und Ausgabe mit 4 Nachkommastellen
 +
** *4 - Multiplikation und Ausgabe mit 4 Nachkommastellen
 +
** /4 - Division und Ausgabe mit 4 Nachkommastellen
 +
** %4 - Division, Multiplikation des Ergebnisses mit 100 und Ausgabe mit 4 Nachkommastellen
 +
 
 +
** B, b, B4, b4 - Bruttobetrag, erster Parameter ist der Netto-Betrag, zweiter Parameter ist der MWSt-Satz in %
 +
** E, e, E4, e4 - Enthaltene MWSt, erster Parameter ist der Brutto-Betrag, zweiter Parameter ist der MWSt-Satz in %
 +
** M, m, M4, m4 - MWSt, erster Parameter ist der Netto-Betrag, zweiter Parameter ist der MWSt-Satz in %
 +
** N, n, N4, n4 - Nettobetrag, erster Parameter ist der Brutto-Betrag, zweiter Parameter ist der MWSt-Satz in %
 +
 
 +
 
 +
'''Parameter'''
 +
 
 +
# Operator
 +
# und weitere: Operanden
 +
 
 +
'''Beispiele'''
 +
 
 +
-- Ergebnis 10
 +
#cout  c="$CCALC(+,1,2,3,4)"
 +
-- Ergebnis 16,67
 +
#cout  c="$CCALC(/,100,2,3)"
 +
 +
#val_set  n=1  z=1038,87
 +
#coutl $CCALC(N,$VAL(1),19)  -  $CCALC(E,$VAL(1),19)  -
 +
 
 +
==$CURR()==
 +
 
 +
Currency-Werte müssen in Funktionen mit einem Punkt als Dezimaltrennzeichen eingegeben werden, da das Komma die Parameter trennt. Sofern Konstanten verwendet werden, lässt sich das einfach so eingeben, sobald aber die Werte aus anderen Funktionen kommen (zum Beispiel $DATA()), müssen sie dann mit $CURR() in dieses Format umgewandelt werden.
 +
 
 +
'''Parameter'''
 +
 
 +
# Vorkommastellen
 +
# Nachkommastellen
 +
 
 +
'''Beispiel'''
 +
 
 +
-- Ergebnis 43,48
 +
#cout  c="$CCALC(/,100,$CURR(2,3))"
 +
-- zum Vergleich; Ergebnis 16,67
 +
#cout  c="$CCALC(/,100,2,3)"
 +
 
 +
==$CFMT()==
  
==$VIBAN()==
+
Formatiert Curreny-Werte
 
 
Die Funktion $VIBAN() ("validate IBAN") prüft eine IBAN anhand der Prüfziffern (3. und 4. Stelle).
 
  
 
'''Parameter'''
 
'''Parameter'''
  
# IBAN, die geprüft werden soll
+
# Wert
 +
# optional: Formatierungsstring, default 0.00
 +
# optional: wenn hn ("hide null"), dann werden leere Strings als Wert auch als leerer String ausgegeben
  
 
'''Beispiel'''
 
'''Beispiel'''
  
  #coutl $VIBAN(DE12345)
+
  #val_set  n=1  z=###,###,###,##0.00
 
+
  #val_set   n=2   z=1337,42
=Currency-Funktionen=
+
  #cout  c=$CFMT($VAL(2),$VAL(1))
 
 
==$CCALC()==
 
 
 
Führt eine Berechnung mit Festkommawerten durch
 
 
 
'''Operatoren'''
 
 
 
** + - Addition
 
** - - Subtraktion
 
** * - Multiplikation
 
** / - Division
 
** % - Division und Multiplikation des Ergebnisses mit 100
 
** +4 - Addition und Ausgabe mit 4 Nachkommastellen
 
** -4 - Subtraktion und Ausgabe mit 4 Nachkommastellen
 
** *4 - Multiplikation und Ausgabe mit 4 Nachkommastellen
 
** /4 - Division und Ausgabe mit 4 Nachkommastellen
 
** %4 - Division, Multiplikation des Ergebnisses mit 100 und Ausgabe mit 4 Nachkommastellen
 
 
 
'''Parameter'''
 
 
 
# Operator
 
# und weitere: Operanden
 
 
 
'''Beispiele'''
 
 
 
-- Ergebnis 10
 
  #cout   c="$CCALC(+,1,2,3,4)"
 
-- Ergebnis 16,67
 
  #cout  c="$CCALC(/,100,2,3)"
 
  
==$CURR()==
+
==$ONLYNUM()==
  
Currency-Werte müssen in Funktionen mit einem Punkt als Dezimaltrennzeichen eingegeben werden, da das Komma die Parameter trennt. Sofern Konstanten verwendet werden, lässt sich das einfach so eingeben, sobald aber die Werte aus anderen Funktionen kommen (zum Beispiel $DATA()), müssen sie dann mit $CURR() in dieses Format umgewandelt werden.
+
Stellt sicher, dass in einem String nur Zahlen (ggf. auch Kommas oder Punkte) enthalten sind.
  
 
'''Parameter'''
 
'''Parameter'''
  
# Vorkommastellen
+
# Zahl
# Nachkommastellen
+
# Art der Operation; default numkomma
 +
## flnnc ("from last not numeric character") - Ab dem letzten Zeichen, das keine Ziffer ist
 +
## num - Nur Ziffern, alle anderen Zeichen werden entfernt
 +
## numkomma - Nur Ziffern und Kommata, alle anderen Zeichen werden entfernt
 +
## numpoint - Nur Ziffern und Punkte, alle anderen Zeichen werden entfernt
 +
## ufnnc ("until first not numeric character") - vom Anfang bis zum ersten Zeichen, das keine Ziffer ist
  
 
'''Beispiel'''
 
'''Beispiel'''
 
+
  -- Ergebnis 123456
  -- Ergebnis 43,48
+
  #coutl   $ONLYNUM(123-456,num)
  #cout   c="$CCALC(/,100,$CURR(2,3))"
+
-- Ergebnis 123
  -- zum Vergleich; Ergebnis 16,67
+
#coutl  $ONLYNUM(123-456,ufnnc)
  #cout   c="$CCALC(/,100,2,3)"
+
  -- Ergebnis 456
 +
  #coutl   $ONLYNUM(123-456,flnnc)

Aktuelle Version vom 7. November 2024, 10:06 Uhr

Das Modul Var sammelt neben den Variablen auch die grundlegenden Prozeduren und Funktionen.

Inhaltsverzeichnis

Variable

#var_set

#setvar setzt den Wert einer Variablen

Hinweis: Variable sind global, auf sie kann auch in Sub-Kommandos zugegriffen werden. Values sind dagegen lokal.

Parameter

  • cnd (condition) - Die Variable wird nur dann gesetzt, wenn cnd=Y ist; Funktionen werden ersetzt
  • ie - "if empty", Wenn der Wert von z/zr/zn leer ist, dann wird ersatzweise der Wert von ie verwendet; ähnlich NVL bei SQL
  • n - Name der Variablen, Groß- und Kleinschreibung wird nicht unterschieden, zwingend erforderlich
  • r (rights) - Die Variable wird nur dann gesetzt, wenn das Recht write vorliegt; default ist frm. Liegt das Recht read vor, so wird statt dem Inhalt von z der Inhalt von zr gesetzt. Liegt kein Recht vor, dann wird der Inhalt von zn gesetzt
  • rf (replace functions) - Wenn Y, dann werden nach der Zuweisung auf die Variable nochmals die Funktionen ersetzt. Wird zum Beispiel benötigt, wenn Code mit Funktionen mittels $DATA() aus der Datenbank geladen wird; Funktionen werden ersetzt, default N; siehe Beispiel
  • z - Wert der Variablen, Funktionen werden ersetzt, default ist ein leerer String
  • zn - Wert der Variablen, wenn das Recht r nicht vorliegt
  • zr - Wert der Variablen, wenn das Recht r nur ein leserecht ist

Beispiele

#var_set   n=test   z="Hello world"
#var_set   n=test2  z=$GUID()
#var_set   n=edt    z=$EDT(edt1)   ie=42
#var_set   n=_page_kunde_adressänderung_ro   z=N   zn=Y   zr=Y   r=kundenservice

Zum Parameter rf: $NOW() in die Zwischenablage kopieren und dann ausführen:

#var_set   n=test  z=$CLIPBOARD()   rf=N
#message   c=$VAR(test)
#var_set   n=test  z=$CLIPBOARD()   rf=Y
#message   c=$VAR(test)

#var_setempty

#var_setempty setzt den Wert einer Variablen, sofern sie (noch) leer ist.

(Besteht der Variableninhalt aus Leerzeichen, gilt die Variable auch als leer.)

Parameter

  • cnd (condition) - Die Variable wird nur dann gesetzt, wenn cnd=Y ist; Funktionen werden ersetzt
  • ie - "if empty", Wenn der Wert von z/zr/zn leer ist, dann wird ersatzweise der Wert von ie verwendet; ähnlich NVL bei SQL
  • n - Name der Variablen, Groß- und Kleinschreibung wird nicht unterschieden, zwingend erforderlich
  • r (rights) - Die Variable wird nur dann gesetzt, wenn das Recht write vorliegt; default ist frm. Liegt das Recht read vor, so wird statt dem Inhalt von z der Inhalt von zr gesetzt. Liegt kein Recht vor, dann wird der Inhalt von zn gesetzt
  • z - Wert der Variablen, Funktionen werden ersetzt, default ist ein leerer String
  • zn - Wert der Variablen, wenn das Recht r nicht vorliegt
  • zr - Wert der Variablen, wenn das Recht r nur ein leserecht ist

Beispiele

#var_setempty   n=test   z="Hello world"
#var_setempty   n=test2  z=$GUID()
#var_setempty   n=edt    z=$EDT(edt1)    ie=42

#var_add

#var_add fügt einer Variablen einen Wert hinzu.

Parameter

  • cnd (condition) - Die Variable wird nur dann gesetzt, wenn cnd=Y ist; Funktionen werden ersetzt
  • ie - "if empty", Wenn der Wert von z/zr/zn leer ist, dann wird ersatzweise der Wert von ie verwendet; ähnlich NVL bei SQL
  • n - Name der Variablen, Groß- und Kleinschreibung wird nicht unterschieden, zwingend erforderlich
  • r (rights) - Die Variable wird nur dann gesetzt, wenn das Recht write vorliegt; default ist frm.
  • y -Typ der Operation; default text
    • curr - Es wird eine Fixkomma-Addition vorgenommen
    • date - Es wird dem Datum eine Anzahl von Tagen hinzugefügt
    • datetime - Es wird dem Datum eine Anzahl von Tagen hinzugefügt, Ergebnis als datetime
    • int - Es wird eine Ganzzahl-Addition vorgenommen
    • month - Es wird dem Datum eine Anzahl von Monaten hinzugefügt
    • text - Der Wert wird als Text hinzugefügt
  • z - Wert, welcher der Variablen hinzugefügt wird, Funktionen werden ersetzt, default ist ein leerer String oder eine 0


Beispiel

#var_set   n=test   z=$NOW()
#var_add   n=test   z=1   y=datetime
#cout   c=$VAR(test)

#var_log

Schreibt den Inhalt aller Variablen in das Debug-Log.

Wird nur zur Fehlersuche verwendet.

Parameter

(keine)

Beispiel

#var_log

$VAR()

Mit der Funktion $VAR() wird auf den Inhalt der Variable zugegriffen.

Parameter

  1. Name der Variable
  2. optional: Der Wert wird vor oder nach der Rückgabe als Funktionsergebnis verändert; nur für ganzzahlige Werte
    1. ib ("increment before") - Der Wert wird vor der Rückgabe um eins erhöht
    2. db ("decrement before") - Der Wert wird vor der Rückgabe um eins verringert
    3. ia ("increment after") - Der Wert wird nach der Rückgabe um eins erhöht
    4. da ("decrement after") - Der Wert wird nach der Rückgabe um eins verringert

Beispiele

#message  c=$VAR(test)
#var_set  n=neuer_wert   z=$VAR(wert)   ie=$VAR(alternativwert)
#execsql   k_lfdnr=$VAR(lfdnr,ib)

Kommandos

(Primär- und Sub) Kommandos sind üblicherweise benannt und werden im Code-Dialog eingegeben.

Es besteht jedoch auch die Möglichkeit, lokale Kommandos innerhalb eines anderen Kommandos zu definieren. Diese Kommandos haben statt eines Kommando-Namens dann dann eine Kommando-Nummer.

Lokale Kommandos werden üblicherweise für folgende Zwecke verwendet:

  • Bei der Verwendung von xlive werden bisweilen Prozeduren eingesetzt, die ihrerseits ein Kommando aufrufen (z.B. #sql_open). Wenn dieses Kommando nichts bereits existiert, kann es nur als lokales Kommando erstellt werden.
  • Wenn das auszuführende Kommando auf derselben Seite stehen soll wie die aufrufende Prozedur.

Siehe als Beispiel: User-Tabelle als CSV-Datei exportieren

#cmd

#cmd fügt dem Kommando eine Zeile hinzu

Es handelt sich dabei um eine nummerierte Prozedur. #cmd fügt dem ersten Kommando eine Zeile hinzu, #cmd2 fügt dem zweiten Kommando eine Zeile hinzu, und so weiter.

Parameter

#cmd hat keine benannten Parameter. Die ganze Zeile nach dem #cmd und dem trennenden Leerzeichen wird hinzugefügt.

Beispiel

#cmd3 #text $DATA(n,login);$DATA(n,shortname);$DATA(n,firstname);$DATA(n,lastname);$DATA(n,userid);

Siehe auch User-Tabelle als CSV-Datei exportieren

#cmd_clear

#cmd_clear löscht ein Kommando

Es handelt sich dabei um eine nummerierte Prozedur. #cmd_clear löscht das erste Kommando, #cmd_clear2 löscht das zweite Kommando, und so weiter.

Parameter

(keine)

Folgen dem #cmd_clear Zeichen, so werden die dem gerade gelöschten Kommando hinzugefügt. Auf diese Weise lässt sich etwas prägnanter formulieren.

Beispiele

#cmd_clear3
#cmd_clear #grd_add   i=grid   f_logtext="Kunde angerufen und nicht erreicht."

#cmd_clearall

#cmd_clearall löscht alle Kommandos

Parameter

(keine)

Beispiel

#cmd_clearall

CSV

Die CSV-Routinen werden verwendet, um CSV-Dateien einzulesen und zu verarbeiten.

#csv_open

#csv_open öffnet eine CSV-Datei

Es handelt sich dabei um eine nummerierte Prozedur. #csv_open öffnet die erste CSV-Datei, #csv_open2 öffnet die zweite CSV-Datei, und so weiter.

Parameter

  • ber - wenn Y, werden die Zeilenumbrüche innerhalb von Feldern durch Leerzeichen ersetzt. Die Felder müssen dabei in doppelten Anführungszeichen eingeschlossen sein.
  • e ("encoding") - Encoding der zu öffnenden Datei, zulässig sind ansi, ascii, utf7, utf8, unicode und bigendianunicode. Bei leerem oder nicht gesetzten Parameter wird das Default-Encoding verwendet (Bei Windows ansi, sonst utf8).
  • fn - ("Filename") Dateiname der CSV-Datei
  • hhr ("has header row") - Wenn Y, ist die erste Zeile der CSV-Datei eine Überschriften-Zeile; für diese wird das in er spezifizierten Kommando nicht ausgeführt, dafür können Spaltenbezeichner für den Zugriff auf die einzelnen Spalten verwendet werden. Groß- und Kleinschreibung ist unerheblich. Muss bereits hier gesetzt werden, wenn mit $CSV_LINE auf den Header zugegriffen werden soll, bevor #csv_line ausgeführt wird.
  • txt ("Text") - alternativ zum Dateinamen fn die Nummer eines Textes, der als CSV-Datei verwendet werden soll.

Beispiel

#csv_open  fn=c:\temp\text.csv

#csv_line

#csv_line geht zeilenweise durch die CSV-Datei

Es handelt sich dabei um eine nummerierte Prozedur. #csv_line geht durch die erste CSV-Datei, #csv_line2 geht durch die zweite CSV-Datei, und so weiter.

Parameter

  • er ("each row") - Kommando, das für jede Zeile der CSV-Datei ausgeführt wird.
  • ert ("each row transaction") - Für jede Ausführung des in er spezifizierten Kommandos wird eine eigene Datenbank-Transaktion ausgeführt, Funktionen werden ersetzt
  • hhr ("has header row") - Wenn Y, ist die erste Zeile der CSV-Datei eine Überschriften-Zeile; für diese wird das in er spezifizierten Kommando nicht ausgeführt, dafür können Spaltenbezeichner für den Zugriff auf die einzelnen Spalten verwendet werden. Groß- und Kleinschreibung ist unerheblich.
  • m ("maximum") - Maximale Anzahl der Zeilen, die verarbeitet wird. Wird gerne bei der Entwicklung verwendet, um die Bearbeitungsgeschwindigkeit zu erhöhen. Funktionen werden ersetzt
  • sep ("separator") - Trennzeichen zwichen den Spalten, default ist das Semikolon, Funktionen werden ersetzt
  • trim - Wenn Y, dann werden in jeder Zelle führende und nachhängende Leerzeichen entfernt; default N, Funktionen werden ersetzt

Beispiel

#csv_line  er=test_csv_line   hhr=Y   m=3

#csv_check

#csv_check prüft die CSV-Datei

Parameter

  • cnt ("count") - Anzahl der Header-Einträge, die geprüft wird; Funktionen werden ersetzt
  • h1, h2... ("header") - Eintrag im Header, der auf existenz geprüft wird; Groß und Kleinschreibung ist unerheblich, Funktionen werden ersetzt.
  • n ("name" / "number") - Name der Variable oder Nummer des Values, in die/den das Ergebnis (Y oder N) geschrieben wird; Funktionen werden ersetzt
  • res ("result") - Name der Variable oder Nummer des Values, in die/den der Ergebnistext geschrieben wird; Funktionen werden ersetzt
  • sep ("separator") - Trennzeichen zwischen den einzelnen Spalten; Funktionen werden ersetzt
  • y - Typ der Prüfung; Funktionen werden ersetzt, default header
    • header - Prüft die Existenz von Spaltennamen im Header. Die zu prüfenden Spaltennamen werden als h1, h2... übergeben, cnt ist entsprechend zu setzen. Wenn alle geprüften Spaltennamen vorhanden sind, wird Y zurück gegeben, ansonsten N. Die fehlenden Spaltennamen werden als Ergebnistext zurück gegeben.

Beispiel

#csv_open   fn=C:\temp\mad\done\MTF3108_ET2607_selektion.CSV
#csv_check   n=1   res=2   cnt=3   h1=eins   h2=zwei   h3=drei
#coutl $VAL(1) - $VAL(2)

#csv_paste

Übernimmt eine CSV-Datei aus der Zwischenablage. Auf die Werte kann mit $SEPLINE() zugegriffen werden, siehe Eine Tabelle in der Zwischenablage in ein PDF-Dokument wandeln

Multi-Row

Mit dem Multi-Row-Modus können Daten eingelesen werden, die in einer Zeile mehrere gleichartige Werte haben.

Daten, die im Single-Row-Modus wie folgt aussehen:

01.01.2020     4465
01.01.2020     8574
01.01.2020     3456
02.01.2020     5467
03.01.2020     2436
03.01.2020     6578
03.01.2020     3456
03.01.2020     6578
03.01.2020     4457
03.01.2020     7658

Würden im Multi-Row-Modus wie folgt aussehen (und könnten auch so eingelesen werden):

01.01.2020     4465     8574     3456
02.01.2020     5467
03.01.2020     2436     6578     3456     6578     4457     7658

Parameter

  • er ("each row") - Kommando, das für jede Zeile der CSV-Datei ausgeführt wird.
  • ern - ("each row no") Das Kommando, das für jede Zeile der Datenmenge aufgerufen wird. Funktionen werden nicht ersetzt. Wenn ern einen Wert hat, bleibt er unberücksichtigt. Üblicherweise wird er verwendet.
  • ert ("each row transaction") - Für jede Ausführung des in er spezifizierten Kommandos wird eine eigene Datenbank-Transaktion ausgeführt.
  • fr ("first row") - Wenn dieser Parameter einen Wert hat, dann muss die kopierte CSV-Datei in der ersten Zeile auch diesen Wert haben, oder die Aktion wird abgebrochen; Funktionen werden ersetzt
  • hhr ("has header row") - Wenn Y, ist die erste Zeile der CSV-Datei eine Überschriften-Zeile; für diese wird das in er spezifizierten Kommando nicht ausgeführt, dafür können Spaltenbezeichner für den Zugriff auf die einzelnen Spalten verwendet werden.
  • mrs ("multi row start") - Erste Spalte für den Multi-Row-Bereich
  • sep ("separator") - Trennzeichen zwichen den Spalten, default ist das Tabulatorzeichen
  • trim - Wenn Y, dann werden in jeder Zelle führende und nachhängende Leerzeichen entfernt; default N, Funktionen werden ersetzt
  • y - Typ; default s
    • m - multi; siehe Abschnitt Multi-Row
    • s - single; die CSV-Datei wird Zeile für Zeile eingelesen


Beispiele

#csv_paste   er=imp_line   hhr=Y
#csv_paste   er=imp_line   y=m   mrs=1

$CSV()

$CSV() greift auf einen Feldinhalt der aktuellen CSV-Zeile zu.

Parameter

  1. Nummer der CSV-Datei
  2. Name der Spalte oder 0-relative Spaltennummer. Name der Spalte setzt voraus, dass bei #csv_line der Parameter hhr gleich Y ist.
  3. optional: Stelle der Zeichens, ab dem der Inhalt des CSV-Feldes zurück gegeben wird
  4. optional: Anzahl der Zeichen, die maximal zurück gegeben werden; wird meist dafür verwendet, damit die maximale Länge von Datenbankfeldern nicht überschritten wird.

Beispiele

#setvar  n=test   z=$CSV(1,0)

Hier im Beispiel wird in der ersten CSV-Datei (#csv_open) auf die erste Spalte (0, da 0-relativ) zugegriffen.

#setvar  n=test   z=$CSV(1,0,1,30)

Wie oben, nur werden nur die ersten 30 Zeichen zurück gegeben

$CSV_LINE()

$CSV_LINE() Gibt eine ganze Zeile einer CSV-Datei zurück

Parameter

  1. Nummer der CSV-Datei
  2. Name der Zeile: header gibt die Header-Zeile zurück, current die aktuelle Zeile in #csv_line


Beispiel

Die Funktion $CSV_LINE wird insbesondere dafür verwendet, um CSV-Dateien mit Daten zu ergänzen. Hier im Beispiel wird jede Zeile mit einer GUID ergänzt.

#cmd_clear #text $CSV_LINE(1,current)$GUID();

#csv_open   fn=c:\temp\ex.csv   hhr=Y
#text_clear $CSV_LINE(1,header)guid;
#csv_line   er=1   hhr=Y

#text_save   fn=c:\temp\ex2.csv

Nach dem Öffnen der bestehenden CSV-Datei (es muss hier bereits hhr gesetzt werden) wird zunächst der Header in Text 1 eingefügt, ergänzt um die Spalte guid und das abschließende Semikolon. Danach gehen wir mit #csv_line durch alle Zeile, fügen diese komplett in Text 1 ein und hängen eine GUID hinten dran. Danach wird die Datei gespeichert.

Text

#text

#text fügt dem Text eine Zeile hinzu

Es handelt sich dabei um eine nummerierte Prozedur. #text fügt dem ersten Text eine Zeile hinzu, #text2 fügt dem zweiten Text eine Zeile hinzu, und so weiter.

Parameter

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

Funktionen werden ersetzt.

Beispiel

#text Zeile 1
#text Zeile 2
#text Und jetzt noch eine GUID: $GUID()
#text Der folgende Text kommt in Großbuchstaben: $UPP(hello world)

#textn

#textn fügt dem Text eine Zeile hinzu. Im Unterschied zu #text werden dabei keine Funktionen ersetzt.

Es handelt sich dabei um eine nummerierte Prozedur. #textn fügt dem ersten Text eine Zeile hinzu, #text2n fügt dem zweiten Text eine Zeile hinzu, und so weiter.

Parameter

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

Funktionen werden dabei nicht ersetzt.

Beispiel

#textn Zeile 1
#textn Zeile 2

#text_clear

#text_clear löscht einen Text

Es handelt sich dabei um eine nummerierte Prozedur. #text_clear löscht den ersten Text, #text_clear2 löscht den zweiten Text, und so weiter.

Parameter

(keine)

Folgen dem #text_clear Zeichen, so werden die dem gerade gelöschten Text hinzugefügt. Auf diese Weise lässt sich etwas prägnanter formulieren.

Beispiel

#text_clear7
#text7 Zeile 1
#text7 Zeile 2

Das vorangestellt #text_clear stellt sicher, dass Text7 leer ist. Alternativ könnte man formulieren:

#text_clear7 Zeile 1
#text7 Zeile 2

#text_save

#text_save speichert einen Text in einer Datei.

Es handelt sich dabei um eine nummerierte Prozedur. #text_save speichert den ersten Text, #text_save2 speichert den zweiten Text, und so weiter.

Parameter

  • bom ("Byte order mark") - Wenn Y, dann wird die Datei mit BOM geschrieben; default Y
  • e ("encoding") - Encoding der zu speichernden Datei, zulässig sind ansi, ascii, utf7, utf8, unicode und bigendianunicode. Bei leerem oder nicht gesetzten Parameter wird das Default-Encoding verwendet (Bei Windows ansi, sonst utf8).
  • fn - Dateiname, unter dem die Datei gespeichert wird. Bestehende Dateien werden überschrieben, sofern das Betriebssystem das nicht verhindert (z.B, weil die Datei gerade geöffnet ist)
  • o ("open") - Öffnet die gespeicherte Datei gleich anschließend.
  • sort - Wenn Y, dann wird die Datei vor dem Speichern sortiert.

Beispiel

#text Hello world
#text_save  fn=$DIR(userroot)hello_world.txt
#text_save  fn=c:\temp\export_vert_export.prepared_.csv   e=utf8   bom=N

#text_open

#text_open öffnet einen Text aus einer Datei, der bisherige Inhalt der Datei wird überschrieben.

Es handelt sich dabei um eine nummerierte Prozedur. #text_open öffnet den ersten Text, #text_open2 öffnet den zweiten Text, und so weiter.

Parameter

  • e ("encoding") - Encoding der zu öffnenden Datei, zulässig sind ansi, ascii, utf7, utf8, unicode und bigendianunicode. Bei leerem oder nicht gesetzten Parameter wird das Default-Encoding verwendet (Bei Windows ansi, sonst utf8).
  • fn - Dateiname der Datei, die geöffnet wird.

Beispiel

#text_open  fn=$DIR(userroot)test.txt
#text Eine weitere Zeile, $GUID()
#text_save  fn=$DIR(userroot)test.txt

#text_props

#text_props stellt Eigenschaften des Textes ein.

Es handelt sich dabei um eine nummerierte Prozedur. #text_props bezieht sich auf den ersten Text, #text_props2 bezieht sich auf den zweiten Text, und so weiter.

Parameter

  • dub ("duplicates") - Verhalten einer sortierten Liste bezüglich Dubletten
    • acc ("accept") - Dubletten werden akzeptiert
    • err ("error") - Dubletten führen zu Fehlern
    • ign ("ignore) - Dubletten werden ignoriert
  • srt ("sorted") - Wenn ja, dann ist die Liste sortiert

Beispiel

#text_props   srt=Y   dup=ign

#text_set

#text_set setzt eine bestimmte Zeile eines Textes

Es handelt sich dabei um eine nummerierte Prozedur. #text_set bezieht sich auf den ersten Text, #text_set2 bezieht sich auf den zweiten Text, und so weiter.

Parameter

  • i ("index") - 0-relativer Index der Zeile, die geschrieben werden soll. Mit last kann die letzte Zeile geschrieben werden, mit all werden alle Zeilen ersetzt, das wird dann gebraucht, wenn mehrzeiliger Text zugewiesen werden soll; Funktionen werden ersetzt
  • z - Text, der geschrieben wird; Funktionen werden ersetzt

Beispiele

#text_set   i=2   z="dritte Zeile"
#text_set   i=last   z="letzte Zeile"
#text_set   i=all   z=$CLIPBOARD()

#text_sort

#text_sort sortiert einen Text

Es handelt sich dabei um eine nummerierte Prozedur. #text_sort bezieht sich auf den ersten Text, #text_sort2 bezieht sich auf den zweiten Text, und so weiter.

Parameter

  • y - Typ, default alpha, Funktionen werden ersetzt
    • alpha - sortiert alphanumerisch
    • inv - invertiert die gegebene Reihenfolge

Beispiel

#val_set   n=1   z=",OU=2nd_Level_T1,OU=Kundenservice,OU=Benutzer,OU=Testtours,OU=Travel"
#text_clear
#text_dissect   z=$VAL(1)   sep=",OU="
#coutl  $TEXT(1)
#text_sort   y=inv
#text_compose   n=1   sep=.
#val_set   n=1   z=tt.$VAL(1)
#coutl $VAL(1)
Ergebnis ist:
2nd_Level_T1
Kundenservice
Benutzer
Testtours
tt.Testtours.Benutzer.Kundenservice.2nd_Level_T1.

#text_dissect

#text_dissect zerteilt einen String anhand einer vorgegebenen Trennzeichenfolge und fügt das Ergebnis dem betreffenden Text hinzu. Gegebenenfalls muss der Text vorher mit #text_clear geleert werden.

Es handelt sich dabei um eine nummerierte Prozedur. #text_dissect bezieht sich auf den ersten Text, #text_dissect bezieht sich auf den zweiten Text, und so weiter.

Parameter

  • cnd - ("condition") Die Prozedur wird nur dann ausgeführt, wenn das Statement in cnd Y ergibt. Default ist Y, Funktionen werden ersetzt
  • ls ("last separator") - wenn Y, wird die sep-Zeichenfolge noch mal dem String angehängt; default N, Funktionen werden ersetzt
  • sep ("separator") - Zeichenfolge, anhand der String zerteilt wird; Funktionen werden ersetzt
  • z - String, der zerlegt wird; Funktionen werden ersetzt

Beispiel

Siehe #text_sort

#text_compose

#text_compose setzt einen Text mithilfe eines Trennzeichens zu einem String zusammen

Es handelt sich dabei um eine nummerierte Prozedur. #text_compose bezieht sich auf den ersten Text, #text_compose bezieht sich auf den zweiten Text, und so weiter.

Parameter

  • cnd - ("condition") Die Prozedur wird nur dann ausgeführt, wenn das Statement in cnd Y ergibt. Default ist Y, Funktionen werden ersetzt
  • ls ("last separator") - Wenn Y, wird die Trennzeichenfolge auch noch mal am Ende des Strings eingefügt; default N, Funktionen werden ersetzt
  • n - Nummer des Values oder Name der Variable, in welche der String geschrieben wird; Funktionen werden ersetzt
  • sep ("separator") - Trennzeichenfolge, die beim Zusammenfügen des Textes verwendet wird; Funktionen werden ersetzt

Beispiel

Siehe #text_sort

#text_act

#text_act bearbeitet einen Text

Es handelt sich dabei um eine nummerierte Prozedur. #text_act bezieht sich auf den ersten Text, #text_act bezieht sich auf den zweiten Text, und so weiter.

Parameter

  • c ("caption") - Text der Zeile, die bei insert eingefügt werden soll; Funktionen werden ersetzt
  • cnd - ("condition") Die Prozedur wird nur dann ausgeführt, wenn das Statement in cnd Y ergibt. Default ist Y, Funktionen werden ersetzt
  • cu ("current") - 0-relative Zeilennummer der Operation; default 0, Funktionen werden ersetzt
  • ne ("new") - 0-relative Zeilennummer als Ziel bei move; default 0, Funktionen werden ersetzt
  • y - Typ der Operation; Funktionen werden ersetzt
    • delete - Löscht die Zeile an Position cu ("current")
    • insert - Fügt den Text c an der Position cu ("current") ein
    • move - verschiebt die Zeile cu ("current") nach Zeile ne ("new")

Beispiel

#text_act   y=move   cu=0

#text_loop

#text_loop geht durch die Zeilen eines Textes und ruft für jede Zeile ''er'' auf

Es handelt sich dabei um eine nummerierte Prozedur. #text_loop bezieht sich auf den ersten Text, #text_loop2 bezieht sich auf den zweiten Text, und so weiter.

Parameter

  • cnd - ("condition") Die Prozedur wird nur dann ausgeführt, wenn das Statement in cnd Y ergibt. Default ist Y, Funktionen werden ersetzt
  • db - ("database") Name der Datenbank, auf die sich ert bezieht
  • er - ("each row") Das Kommando, das für jede Zeile der Datenmenge aufgerufen wird. Funktionen werden ersetzt.
  • ern - ("each row no") Das Kommando, das für jede Zeile der Datenmenge aufgerufen wird. Funktionen werden nicht ersetzt. Wenn ern einen Wert hat, bleibt er unberücksichtigt. Üblicherweise wird er verwendet.
  • ert - ("each row transaction") Wenn Y, wird für jede Zeile der Datenmenge eine eigene Transaktion gestartet und nach der Abarbeitung des Kommandos wieder geschlossen.
  • m - ("maximum") Es wird maximal für die Anzahl der angegebenen Zeilen das in er angegebene Kommando ausgeführt. Dieser Parameter wird häufig dazu verwendet, während der Entwicklung mit einer geringen Zahl von Datensätzen zu arbeiten.
  • nex ("no exception") - Wenn Y, wird bei Exceptions in er nicht abgebrochen, sondern mit dem nächsten Datensatz fortgesetzt. Default N, Funktionen werden ersetzt.
  • n - Name der Variable, in welche die 0-relative Schleifenvariable geschrieben wird. (Es würde auch in einen Value geschrieben, wenn es sich um eine Nummer handelt, das ergibt in der Praxis aber meist nicht viel Sinn) Funktionen werden ersetzt

Beispiel

#text_clear eins
#text zwei
#text drei

#cmd_clear #coutl - $TEXT(1,$VAR(eins))
#text_loop   er=1   n=eins

#tvl_add

Addiert dem Wert in einer Text-Valueliste einen Wert hinzu. Es handelt sich dabei um eine nummerierte Prozedur: #tvl_add arbeitet mit Text 1, #tvl_add2 mit Text 2 und so weiter.

Parameter

  • cnd ("condition") - Die Prozedur wird nur dann ausgeführt, wenn das Statement in cnd Y ergibt. Default ist Y, Funktionen werden ersetzt
  • n ("name") - Name der Zeile, der ein Wert hinzugefügt wird; Funktionen werden ersetzt.
  • y - Typ der Operation, Funktionen werden ersetzt, default text
    • curr - Es wird eine Fixkomma-Addition vorgenommen
    • date - Es wird dem Datum eine Anzahl von Tagen hinzugefügt
    • datetime - Es wird dem Datum eine Anzahl von Tagen hinzugefügt, Ergebnis als datetime
    • int - Es wird eine Ganzzahl-Addition vorgenommen
    • text - Der Wert wird als Text hinzugefügt
  • z - Der Wert, der hinzugefügt wird


Beispiel

#text eins=1
#text zwei=2
#text drei=3
#tvl_add   y=int   n=zwei   z=1
#coutl $TEXT(1)

$TEXT()

Mit der Funktion $TEXT() wird auf den Inhalt des Textes zugegriffen.

Parameter

  1. Nummer des Textes
  2. optional Zeile des Textes (0-relativ). Wenn es keinen zweiten Parameter gibt, wird der komplette Text zurück gegeben. Alternativ als zweiter Parameter eine Sonderfunktion:
    1. cnt / count - Gibt die Anzahl der Zeilen zurück
    2. last - Gibt die letzte Zeile zurück
    3. ix - Gibt die Position des Textes im dritten Parameter zurück
    4. as_line - Gibt den Text als eine Zeile zurück, Zeilenumbrüche werden durch den dritten Parameter ersetzt
  3. optional in abhängigkeit vom zweiten Paremeter
    1. wenn zweiter Parameter ix: Textzeile, nach der mit ix gesucht wird
    2. wenn zweiter Parameter as_line: Zeichenfolge, mit der die Zeilenumbrüche ersetzt werden

Beispiele

#text Zeile 1
#text Zeile 2
#text Zeile 3
#message  c=$TEXT(1)
#code url=$TEXT(1,as_line,&)

Code

Grundsätzlich gilt in BAL: Eine Prozedur - eine Zeile.

Bei vielen und/oder langen Parametern führt das zu recht langen Code-Zeilen und zu Unübersichtlichkeit. Hier können nun Teile der Parameter mit #code in weitere Zeile ausgelagert werden, deren Inhalt dann mit $CODE$ oder $CODE$ der eigentlichen Code-Zeile hinzugefügt wird.

#code

Fügt Text dem Code-Speicher hinzu.

Parameter

#code hat keine benannten Parameter. Die ganze Zeile nach dem #code und dem trennenden Leerzeichen wird hinzugefügt.

Beispiel

#code cnt=2
#code fn1=G:\pics\pic5d68865cdaba62_62767562.jpg
#code fn2=G:\pics\pic5d913c48682128_67979256.jpg
#email_send   from=test@****.de   to=info@*****************.de   bcc=info@*****.de   subject=Testmail   text=$TEXT(1)   $CODE$

$CODE$ / $CODEN$

$CODE$ und $CODEN$ sind keine Funktionen, auch wenn sie auf den ersten Blick ähnlich aussehen. Sie haben keine Parameter und auch keine Klammern, dafür ein abschließendes $.

Beide Anweisungen fügen den Code-Speicher der jeweiligen Zeile hinzu. $CODE$ löscht danach den Code-Speicher, $CODEN$ tut das nicht, so dass dieselben Parameter wiederholt eingefügt werden können (beim letzten Einfügen sollte dann $CODE$ verwendet werden).

Separierte Zeile

Eine separierte Zeile ist eine Textzeile, die mehrere gleichartige Werte enthält, die durch Trennzeichen getrennt sind.

Beispiel:

3244,4465,7763,4536,4356,7777

Solche Zeilen können mit #sepline aufgetrennt werden.

#sepline

Trennt eine separierte Zeile auf und führt für jeden Wert das mit er angegebene Kommando aus.

Es handelt sich dabei um eine nummerierte Prozedur (#sepline, #sepline2...)

Parameter

  • er ("each row") - Das Kommando, das für jeden Wert der separierten Zeile aufgerufen wird. Funktionen werden ersetzt.
  • ern ("each row no") - Das Kommando, das für jeden Wert der separierten Zeile aufgerufen wird. Funktionen werden nicht ersetzt. Wenn ern einen Wert hat, bleibt er unberücksichtigt. Üblicherweise wird er verwendet.
  • ert ("each row transaction") - Wenn Y, wird für jeden Wert der separierten Zeile eine eigene Transaktion gestartet und nach der Abarbeitung des Kommandos wieder geschlossen.
  • m ("maximum") - Es wird maximal für die Anzahl der angegebenen Werte das in er angegebene Kommando ausgeführt. Dieser Parameter wird häufig dazu verwendet, während der Entwicklung mit einer geringen Zahl von Datensätzen zu arbeiten; Funktionen werden ersetzt.
  • sep ("separator") - Das oder die Trennzeichen; default ist das Semikolon.
  • z - Der Inhalt der separierten Zeile; Funktionen werden ersetzt.

Beispiel

#cmd #cout   c=$SEPLINE(1)
#sepline z=3244,4465,7763,4536,4356,7777   sep=,   er=1

$SEPLINE()

Greift auf den einzelnen Wert einer mit #sepline getrennten Zeile zu.

Parameter

  1. Nummer der separierten Zeile

Beispiel

#cmd #cout   c=$SEPLINE(3)
#sepline3 z=3244;4465;7763;4536;4356;7777     er=1

User und Rechte

Aus Gründen der Übersichtlichkeit ist die Rechtevergabe zweistufig:

  1. Es werden (meist am Anfang eines Primär-Kommandos) Rechte-Definitionen erstellt, die einer oder mehreren Benutzergruppen Rechte (lesen oder lesen und schreiben) zuweisen. Die Rechte werden dabei implizit auch allen Untergruppen der angegebenen Benutzergruppe erteilt (Zum Beispiel: Rechte der Gruppe user hat auch implizit die Gruppe user.admin).
  2. Dem Parameter r verschiedener Prozeduren kann dann eine Rechte-Definition zugewiesen werden.

Den Parameter r als Rechte-Definition berücksichtigen die folgenden Prozeduren:

  • #frm
  • Buttons (#btn, #btns_btn)
  • Alle Segmente (#text_seg, #memo_seg, #btns_seg, vl_seg, #grd_seg, #xgrd_seg)
  • Tree (#tree_add, #tree_fill, #tree_fillsql, Lese-Recht reicht)
  • Grid-Spalten (#grd_col, #xgrd_col)
  • #vl_line (für die komplette Zeile (r) und die einzelne Zelle (r1, r2, r3...))

Wo der Parameter r nicht gesetzt ist, wird die Rechte-Definition der Formulars verwendet.

#rights

Setzt eine Rechte-Definition im betreffenden Kommando.

Parameter

  • n ("name") - Name der Rechte-Definition; default ist frm, also dsa Default-Recht für das Formular.
  • r_ ("right") - Prefix für die Benutzergruppe. Für die Rechte-Definition sind die folgenden Werte zulässig
    • n ("no") - kein Recht
    • r ("read") - nur lesen
    • w ("write") - lesen und schreiben

Beispiel

#rights  n=frm   r_user=r   r_user.admin=w

Setzt für alle User das Lese-Recht und für Administratoren das Lese- und Schreibrecht.

#rights_clear

Löscht alle Rechte-Definitionen im betreffenden Kommando.

(Wird in der Praxis selten benötigt, weil Kommandos mit leerer Rechte-Definition starten.)

Parameter

(keine)

Beispiel

#rights_clear

$USERID()

Die ID des angemeldeten Users

Parameter

(keine)

Beispiel

#sql_exec   kusr=$USERID()

$RIGHTUSERID()

Administratoren können andere User einstellen (Userliste links unten im BAF-Client), vor allem um deren Rechte zu prüfen. Die UserID dieses ausgewählten Users kann mit der Funktion $RIGHTUSERID() ermittelt werden.

In fast allen Fällen gilt der folgende Grundsatz: Lesende Operationen mit $RIGHTUSERID(), schreibende Operationen mit $USERID().

Parameter

(keine)

Beispiel

#sql_open   kusr=$RIGHTUSERID()

$ADM()

Gibt den ersten Parameter (oder Y) zurück, wenn der angemeldete User Administrator-Rechte hat, andernfalls den zweiten Parameter (oder N).

Parameter

  1. Wert, der zurückgegeben wird, wenn der angemeldete User Administrator-Rechte hat; sofern kein Wert angegeben ist, Y
  2. Wert, der zurückgegeben wird, wenn der angemeldete User keine Administrator-Rechte hat; sofern kein Wert angegeben ist, N

(keine)

Beispiel

~ $ADM()

$RADM()

Gibt den ersten Parameter (oder Y) zurück, wenn der ausgewählte User Administrator-Rechte hat, andernfalls den zweiten Parameter (oder N).

Parameter

  1. Wert, der zurückgegeben wird, wenn der ausgewählte User Administrator-Rechte hat; sofern kein Wert angegeben ist, Y
  2. Wert, der zurückgegeben wird, wenn der ausgewählte User keine Administrator-Rechte hat; sofern kein Wert angegeben ist, N

Beispiel

~ $RADM()

Ausführen

#exec

Führt ein anderes Kommando aus

Parameter

  • cnd (condition) - Die Variable wird nur dann gesetzt, wenn cnd=Y ist; Funktionen werden ersetzt
  • cmd ("command") - Names des (Primär- oder Sub-) Kommandos, das ausgeführt werden soll.
  • ex ("exception") - Name oder Nummer des Kommandos, das ausgeführt wird, wenn bei der Ausführung von cmd eine Exception auftritt; siehe Beispiele
  • fin ("finally") - Name oder Nummer des Kommandos, das nach der Ausführung von cmd ausgeführt wird - egal ob eine Exception aufgetreten ist oder nicht. Wird nur berücksichtigt, wenn der Parameter ex nicht gesetzt ist.

Beispiele

#exec   cmd="xtodo_page_add(XU,$PVAL(vl,user_user_id),$PVAL(vl,login),$PVAL(vl,shortname)$CHR(crlf)$PVAL(vl,firstname) $PVAL(vl,lastname))"

Das folgende Beispiel löst das Problem, dass ein neues PDF unter demselben Dateinamen nicht erstellt werden kann, wenn beim vorherigen Versuche der Erstellung eine Exception aufgetreten ist. In einem solchen Fall wurde ein #pdf_start, aber kein #pdf_stop ausgeführt, und die geöffnete Datei sperrt diesen Dateiname, bis der BAF-Client geschlossen wird. Lösung dieses Problems ist es, im Parameter ex ein #pdf stop auszuführen; auf das Öffnen der Datei kann in einem solchen Fall verzichtet werden. Mit der Funktion $DATA() wird hier im Beispiel gezielt eine Exception ausgelöst.

#frm  c="c_test_pdf"   y=console

#cmd_clear 
#cmd #pdf_text  c="Hello World"
-- #cmd #pdf_text  c="Hello World $DATA(dat,test)"
#cmd #pdf_stop   o=Y

#pdf_start  fn=$DIR(doc)\test.pdf
#exec   cmd=1   ex="#pdf_stop   o=N"

#cout  c="c_test_pdf executed"

#batchexec

Speichert den Text n in der Datei batch.bat und führt diese aus.

Parameter

  • clr ("clear") - Wenn Y, wird der Text nach Ausführung des Batch-Datei gelöscht; Default Y; Funktionen werden ersetzt;
  • n ("number") - Nummer des Textes; der mit #text gespeicherte Text hat die Nummer 1

Beispiel

#batchexec   n=1

#file_open

Öffnet eine Datei (oder auch eine Webseite)

Parameter

  • fn ("FileName") - Name der Datei oder die URL der Webseite

Beispiel

#file_open  fn=c:\temp\test.csv
#file_open  fn=https://www.google.de

#loop

BAL kennt keine Schleifen als Sprachelement. Um Schleifen mit einer fest Schleifenzahl auszuführen, wird die Prozedur #loop verwendet. lf muss nicht kleiner als lt sein, #loop kann auch von oben nach unten zählen.

Parameter

  • er - ("each row") Das Kommando, das für jede Zeile der Datenmenge aufgerufen wird. Funktionen werden ersetzt.
  • ern - ("each row no") Das Kommando, das für jede Zeile der Datenmenge aufgerufen wird. Funktionen werden nicht ersetzt. Wenn ern einen Wert hat, bleibt er unberücksichtigt. Üblicherweise wird er verwendet.
  • ert - ("each row transaction") Wenn Y, wird für jede Zeile der Datenmenge eine eigene Transaktion gestartet und nach der Abarbeitung des Kommandos wieder geschlossen.
  • lf ("loop from") - Anfangswert der Schleifenvariable; Funktionen werden ersetzt.
  • lt ("loop to") - Endwert der Schleifenvariable; Funktionen werden ersetzt.
  • n ("name") - Name der Variablen, in der die Schleifenvariable gespeichert wird (damit sie an anderer Stelle gelesen werden kann); Funktionen werden ersetzt.

Beispiel

#loop   lf=42   lt=1337   er=test_line

#exit

Die Prozedur #exit bricht die Ausführung auf der jeweiligen Code-Ebene (Kommando bzw. Sub-Kommando) ab

Parameter

(keine)

Beispiel

#page   ras=Y

...

~ $EMPTY($PVAL(vl,id))   and   $PVAL(vl,status) > 20
#sql select nextval('ausza_id') as id
#sql_openval   f_id=1
#page_val   i=vl   f=id   z=$VAL(1)
#save
#exit

~~

...

Der Beispiel-Code befindet sich auf der Seite xausza_page_ausza und baut die entsprechende Seite auf. Er prüft, ob bereits eine ID-Gesetzt ist - wenn nicht, wird über eine Datenbank-Sequenz die nächste ID abgefragt, in das VL-Segment geschrieben und die Seite gespeichert. Beim Speichern der Seite wird sie jedoch neu aufgerufen, also komplett neu aufgebaut, was erst einmal kein Problem ist. Danach würde aber die Ausführung auf der Code-Ebene, auf der sich #save befindet, fortgeführt, was zur Folge hat, dass die dann folgenden Segmente doppelt erscheinen (zunächst die aus dem Neu-Aufbau der Seite, dann die, die von der Fortsetzung des Codes her stammen).

Um dies zu vermeiden muss die Ausführung des Codes nach #save abgebrochen werden.

$EXEC

Führt ein Kommando. Im ausgeführten Kommando kann eine Variable gesetzt werden, die dann als Funktionsergebnis von $EXEC zurückgegeben wird.

Parameter

  1. Kommando, das ausgeführt werden soll
  2. optional: Der Name der Variablen, in der das Ergebnis steht; default ist result

Beispiel

#frm  c="test_funkexec"   y=console
#cout   c=$EXEC(test_funkexec_line)
-- test_funkexec_line
#var_set   n=result   z=42

Dateien und Verzeichnisse

#file_op

Führt eine Operation mit einer Datei oder einem Verzeichnis aus

Parameter

  • cnd - ("condition") Die Prozedur wird nur dann ausgeführt, wenn das Statement in cnd Y ergibt. Default ist Y, Funktionen werden ersetzt
  • fn ("FileName") - Name der Datei oder des Verzeichnisses
  • n - Name der Variable oder Nummer des Values, in die/den das Ergebnis der Operation (Y oder N) geschrieben wird.
  • on ("old name) - der bisherige Dateiname bei RenameFile
  • y - Typ der Operation
    • cd / createdir - Erzeugt ein Verzeichnis
    • cf / copyfile - Kopiert eine Datei (von on zu fn)
    • df / deletefile - Löscht eine Datei
    • fd / forcedirectories - Stellt sicher, dass ein Pfad vorhanden ist
    • rd / removedir - Entfernt ein Verzeichnis
    • rf / renamefile - Benennt eine Datei um, kann auch dazu verwendet werden, eine Datei zu verschieben

Beispiele

#file_op   y=renamefile   on=c:\temp\debug.txt   fn=c:\temp\test\debug.txt   n=1
#cout   c=$VAL(1)

#file_op   y=fd   fn=c:\eins\zwei\drei\vier

#file_search

Sucht Dateien und schreibt die Ergebnisliste in einen Text.

Parameter

  • all - wenn Y, dann werden nach dem Dateinamen auch noch das Dateidatum, die Größe und die Attribute in den Text geschrieben. Default N, Funktionen werden ersetzt
  • clr - ("clear") wenn Y, wird der Text vor der Suche geleert. Default Y, Funktionen werden ersetzt
  • cnd - ("condition") Die Prozedur wird nur dann ausgeführt, wenn das Statement in cnd Y ergibt. Default ist Y, Funktionen werden ersetzt
  • fn ("FileName") - Suchstring, siehe Beispiel; Funktionen werden ersetzt
  • n ("number") - Nummer des Textes, in den die Ergebnisliste geschrieben wird; default 1, Funktionen werden ersetzt.
  • y - Typ der Suche. Default AnyFile, Funktionen werden ersetzt
    • AnyFile
    • ReadOnly
    • Hidden
    • SysFile
    • VolumeID
    • Directory
    • Archive

Beispiel

#file_search   fn=c:\*.ini   n=1   y=0   all_=Y
#coutl $TEXT(1)

#file_wait

Wartet, bis zumindest eine Datei vorhanden ist, die den Kriterien entspricht, und führt dann cmd aus. Wird nach der in to eingestellten Zeit keine Datei gefunden, dann wird mit dem in cmdto eingestellten Kommando abgebrochen.

Parameter

  • all - wenn Y, dann werden nach dem Dateinamen auch noch das Dateidatum, die Größe und die Attribute in den Text geschrieben. Default N, Funktionen werden ersetzt
  • cmd - Kommando, das ausgeführt wird, sobald eine Datei gefunden wird; Funktionen werden ersetzt
  • cmdto - Kommando, das ausgeführt wird, sobald die Prozedur wegen eines TimeOuts abgebrochen wird; Funktionen werden ersetzt
  • cnd - ("condition") Die Prozedur wird nur dann ausgeführt, wenn das Statement in cnd Y ergibt. Default ist Y, Funktionen werden ersetzt
  • fn ("FileName") - Suchstring, siehe Beispiel; Funktionen werden ersetzt
  • sleep - Zeit in ms zwischen den einzelnen Suchen nach einer Datei, die den Kriterien entspricht; Default 1000, Funktionen werden ersetzt
  • to ("TimeOut") - Zeit in ms, nach der die Ausführung abgebrochen wird; Default 15000, Funktionen werden ersetzt
  • y - Typ der Suche. Default AnyFile, Funktionen werden ersetzt
    • AnyFile
    • ReadOnly
    • Hidden
    • SysFile
    • VolumeID
    • Directory
    • Archive

Beispiel

#cmd_clear #cout c="Gefunden"
#cmd_clear2 #cout c="TimeOut"

#file_wait   fn=C:\temp\test\*.txt   cmd=1   cmdto=2

#dir_force

Stellt sicher, dass es den spezifizierten Verzeichnispfad gibt, indem erforderlichenfalls Verzeichnisse angelegt werden.

Parameter

  • n ("name") - Names des Pfads

Beispiel

#dir_force   n=c:\temp\pdf

#dir_proc

Durchsucht ein Verzeichnis nach Dateien, die den angegebenen Kriterien entsprechen, und führt für jede gefundene Datei cmd aus.

Parameter

  • cmd ("command") - Kommando, das für jede gefundene Datei ausgeführt wird
  • dn ("DirectoryName") - Pfad des Verzeichnisses, in dem die Dateien gesucht werden; Funktionen werden ersetzt.
  • done - Verzeichnis, in das die Dateien nach Abarbeitung verschoben werden (sofern der Parameter nicht leer ist). Funktionen werden ersetzt.
  • fn ("filename") - Suchkriterium für den Dateinamen; Funktionen werden ersetzt; Default *
  • n ("name") - Name der Variablen, in welcher der Dateiname der aktuell zu bearbeitenden Datei inklusive Pfad gespeichert wird; Funktionen werden ersetzt; Default dir_proc

Beispiel

#dir_proc   dn=c:\temp\in   done=c:\temp\done   fn=*.csv   cmd=importcsv_line

$FILEINFO()

Liefert Infos über eine Datei

Parameter

  1. Dateiname
  2. Typ der Information, es stehen dabei folgende Optionen zur Verfügung
    • size - Dateigröße in Byte
    • size_point - Dateigröße in Byte, Punkte alle drei Zeichen von rechts
    • size_auto - Dateigröße in Byte, kB, MB oder GB, je nach Größe; mit Einheit
    • size_kb - Dateigröße in kB (analog Windows-Explorer)
    • date - Datum im Format dd.mm.yyyy
    • date_yyyy - Datum im Format yyyymmdd
    • datetime - Datum und Uhrzeit im Format dd.mm.yyyy hh:mm:ss
    • datetime_yyyy - Datum im Format yyyymmddhhmmss
    • exists - Y, wenn die Datei existiert, sonst N

Beispiel

#var_set   n=fn   z="T:\Tools Gruppenrechte\BC3 light\BafClientFM.exe"
#coutl $FILEINFO($VAR(fn),size)
#coutl $FILEINFO($VAR(fn),size_point)
#coutl $FILEINFO($VAR(fn),size_auto)
#coutl $FILEINFO($VAR(fn),size_kb)
#coutl $FILEINFO($VAR(fn),date)
#coutl $FILEINFO($VAR(fn),date_yyyy)
#coutl $FILEINFO($VAR(fn),datetime)
#coutl $FILEINFO($VAR(fn),datetime_yyyy)
#coutl $FILEINFO($VAR(fn),exists)

Ergebnis

27668480
27.668.480
26,39 MB
27.020 kB
02.05.2023
20230502
02.05.2023 12:20:09
20230502122009
Y

$DIR()

Ermittelt einen Verzeichnisnamen. Trailing Path Delimiter (\ bei Windows) wird immer angehängt.

Parameter

  1. Bezeichnung des Verzeichnisses
    1. appdata - Verzeichnis für Anwendungsdaten des Users
    2. cappdata - gemeinsames Verzeichnis für Anwendungsdaten aller User
    3. cdoc - gemeinsames Dokumentenverzeichnis aller User
    4. cfav / cfavorites - gemeinsames Favoritenverzeichnis aller User
    5. cmusic - gemeinsames Musikverzeichnis aller User
    6. cpic / cpictures - gemeinsames Bilderverzeichnis aller User
    7. cvideo - gemeinsames Videoverzeichnis aller User
    8. desktop - Desktopverzeichnis des Rechners
    9. doc / docdir - Dokumentenverzeichnis des Users
    10. downloads - Downloadsverzeichnis des Users
    11. fav / favorites - Favoritenverzeichnis des Users
    12. fonts - Fontsverzeichnis des Rechners
    13. music - Musikverzeichnis des Users
    14. pic / pictures - Bilderverzeichnis des Users
    15. prog / program - Programmverzeichnis des Rechners
    16. prog86 / program86 - Programm86-Verzeichnis des Rechners
    17. root - Root-Verzeichnis des BAF-Clients bzw. des BAF-Servers
    18. userroot / usrroot - User-Verzeichnis des BAF-Clients
    19. video - Videoverzeichnis des Users

Beispiel

#text_save   fn=$DIR(doc)test.txt

$FILEDIALOG()

Führt einen Dateiauswahl-Dialog aus und gibt den gewählten Dateinamen zurück. Im Falle des Abbruchs wird abort zurück gegeben.

Parameter

  1. Wenn der erste Parameter save lautet, wird ein Speichern-Dialog, sonst ein Öffnen-Dialog aufgerufen.
  2. Filter-Statement, immer Kombinationen aus Text (Text-Dateien *.txt) und Filter-Statement(*.txt), getrennt durch Pipes.
  3. Standard-Dateierweiterung

Beispiel

#text_save   fn="$FILEDIALOG(save,Text-Dateien *.txt|*.txt|Alle Dateien *.*|*.*,txt)"

(Bitte beachten: Wegen der Leerzeichen im Filter-Statement muss der ganze Parameter in doppelte Anführungszeichen gesetzt werden.)

ZIP

#zip_create

Erzeugt eine ZIP-Datei

Parameter

  • cnd ("condition") - Wenn Y, wird die Prozedur ausgeführt; default Y, Funktionen werden ersetzt
  • cnt ("count") - Anzahl der Dateien, die der ZIP-Datei hinzugefügt werden; Funktionen werden ersetzt
  • dir ("directory") - Verzeichnis, wenn das nicht bei allen fn1, fn2... angegeben werden soll
  • fn ("FileName") - Der Dateiname, unter dem die ZIP-Datei gespeichert wird; Funktionen werden ersetzt
  • fn1, fn2,... ("FileName") - Die Dateien, die in der ZIP-Datei gespeichert werden; die Anzahl wird mit dem Parameter cnt bestimmt; Funktionen werden ersetzt
  • list - Nummer eines Textes (#text, #text2...), in dem die Dateien gelistet sind, die der ZIP-Datei hinzugefügt werden sollen. Wenn list ein Wert größer 0 hat, werden cnt und fn1, fn2... ignoriert. Default 0, Funktionen werden ersetzt.
  • pw ("PassWord") - Password der erzeugten ZIP-Datei; Funktionen werden ersetzt.
  • pwc ("PassWordCrypted") - Wenn Y, dann ist das Passwort mit der Verschlüsselungsfunktion auf der Seite Tools des Code-Dialogs verschlüsselt. Hinweis: Mit dieser Verschlüsselung verhindert man lediglich, dass das Passwort direkt aus dem Code ausgelesen werden kann. Wird der BAF-Client mit dem Delphi-Debugger ausgeführt, lässt sich leicht an die betreffende Stelle ein Breakpoint setzen und das Passwort dann im Klartext auslesen (dieselbe Unit uBafCrypt vorausgesetzt).

Beispiele

#zip_create   fn=$VAR(root).zip   list=1

#var_set   n=fn_zip   z=tt_mail_$VAR(reise)-$VAR(reisename)_$PAD($VAR(lfdnr),4,L,0)_$NOWFMT(yyyymmdd).zip
#file_op   y=df   fn=$VAR(path)\$VAR(fn_zip)
#code cnt=2
#code fn1=$VAR(filename).txt
#code fn2=$VAR(filename).sab
#zip_create   dir=$VAR(path)   fn=$VAR(path)\$VAR(fn_zip)    pw=$VAR(pw)   $CODE$

Die Prozedur #zip_create ersetzt nicht vorherige Dateien. Von daher im Zweifelsfall wie im zweiten Beispiel vorher eine Datei dieses Namens löschen.

Ini-Dateien

Der BAF-Client verwendet eine Ini-Datei im Root-Verzeichnis (vor allem für die Datenbankverbindungen) und eine Ini-Datei BafClientFM.ini im User-Anwendungsverzeichnis (vor allem für die Formularpositionen). Es können aber auch weitere Ini-Dateien verwendet werden.

#ini_val

Schreibt einen Wert in die Ini-Datei. #ini_val ist eine nummerierte Prozedur: #ini_val schreibt in die erste Ini-Datei, #ini_val2 in die zweite Ini-Datei und so weiter. Diese Ini-Dateien werden zunächst nur im Speicher gehalten und müssen explizit aus einer Datei geladen oder in eine Datei gespeichert werden.

Parameter

  • i ("item" / "ident") - Name des Eintrags in der Ini-Datei; Funktionen werden ersetzt
  • n ("name") - Wenn der Parameter n den Wert usr oder user hat, dann bleibt die Nummer der Ini-Datei unberücksichtigt und der Wert wird in die Datei BafClientFM.ini im im User-Anwendungsverzeichnis geschrieben.
  • sec ("section") - Abschnitt in der Ini-Datei; Funktionen werden ersetzt; default values
  • z - Wert, der in die Ini-Datei geschrieben wird; Funktionen werden ersetzt.

Beispiel

#ini_val  i=date_last   z=$NOW()

#ini_load

Lädt eine Ini-Datei aus einer Datei. Es handelt sich um eine nummerierte Prozedur: #ini_load lädt die Ini-Datei 1, #ini_load2 lädt die Ini-Datei 2 und so weiter.

Parameter

  • fn ("FileName") - Dateiname der Datei, die geladen wird

Beispiel

#ini_load   fn=$DIR(userroot)werte.ini

#ini_save

Speichert eine Ini-Datei ineine Datei. Es handelt sich um eine nummerierte Prozedur: #ini_save speichert die Ini-Datei 1, #ini_save2 speichert die Ini-Datei 2 und so weiter.

Parameter

  • fn ("FileName") - Dateiname der Datei, in die gespeichert wird

Beispiel

#ini_save   fn=$DIR(userroot)werte.ini

$INI()

Liest einen Wert aus einer Ini-Datei.

Parameter

  1. Nummer der Ini-Datei, alternativ usr oder root
  2. Item (Ident)
  3. optional: Sektion; wenn nicht vorhanden, dann values. Wenn db!, dann wird als Sektion die aktuell gewählte Datenbankverbindung verwendet (in diesem Fall sollte als erster Parameter root verwendet werden).
  4. optional: Default-Wert; wenn nicht vorhanden, dann ein leerer String

Beispiele

#var_set   n=datum   z=$INI(1,datum)
#var_set   n=datum   z=$INI(1,datum,bearbeitung,$TODAY())

$INITEXT()

Gibt die komplette Ini-Datei zurück. Wird vor allem beim Debugging verwendet.

Parameter

  1. Nummer der Ini-Datei, alternativ usr oder root

Beispiel

#coutl $INITEXT(usr)

Zwischenablage

Das BAF-Framework unterstützt die Zwischenablage nur für Text.

#clipboard

Schreibt einen Text in die Zwischenablage

Parameter

  • z - Wert, der in der Zwischenablage gespeichert werden soll; Funktionen werden ersetzt

Beispiele

#clipboard   z=$TEXT()
#clipboard   z=$CHR(dquote)$PVAL(test,zahl,allsel,$CHR(crlf))$CHR(dquote)

$CLIPBOARD()

Gibt den Text aus der Zwischenablage zurück.

Parameter

(keine)

Beispiel

#setvar   n=clp   z=$CLIPBOARD()

String-Funktionen

Die folgenden Funktionen geben einen String zurück.

$BASE64()

En- oder Decodiert einen Text im Base64-Code

Parameter

  1. Encoding oder Decoding:
    1. e - Encoding
    2. d - Decoding
  2. Text, der en-oder decodet werden soll.

Beispiel

#coutl $BASE64(e,Dies ist ein Test)


$CHR()

Gibt ein Zeichen (ggf zwei Zeichen) zurück

Parameter

  1. Ansi-Zeichennummer oder eine der folgenden Bezeichnungen:
    1. crlf - Zeilenumbruch #13#10
    2. cr - Zeichen #13
    3. lf - Zeichen #10
    4. tab - Tabulator
    5. quote - ' (einfache Anführungszeichen)
    6. dquote - " (doppelte Anführungszeichen)
    7. space / leer - Leerzeichen
    8. comma / komma - , (Komma)
    9. questionmark / qmark / frage / fragezeichen - ?
    10. bro / bracket_open - (
    11. brc / bracket_close - )
    12. dollar - $

Beispiel

#exec   cmd="xtodo_page_add(XU,$PVAL(vl,user_user_id),$PVAL(vl,login),$PVAL(vl,shortname)$CHR(crlf)$PVAL(vl,firstname) $PVAL(vl,lastname))"

$COPY()

Kopiert aus dem String im ersten Parameter einen Teil der Zeichen.

Parameter

  1. String, aus dem kopiert werden soll
  2. Position im String, ab dem Zeichen kopiert werden sollen
  3. optional: Anzahl der Zeichen, die kopiert werden sollen. Wenn dieser Parameter fehlt, werden alle Zeichen ab der angegebenen Position kopiert.

Beispiel

#grdcol   f=ref   c1="Ref"   w=30  y=link   ro=Y   cmdn=xtodo_add(link,$COPY($PVAL(grid,ctype,sel),1,2))

$EXEC()

Führt ein Kommando aus und gibt ein Funktionsergebnis zurück.

Parameter

  1. Kommando, das ausgeführt werden soll.
  2. optional: Name der Variable, die als Funktionsergebnis zurück gegeben werden soll; default result

Beispiel

#val_set   n=test   z=$EXEC(testkommando)

$GUID()

Erzeugt eine GUID und gibt sie zurück.

Parameter

  1. optional: Name einer Variablen, in welcher die GUID zusätzlich gespeichert wird.

Beispiel

#sql_exec   kid=$GUID()

$HASH()

Erzeugt einen Hash-Wert vom String im ersten Parameter.

Parameter

  1. String, von welchem der Hash gebildet werden soll.
  2. zu verwendender Hash-Algorithmus:
    1. sha512
    2. sha512_256
    3. sha512_224
    4. sha384
    5. sha256
    6. sha224
    7. sha1
    8. md5 (Hinweis: MD5 gilt seit Längerem als nicht mehr sicher. Verwenden Sie ihn nur, wenn dies aus Gründen der Abwärts-Kompatbilität zwingend ist.)

Beispiel

#page_val   i=vl   col=1   row=3   z=$HASH($PVAL(vl,1,2),sha512)

$INCLUDE()

Stellt sicher, dass der als dritter Parameter übergebene Text am Anfang oder am Ende steht, gegebenenfalls wird er dort eingefügt.

Parameter

  1. Typ der Operation
    1. lead(oder leading) - Text muss am Anfang stehen
    2. leadci(oder leadingci oder leadingcaseinsensitive) - Text muss am Anfang stehen, Groß- und Kleinschreibung wird ignoriert
    3. trail(oder trailing) - Text muss am Ende stehen
    4. trailci(oder trailci oder trailingcaseinsensitive) - Text muss am Ende stehen, Groß- und Kleinschreibung wird ignoriert
  2. Text, in den gegebenenfalls eingefügt wird
  3. Text, der gegebenenfalls eingefügt wird

Beispiel

#cout   c=$INCLUDE(trailci,test.PDF,.pdf)


$INVLOOKUP()

Ermittelt den Key aus einer Nachschlageliste bei Übergabe des Values.

Parameter

  1. Name der Nachschlageliste
  2. Value des Eintrags
  3. Default-Wert; wird verwendet, wenn der Rückgabe-Wert leer ist

Beispiel

#cout   c="$INVLOOKUP(general_status,aktiv,Wert nicht vorhanden)"

$LOOKUP()

Ermittelt einen Wert aus einer Nachschlageliste.

Parameter

  1. Name der Nachschlageliste
  2. Key des Eintrags
  3. Default-Wert; wird verwendet, wenn der Rückgabe-Wert leer ist

Beispiel

#cout   c="$LOOKUP(general_status,1,Status nicht gesetzt)"

$LOW()

Wandelt den übergebenen String in Kleinbuchstaben um.

Parameter

  1. String, der in Kleinbuchstaben gewandelt werden soll.

Beispiel

~ $LOW($EDT(edt1)) = bus

$LOWNOSPACE()

Wandelt einen String in Kleinbuchstaben und ersetzt alle Leerzeichen durch Unterstriche.

Parameter

  1. String, der gewandelt werden soll

Beispiel

#page_val   i=vl   col=1   row=3   z=$LOWNOSPACE($PVAL(vl,1,2))


$NOCRLF()

Entfernt Zeilenumbrüche

Parameter

  1. String, aus dem die Zeilenumbrüche entfernt werden sollen
  2. optional: Zeichenfolge, die an Stelle der Zeilenumbrüche eingefügt werden sollen

Beispiel

#val_set   n=2   z=$NOCRLF($VAL(1),;)

$NVL()

Liefert einen Ersatzwert, wenn der Wert leer ist.

Parameter

  1. String, der als Funktionsergebnis zurückgegeben wird
  2. String, der als Funktionsergebnis zurückgegeben wird, wenn der erste Parameter leer ist

Beispiel

sql   where ckey <= $NVL($PVAL(grid,nummer,lookuplive),0)

Liefert $PVAL einen leeren Wert zurück (z.B., weil die Gridzeile neu angelegt wurde und daher noch keine Nummer eingetragen ist), so wird statt dessen 0 verwendet, damit die WHERE-Klausel syntaktisch korrekt ist.

$ONLYCHAR()

Entfernt unerwünschte Zeichen aus einem String.

Parameter

  1. Der ursprüngliche String
  2. optional: Typ der Funktion
    1. (leer) - Es werden alle Zeichen aus dem String entfernt, die keine Buchstaben (['a'..'z', 'A'..'Z', 'ä', 'ö', 'ü', 'Ä','Ö', 'Ü', 'ß']) sind
    2. charnum - Es werden alle Zeichen aus dem String entfernt, die keine Buchstaben oder Zahlen sind
    3. low - Es werden alle Zeichen aus dem String entfernt, die keine Buchstaben sind, Ergebnis in Kleinbuchstaben
    4. upp - Es werden alle Zeichen aus dem String entfernt, die keine Buchstaben sind, Ergebnis in Großbuchstaben
    5. charnumlow - Es werden alle Zeichen aus dem String entfernt, die keine Buchstaben oder Zahlen sind, Ergebnis in Kleinbuchstaben
    6. charnumupp - Es werden alle Zeichen aus dem String entfernt, die keine Buchstaben oder Zahlen sind, Ergebnis in Großbuchstaben
    7. uml - Es werden alle Zeichen aus dem String entfernt, die keine Buchstaben (['a'..'z', 'A'..'Z') sind, Umlaute werden konvertiert (ä -> ae, ö -> oe, ü -> ue, Ä -> Ae, Ö -> Oe, Ü -> Ue, ß -> ss)
    8. umlcharnum - Es werden alle Zeichen aus dem String entfernt, die keine Buchstaben oder Zahlen sind, Umlaute werden konvertiert
    9. umllow - Es werden alle Zeichen aus dem String entfernt, die keine Buchstaben sind, Ergebnis in Kleinbuchstaben, Umlaute werden konvertiert
    10. umlupp - Es werden alle Zeichen aus dem String entfernt, die keine Buchstaben sind, Ergebnis in Großbuchstaben, Umlaute werden konvertiert
    11. umlcharnumlow - Es werden alle Zeichen aus dem String entfernt, die keine Buchstaben oder Zahlen sind, Ergebnis in Kleinbuchstaben, Umlaute werden konvertiert
    12. umlcharnumupp - Es werden alle Zeichen aus dem String entfernt, die keine Buchstaben oder Zahlen sind, Ergebnis in Großbuchstaben, Umlaute werden konvertiert
    13. no191 / not191 - Es werden alle Zeichen mit der ANSI-Nummer 191 (¿) entfernt


Beispiele

#coutl $ONLYCHAR(Baden-Württemberg)
#coutl $ONLYCHAR(Baden-Württemberg,umllow)

$PAD()

Füllt links oder rechts bis zur vorgegebenen Länge mit Zeichen auf.

Parameter

  1. Der ursprüngliche String
  2. Soll-Länge. Ist der ursprüngliche String bereits länger, wird er nicht gekürzt, es werden aber auch keine weiteren Zeichen hinzugefügt
  3. Wenn L, werden die Zeichen vorne hinzugefügt, andernfalls hinten
  4. Zeichen, die soweit und so oft hinzugefügt werden, bis die Soll-Länge erreicht ist. Umfasst der Parameter mehrere Zeichen, werden diese ggf. nicht alle hinzugefügt.
  5. optional: Länge, auf die der ursprüngliche String vor der weiteren Verarbeitung gekürzt wird.

Beispiel

sql   text1 = '$PAD($VAR(text1),70,R, )'

$RANDOM()

Ermittelt einen zufälligen Wert

Parameter

  1. Typ des Ergebnisses
    1. curr - Zahl mit zwei Nachkommastellen in den Grenzen Parameter 2 - Parameter 3
    2. curr4 - Zahl mit vier Nachkommastellen in den Grenzen Parameter 2 - Parameter 3
    3. date - Datum in den Grenzen Parameter 2 - Parameter 3
    4. int - ganze Zahl in den Grenzen Parameter 2 - Parameter 3
    5. ld - Key einer Nachschlageliste, Name der Nachschlageliste im Parameter 2
    6. ldv - Value einer Nachschlageliste, Name der Nachschlageliste im Parameter 2
    7. ls - Key eines Specials, Name des Specials im Parameter 2
    8. lsv - Value eines Specials, Name des Specials im Parameter 2
    9. text, text2, text3... - Zeile eines Textes
  2. untere Grenze bzw. Name der Nachschlageliste oder des Specials
  3. obere Grenze

Beispiel

#coutl $RANDOM(date,01.01.2022,31.12.2022)
#coutl $RANDOM(text2)

$SUBSTR()

Kopiert aus dem String im ersten Parameter einen Teil der Zeichen.

(Hinweis: Selbe Funktionalität wie $COPY())

Parameter

  1. String, aus dem kopiert werden soll
  2. Position im String, ab dem Zeichen kopiert werden sollen
  3. optional: Anzahl der Zeichen, die kopiert werden sollen. Wenn dieser Parameter fehlt, werden alle Zeichen ab der angegebenen Position kopiert.

Beispiel

#grdcol   f=ref   c1="Ref"   w=30  y=link   ro=Y   cmdn=xtodo_add(link,$SUBSTR($PVAL(grid,ctype,sel),1,2))

$STREP()

("string replace") Ersetzt Zeichen im String durch andere Zeichen.

Parameter

  1. String, in welchen Zeichen ersetzt werden sollen.
  2. Zeichen, die ersetzt werden sollen
  3. Zeichen, die an deren Stelle treten sollen
  4. optional: Optionen (kombinierbar)
    1. i - Groß- und Kleinschreibung ignorieren
    2. a - Alle Vorkommen ersetzen (andernfalls wird nur das erste Vorkommen ersetzt)

Beispiele

#page_val   i=vl   col=1   row=3   z="$STREP($PVAL(vl,1,2), ,_,a)"
#page_val   i=vl   col=1   row=3   z=$STREP($PVAL(vl,1,2),$CHR(space),_,a)

Hinweis: Beide Beispiele haben exakt dieselbe Funktion. Im oberen Beispiel steht das Leerzeichen direkt im Text, dafür muss der komplette Parameter in doppelte Anführungszeichen, im unteren Beispiel wird das Leerzeichen durch $CHR(space) eingefügt, dafür können die Leerzeichen unterbleiben.

$STROP()

("string operation") Sammelsurium von String-Operationen

Parameter

  1. Typ der Operation
    1. trim - entfernt führende und folgende Leerzeichen
    2. trimleft - entfernt führende Leerzeichen
    3. trimright - entferne folgende Leerzeichen
    4. quote - setzt den String in einfache Anführungszeichen
    5. unquote - entfernt einschließende einfache Anführungszeichen
    6. dquote - setzt den String in doppelte Anführungszeichen
    7. unqduote - entfernt einschließende doppelte Anführungszeichen
    8. ex_filepath - entspricht der Delphi-Funktion ExtractFilePath
    9. ex_filedir - entspricht der Delphi-Funktion ExtractFileDir
    10. ex_filedrive - entspricht der Delphi-Funktion ExtractFileDrive
    11. ex_filename - entspricht der Delphi-Funktion ExtractFileName
    12. ex_fileext - entspricht der Delphi-Funktion ExtractFileExt
  2. String, der bearbeitet werden soll


Beispiele

#cout   c=$STROP(quote,Test)

$STREXTR()

("string extract") Extrahiert einen Teil aus einem String.

Parameter

  1. String, aus dem extrahiert werden soll
  2. Extraktionstyp
    1. ffe ("from first exclude") - Extrahiert ab der Zeichenfolge im dritten Parameter und schließt diese Zeichenfolge aus
    2. ffi ("from first include") - Extrahiert ab der Zeichenfolge im dritten Parameter und schließt diese Zeichenfolge ein
    3. tfe ("to first exclude") - Extrahiert bis zur Zeichenfolge im dritten Parameter und schließt diese Zeichenfolge aus
    4. tfi ("to first include") - Extrahiert bis zur Zeichenfolge im dritten Parameter und schließt diese Zeichenfolge ein
    5. fle ("from last exclude") - Extrahiert ab dem letzten Vorkommen der Zeichenfolge im dritten Parameter und schließt diese Zeichenfolge aus
    6. fli ("from last include") - Extrahiert ab dem letzten Vorkommen der Zeichenfolge im dritten Parameter und schließt diese Zeichenfolge ein
    7. tle ("to last exclude") - Extrahiert bis zum letzten Vorkommen der Zeichenfolge im dritten Parameter und schließt diese Zeichenfolge aus
    8. tli ("to last include") - Extrahiert bis zum letzten Vorkommen der Zeichenfolge im dritten Parameter und schließt diese Zeichenfolge ein


  1. Trennzeichen

Beispiele

#cout   c="$STREXTR(test;test2,ffe,;)"    -- Ergebnis: test2
#cout   c="$STREXTR(test;test2,ffi,;)"    -- Ergebnis: ;test2
#cout   c="$STREXTR(test;test2,tfe,;)"    -- Ergebnis: test
#cout   c="$STREXTR(test;test2,tfi,;)"    -- Ergebnis: test;
#cout   c="$STREXTR(test;!§§test2,tfe,;!§§)"    -- Ergebnis: test

$TRIM()

Entfernt Leerzeichen und Zeilenumbrüche am Rand des Strings

Parameter

  1. String, der getrimmt werden soll
  2. optional
    1. L - trimmt nur auf der linken Seite
    2. R - trimmt nur auf der rechten Seite

Beispiel

#var_set   n=test   z=$TRIM($VAL(1),R)

$UPP()

Wandelt den übergebenen String in Großbuchstaben um.

Parameter

  1. String, der in Großbuchstaben gewandelt werden soll.

Beispiel

~ $UPP($EDT(edt1)) = BUS

$VT()

Die Funktion $VT ("Value Translate") ersetzt Werte durch andere. Groß- und Kleinschreibung wird beim Vergleich berücksichtigt.

Parameter

  1. String, dessen Inhalte ersetzt werden soll
  2. Else-Ergebnis; wird dann verwendet, wenn keine andere Entsprechung erkannt wird.
  3. Vergleichswert 1
  4. Ergebnis, wenn Vergleichswert 1 dem ersten Parameter entspricht
  5. Vergleichswert 2
  6. Ergebnis, wenn Vergleichswert 2 dem ersten Parameter entspricht
  7. Vergleichswert 3
  8. Ergebnis, wenn Vergleichswert 3 dem ersten Parameter entspricht

...

Beispiel

#coutl $VT(Frau,1,Herr,2,Frau,3)
-- Frau -> 3
-- Herr -> 2
-- Test -> 1
-- Firma -> 1

$VTVL()

Die Funktion $VTVL ("Value Translate ValueList") ersetzt Werte durch andere. Groß- und Kleinschreibung wird beim Vergleich berücksichtigt.

Im Gegensatz zu $VT werden die zu prüfenden Werte und deren Entsprechungen nicht über Parameter übergeben, sondern aus einer Werte-Liste geholt, die in einem Text gespeichert sein muss.

Eine solche Werte-Liste lässt sich wie folgt aufbauen

key1=value1
key2=value2
key3=value3
key4=value4
...

Eine solche Werte-Liste lässt sich auch mit #sql_opentvl erzeugen, siehe Beispiel.

Parameter

  1. String, dessen Inhalte ersetzt werden soll
  2. Else-Ergebnis; wird dann verwendet, wenn keine andere Entsprechung erkannt wird.
  3. Nummer des Textes, in dem sich die Werteliste befindet.

...

Beispiel

#sql select userid as ckey, shortname as cvalue from user_user
#sql_opentvl n=1
#coutl $VTVL(591,(nicht gefunden),1)

$XR()

Die Funktion $XR ("XmlReplace") ersetzt in XML nicht zulässige Zeichen:

  • aus & wird $amp ;
  • aus < wird &lt ;
  • aus > wird &gt ;
  • aus " wird &quot ;
  • aus ' wird &apos ;

(Hinweis: Das Leerzeichen vor dem Semikolon soll verhindern, dass die Zeichen hier in der Darstellung ersetzt werden und wird nicht eingefügt.)

Parameter

  1. String, dessen Zeichen ggf. ersetzt werden sollen

Beispiel

#text <firmenname>$XR($DATA(dat,firmenname))</firmenname>

$XRR()

Umkehrfunktion von $XR()

  • aus $amp ; wird &
  • aus &lt ; wird <
  • aus &gt ; wird >
  • aus &quot ; wird "
  • aus &apos ; wird '

Parameter

  1. String, dessen Zeichen ggf. ersetzt werden sollen

Integer-Funktionen

Die folgenden Funktionen geben eine ganze Zahl zurück

$DEC()

Verringert die Zahl im ersten Parameter.

Parameter

  1. Zahl die verringert werden soll.
  2. optional: Zahl, um die verringert werden soll. Wenn nicht vorhanden, dann 1.

Beispiel

#setval   n=1   z=$DEC($VAL(1))

$ICALC()

Führt eine Berechnung mit ganzzahligen Werten durch.

Parameter

  1. Operator, es stehen zur Verfügung
    1. +
    2. -
    3. *
    4. div
    5. mod
  2. Erste Zahl
  3. Zweite Zahl
  4. optional beim Operator +: weitere Summanden

Beispiel

#cout   c=$ICALC(mod,17,5)

$INC()

Erhöht die Zahl im ersten Parameter.

Parameter

  1. Zahl die erhöht werden soll.
  2. optional: Zahl, um die erhöht werden soll. Wenn nicht vorhanden, dann 1.

Beispiel

#setval   n=1   z=$INC($VAL(1))

$INTLEN()

Ist der String im Parameter eine ganz Zahl, dann wird deren Länge in Zeichen zurückgegeben, andernfalls -1; ein leerer String im ersten Parameter ergibt 0.

Parameter

  1. Zahl, deren Länge ermittelt wird.

Beispiel

~ $INTLEN($EDT(edt1)) = 4

$LEN()

Ermittelt die Länge eines Strings in Zeichen.

Parameter

  1. String, dessen Länge ermittelt werden soll.

Beispiel

~ $LEN($EDT(edt1)) = 4

$LEVENSHTEIN()

Ermittelt die Levenshtein-Distanz (https://de.wikipedia.org/wiki/Levenshtein-Distanz) der beiden übergebenen Strings

Parameter

  1. erster String
  2. zweiter String

Beispiel

  1. coutl $LEVENSHTEIN(alpha,beta)

$POS()

Ermittelt die Position des Substrings in einem String. Das Funktionsergebnis ist die Position, das erste Zeichen ist 1. 0 wird zurück gegeben, wenn der Substring im String nicht vorkommt.

Parameter

  1. Substring (nach dem gesucht wird)
  2. String (in dem gesucht wird)
  3. optional: Wenn ic (ignore case), dann wird bei der Suche die Groß- und Kleinschreibung nicht beachtet.

Beispiel

~ $POS($EDT(edt1),$VAR(1),ic) > 0

$RANDOM()

Ermittelt einen zufälligen Wert zwischen der oberen und unteren Grenze

Parameter

  1. Typ
    1. int - zufällige Ganzzahl
    2. date - zufälliges Datum
    3. curr - zufällige Zahl mit zwei Nachkommastellen
    4. curr4 - zufällige Zahl mit vier Nachkommastellen
    5. text1, text2, text3... - zufällige Zeile aus dem jeweiligen Text; text ist text1; untere und obere Grenze bleiben unberücksichtigt
    6. ld - zufälliger Schlüssel-Wert aus einer Nachschlageliste. Der Name der Nachschlageliste ist als zweiter Parameter (untere Grenze) zu übergeben
    7. ldv - zufälliger Text aus einer Nachschlageliste. Der Name der Nachschlageliste ist als zweiter Parameter (untere Grenze) zu übergeben
    8. ls - zufälliger Schlüssel-Wert aus einem Special. Der Name des Specials ist als zweiter Parameter (untere Grenze) zu übergeben
    9. lsv - zufälliger Text aus einem Special. Der Name des Specials ist als zweiter Parameter (untere Grenze) zu übergeben
  2. untere Grenze
  3. obere Grenze

Beispiel

  1. coutl $RANDOM(int,1,6)

Datumsfunktionen

$INCDATE()

Die Funktione $INCDATE() verändert das Datum im ersten Parameter um die Anzahl Tage im zweiten Parameter.

Parameter

  1. Datum, das verändert werden soll
  2. optional: Die Tage, um die verändert werden soll; wenn leer, dann 1.

Beispiel

#cout   c=$INCDATE($NOW(),-3)   clr=Y

$INT2TIME()

Macht aus z.B. 1130 die Zeit 11:30

Parameter

  1. Zeit im Integer-Format

Beispiel

#sql_exec   k_time=$INT2TIME($VAL(1))

$NOW()

Gibt das aktuelle Datum und die aktuelle Uhrzeit im Format dd.mm.yyyy hh:mm:ss zurück.

Parameter

(keine)

Beispiel

#execsql   k_datechg=$NOW()

$NOWFMT()

Gibt das aktuelle Datum und/oder die aktuelle Uhrzeit im angegebenen Format zurück.

Parameter

  1. Formatierungsstring (Syntax wie FormatDateTime in Delphi)

Beispiel

#sql_exec   k_datechg="$NOWFMT(yyyy-mm-dd hh:mm:ss)"

$NOWMIN()

Gibt das aktuelle Datum und die aktuelle Uhrzeit ohne Sekunden (also dd.mm.yyyy hh:mm) zurück

Parameter

(keine)

Beispiel

#sql_exec   k_datechg=$NOWMIN()

$TODAY()

Gibt das aktuelle Datum im Format dd.mm.yyyy zurück.

Hinweis: Wenn das Datum in einem anderen Format benötigt wird, ist $NOWFMT() das Mittel der Wahl.

Parameter

(keine)

Beispiel

#sql_exec   k_datechg=$TODAY()

$DFMT()

("date formated") Formatiert das übergebene Datum.

Parameter

  1. Datum, ggf. mit Uhrzeit, das formatiert werden soll.
  2. Formatierungsstring wie in Delphi
  3. optional: Wenn hn ("hide null"), dann wird ein leerer String zurück gegeben, wenn das Datum kleiner/gleich 1

Beispiel

#sql_exec   k_datechg="$DFMT($NOW(),yyyy-mm-dd hh:mm:ss)"

Bool'sche Funktionen

Die folgenden Funktionen geben Y oder N zurück.

$BFMT()

Formatiert einen bool'schen Wert

Parameter

  1. Bool'scher Wert
  2. optional: Ergebnis, wenn Wert Y ('y', 'J', 'j', '1') ist, default Y
  3. optional: Ergebnis, wenn Wert N (also nicht 'Y', 'y', 'J', 'j', '1') ist, default N

Beispiel

#cout   c=$BFMT($VAR(test),x,)

$BOOL()

Wertet das bool'sche Statement im Parameter aus.

Operatoren

  • = gleich
  • == gleich ohne Berücksichtigung der Groß- und Kleinschreibung
  • <> ungleich
  •  != ungleich
  • > größer
  • >= größer gleich
  • < kleiner
  • <= kleiner gleich
  • and Und-Verknüpfung
  • or ODER-Verknüpfung

Hinweis: Die Statements werden von links nach rechts ausgewertet, and und or sind gleichwetig, gegebenenfalls müssen Klammern eingesetzt werden.

Parameter

  1. Bool'sches Statement, das ausgewertet wird

Beispiel

#cout   c="$BOOL((17 > 22) or (5 > 3))"
#cout   c="$BOOL(17 > 22 or 5 > 3)"

$EMPTY()

Gibt Y zurück, wenn der Parameter ein leerer String ist. (Leerzeichen zählen auch als leerer String.)

Parameter

  1. String, der geprüft wird

Beispiel

~ $EMPTY($DATE(n,grpname))

$IN()

Gibt Y zurück, wenn sich der erste Parameter in der Menge der nachfolgenden Parameter befindet. Groß- und Kleinschreibung wird im Gegensatz zu $INIC() beachtet

Parameter

  1. Wert, der geprüft wird
  2. Liste, gegen die geprüft wird

Beispiel

Die erste Anweisung gibt Y und die zweite N zurück

#cout    c="$IN(beta,alpha,beta,gamma,delta)"
#cout    c="$IN(beta,alpha,BETA,gamma,delta)"

$INIC()

Gibt Y zurück, wenn sich der erste Parameter in der Menge der nachfolgenden Parameter befindet. Groß- und Kleinschreibung wird im Gegensatz zu $IN() nicht beachtet beachtet

Parameter

  1. Wert, der geprüft wird
  2. Liste, gegen die geprüft wird

Beispiel

Beide Anweisungen geben Y zurück

#cout    c="$INIC(beta,alpha,beta,gamma,delta)"
#cout    c="$INIC(beta,alpha,BETA,gamma,delta)"

$ISCURR()

Gibt Y zurück, wenn sich der Parameter in einen Currency-Wert wandeln lässt

Parameter

  1. Wert, der geprüft wird

Beispiel

~ $ISCURR($DATA(n,rechnungssumme))

$ISDATE()

Gibt Y zurück, wenn sich der Parameter in ein Datums- oder DatumsZeit-Wert wandeln lässt

Parameter

  1. Wert, der geprüft wird
  2. Prüfoperation, default ist date
    1. date - prüft, ob in ein Datum gewandelt werden kann
    2. datetime - prüft, ob in ein Datums-Zeit-Wert gewandelt werden kann


Beispiel

~ $ISDATE($DATA(n,beginn))

$ISINT()

Gibt Y zurück, wenn sich der Parameter in einen ganzzahligen Wert wandeln lässt

Parameter

  1. Wert, der geprüft wird

Beispiel

~ $ISINT($DATA(n,tage))

$INTMAX()

Gibt Y zurück, wenn die Zahl im ersten Parameter nicht größer ("maximal gleich") als die Zahl im zweiten Parameter ist.

Parameter

  1. Zahl, die verglichen wird
  2. Zahl. mit der vergleichen wird

Beispiel

~ $INTMAX($DATA(n,lfdnr), 17)

$INTMIN()

Gibt Y zurück, wenn die Zahl im ersten Parameter nicht kleiner ("minimal gleich") als die Zahl im zweiten Parameter ist.

Parameter

  1. Zahl, die verglichen wird
  2. Zahl. mit der vergleichen wird

Beispiel

~ $INTMIN($DATA(n,lfdnr), 17)

$NEMPTY()

("not empty") Gibt Y zurück, wenn der Parameter nicht leer ist.

Parameter

  1. String, dessen Inhalt geprüft wird. Leerzeichen gelten als leerer String.

Beispiel

~ $NEMPTY($EDT(edt1))

$DATEMINREL()

Gibt Y zurück, wenn das Datum im ersten Parameter nicht kleiner ("minimal gleich") dem aktuellen Datum ist, das um die Anzahl Tage im zweiten Parameter verändert wurde. Wird gerne verwendet, um das Erreichen von Deadlines zu prüfen.

Parameter

  1. Datum, das geprüft wird
  2. Anzahl an Tage, die dem aktuellen Datum vor der Prüfung hinzu addiert werden

Beispiel

~ $DATEMINREL($DATA(n,datum), 3)

$DATEMAXREL()

Gibt Y zurück, wenn das Datum im ersten Parameter nicht größer ("maximal gleich") dem aktuellen Datum ist, das um die Anzahl Tage im zweiten Parameter verändert wurde. Wird gerne verwendet, um das Erreichen von Deadlines zu prüfen.

Parameter

  1. Datum, das geprüft wird
  2. Anzahl an Tage, die dem aktuellen Datum vor der Prüfung hinzu addiert werden

Beispiel

~ $DATEMAXREL($DATA(n,datum), 3)

$DATEBETWEEN

Gibt Y zurück, wenn das Datum des ersten Parameters im angegebenen Bereich liegt.

Alle Paremeter, die sich nicht in ein Datum wandeln lassen, werden zu 0 (30.12.1899) konvertiert.

Parameter

  1. Wert, der geprüft wird
  2. Untere Grenze des Bereichs
  3. Obere Grenze des Bereichs
  4. und weitere: Das Ergebnis ist auch dann Y, wenn der erste Parameter diesem Datum entspricht.

Beispiel

#cout   c="Test $DATEBETWEEN($TODAY(),1.1.2020,2.2.2022)"

$NOT

Invertiert einen bool'schen Wert. Aus Y (y, J, j, 1) wird N und aus N wird Y.

Parameter

  1. Wert, der invertiert wird

Beispiel

#coutl $NOT(2)

$NUMBETWEEN

Gibt Y zurück, wenn die Zahl des ersten Parameters im angegebenen Bereich liegt.

Alle Paremeter, die sich nicht in eine Zahl wandeln lassen, werden zu 0 konvertiert.

Parameter

  1. Wert, der geprüft wird
  2. Untere Grenze des Bereichs
  3. Obere Grenze des Bereichs
  4. und weitere: Das Ergebnis ist auch dann Y, wenn der erste Parameter dieser Zahl entspricht. Siehe Beispiel.

Beispiele

#page_check   c="Die Schuhgröße muss zwischen 28 und 56 liegen"   chk="$NUMBETWEEN($PVAL(vl,schuhgroesse),28,56)"
#page_check   c="Die Schuhgröße muss zwischen 28 und 56 liegen"   chk="$NUMBETWEEN($PVAL(vl,schuhgroesse),28,56,)"

Die beiden Beispiele unterscheiden sich auf den ersten Blick kaum. Bei der ersten Zeile muss jedoch eine Schuhgröße eingegeben werden. Bleibt das Feld im VL-Segment leer, so wird dieser fehlende Wert nach 0 konvertiert und liegt nicht zwischen 28 und 56.

Anders bei der zweiten Zeile: Das Komma vor der schließenden Klammer sorgt für einen vierten Parameter, der ebenfalls leer ist und damit nach 0 gewandelt wird. Auf diese Weise werden die leere Eingaben (und die Eingabe von 0) gültig.

$REGEX()

Die Funktion $REGEX() ("regular expressions") prüft, ob der String in Parameter 1 den Anforderungen von Parameter 2 entspricht (Ergebnis Y) oder nicht (Ergebnis N).

Parameter

  1. String, der geprüft werden soll
  2. Regulärer Ausdruck, mit dem der String in Parameter 2 geprüft wird.

Beispiel

~ $REGEX($VAR(med),^[A-Z]{3}$)

$TEXT_HASLINE()

Die Funktion $TEXT_HASLINE() prüft, ob die als Parameter 2 übergebene Textzeile in einem Text vorkommt. Es wird nur auf komplette Textzeilen geprüft. Wird zum Beispiel verwendet, um eine Liste von Kundennummern zu erstellen, und dann auf einzelne Nummern zu prüfen.

Parameter

  1. Nummer des Textes
  2. Textzeile, deren Vorkommen geprüft wird
  3. Ergebnis, wenn die Textzeile vorkommt; default Y
  4. Ergebnis, wenn die Textzeile nicht vorkommt; default N

Beispiel

#coutl $TEXT_HASLINE(1,990000018,1,0)


$VIBAN()

Die Funktion $VIBAN() ("validate IBAN") prüft eine IBAN anhand der Prüfziffern (3. und 4. Stelle).

Parameter

  1. IBAN, die geprüft werden soll

Beispiel

#coutl $VIBAN(DE12345)

Currency-Funktionen

$CCALC()

Führt eine Berechnung mit Festkommawerten durch

Operatoren

    • + - Addition
    • - - Subtraktion
    • * - Multiplikation
    • / - Division
    •  % - Division und Multiplikation des Ergebnisses mit 100
    • +4 - Addition und Ausgabe mit 4 Nachkommastellen
    • -4 - Subtraktion und Ausgabe mit 4 Nachkommastellen
    • *4 - Multiplikation und Ausgabe mit 4 Nachkommastellen
    • /4 - Division und Ausgabe mit 4 Nachkommastellen
    • %4 - Division, Multiplikation des Ergebnisses mit 100 und Ausgabe mit 4 Nachkommastellen
    • B, b, B4, b4 - Bruttobetrag, erster Parameter ist der Netto-Betrag, zweiter Parameter ist der MWSt-Satz in %
    • E, e, E4, e4 - Enthaltene MWSt, erster Parameter ist der Brutto-Betrag, zweiter Parameter ist der MWSt-Satz in %
    • M, m, M4, m4 - MWSt, erster Parameter ist der Netto-Betrag, zweiter Parameter ist der MWSt-Satz in %
    • N, n, N4, n4 - Nettobetrag, erster Parameter ist der Brutto-Betrag, zweiter Parameter ist der MWSt-Satz in %


Parameter

  1. Operator
  2. und weitere: Operanden

Beispiele

-- Ergebnis 10
#cout   c="$CCALC(+,1,2,3,4)"
-- Ergebnis 16,67
#cout   c="$CCALC(/,100,2,3)"

#val_set   n=1   z=1038,87
#coutl $CCALC(N,$VAL(1),19)  -  $CCALC(E,$VAL(1),19)  -

$CURR()

Currency-Werte müssen in Funktionen mit einem Punkt als Dezimaltrennzeichen eingegeben werden, da das Komma die Parameter trennt. Sofern Konstanten verwendet werden, lässt sich das einfach so eingeben, sobald aber die Werte aus anderen Funktionen kommen (zum Beispiel $DATA()), müssen sie dann mit $CURR() in dieses Format umgewandelt werden.

Parameter

  1. Vorkommastellen
  2. Nachkommastellen

Beispiel

-- Ergebnis 43,48
#cout   c="$CCALC(/,100,$CURR(2,3))"
-- zum Vergleich; Ergebnis 16,67
#cout   c="$CCALC(/,100,2,3)"

$CFMT()

Formatiert Curreny-Werte

Parameter

  1. Wert
  2. optional: Formatierungsstring, default 0.00
  3. optional: wenn hn ("hide null"), dann werden leere Strings als Wert auch als leerer String ausgegeben

Beispiel

#val_set   n=1   z=###,###,###,##0.00
#val_set   n=2   z=1337,42
#cout   c=$CFMT($VAL(2),$VAL(1))

$ONLYNUM()

Stellt sicher, dass in einem String nur Zahlen (ggf. auch Kommas oder Punkte) enthalten sind.

Parameter

  1. Zahl
  2. Art der Operation; default numkomma
    1. flnnc ("from last not numeric character") - Ab dem letzten Zeichen, das keine Ziffer ist
    2. num - Nur Ziffern, alle anderen Zeichen werden entfernt
    3. numkomma - Nur Ziffern und Kommata, alle anderen Zeichen werden entfernt
    4. numpoint - Nur Ziffern und Punkte, alle anderen Zeichen werden entfernt
    5. ufnnc ("until first not numeric character") - vom Anfang bis zum ersten Zeichen, das keine Ziffer ist

Beispiel

-- Ergebnis 123456
#coutl   $ONLYNUM(123-456,num)
-- Ergebnis 123
#coutl   $ONLYNUM(123-456,ufnnc)
-- Ergebnis 456 
#coutl   $ONLYNUM(123-456,flnnc)