Modul VAR neu: Unterschied zwischen den Versionen
Zeile 411: | Zeile 411: | ||
==#file_open== | ==#file_open== | ||
+ | |||
+ | Öffnet eine Datei (oder auch eine Webseite) | ||
'''Parameter''' | '''Parameter''' | ||
+ | |||
+ | * fn ("FileName") - Name der Datei oder die URL der Webseite | ||
'''Beispiel''' | '''Beispiel''' | ||
+ | |||
+ | #file_open fn=c:\temp\test.csv | ||
+ | #file_open fn=https://www.google.de | ||
==#loop== | ==#loop== |
Version vom 23. Dezember 2020, 23:48 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
- n - Name der Variablen, Groß- und Kleinschreibung wird nicht unterschieden, zwingend erforderlich
- z - Wert der Variablen, Funktionen werden ersetzt, default ist ein leerer String
- ie - "if empty", Wenn der Wert von z leer ist, dann wird ersatzweise der Wert von ie verwendet; ähnlich NVL bei SQL
Beispiele
#var_set n=test z="Hello world" #var_set n=test2 z=$GUID() #var_set n=edt z=$EDT(edt1) ie=42
#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
- n - Name der Variablen, Groß- und Kleinschreibung wird nicht unterschieden, zwingend erforderlich
- z - Wert der Variablen, Funktionen werden ersetzt, default ist ein leerer String
- ie - "if empty", Wenn der Wert von z leer ist, dann wird ersatzweise der Wert von ie verwendet; ähnlich NVL bei SQL
Beispiele
#var_setempty n=test z="Hello world" #var_setempty n=test2 z=$GUID() #var_setempty n=edt z=$EDT(edt1) ie=42
#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
- Name der Variable
Beispiele
#message c=$VAR(test) #var_set n=neuer_wert z=$VAR(wert) ie=$VAR(alternativwert)
Kommandos
#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)
Beispiel
#cmd_clear3
#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
- fn - ("Filename") Dateiname der CSV-Datei
- ber - wenn Y, werden die Zeilenumbrüche innerhalb von Feldern durch Leerzeichen ersetzt. Die Felder müssen dabei in doppelten Anführungszeichen eingeschlossen sein.
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.
- 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.
- m ("maximum") - Maximale Anzahl der Zeilen, die verarbeitet wird. Wird gerne bei der Entwicklung verwendet, um die Bearbeitungsgeschwindigkeit zu erhöhen.
- sep ("separator") - Trennzeichen zwichen den Spalten, default ist das Semikolon
Beispiel
#csv_line er=test_csv_line hhr=Y m=3
$CSV()
$CSV() greift auf einen Feldinhalt der aktuellen CSV-Zeile zu.
Parameter
- 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.
Beispiel
#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.
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)
Beispiel
#text_clear7 #text7 Zeile 1 #text7 Zeile 2
Das vorangestellt #text_clear stellt sicher, dass Text7 leer ist.
#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
- 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)
- sort - Wenn Y, dann wird die Datei vor dem Speichern sortiert.
Beispiel
#text Hello world #text_save fn=$DIR(userroot)hello_world.txt
#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
- 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()
Mit der Funktion $TEXT() wird auf den Inhalt des Textes zugegriffen.
Parameter
- Nummer des Textes
Beispiel
#text Zeile 1 #text Zeile 2 #text Zeile 3 #message c=$TEXT(1)
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
- Nummer der separierten Zeile
Beispiel
#cmd #cout c=$SEPLINE(3) #sepline3 z=3244;4465;7763;4536;4356;7777 er=1
Rechte
Aus Gründen der Übersichtlichkeit ist die Rechtevergabe zweistufig:
- 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.
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
Parameter
(keine)
Beispiel
#rights_clear
Ausführen
#exec
Führt ein anderes Kommando aus
Parameter
- #cmd ("command") - Names des (Primär- oder Sub-) Kommandos, das ausgeführt werden soll.
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))"
#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
Parameter
Beispiel