Home > Handbuch > Entwicklerhilfe > Makro-Referenz OmAPI > OmApiCsvParams OmApiCsvParams |
Lösung für das Komma-Problem
Syntax
{OmApiCsvParams:Actice}
Active: 0 oder 1: 0 deaktiviert (Vorgabe), 1 aktiviert den Modus für CSV-Paratemer.
Keiner, die Anweisung wird nach Ausführung durch einen Leerstring ersetzt.
Beschreibung
"OmAPI" diente anfangs nur als Platzhalter für Datenbankfelder mit der Syntax {Tabelle:Feldname}. Es kamen dann Formatparameter hinzu {Tabelle:Feldname,Format} und später entstand nach und nach eine umfangreiche Makrosprache.
Variablen, wie {Tabelle:Feldname,Format} funktionieren problemlos, weil der Feldname selbst kein Komma beinhalten kann. Nehmen wir aber beispielsweise {DBSetField:Tabelle,Feldname1=Wert1,Feldmame2=Wert2}, dann haben wir ein Problem, sobald Wert1 ein Komma enthält, wie bei "Mustermann, Max". Der Interpreter trennt dann die Parameter in {DBSetField:Tabelle,Feldname1=Mustermann, Max,Feldmame2=Wert2} bei jedem Komma und wird den Fehler melden, dass ein Datenfeld mit Namen " Max" nicht vorhanden ist.
Wenn zu erwarten ist, dass Parameter Kommata beinhalten, sollte der CSV-Modus (Comma-separated values) aktiviert und die Textparameter mit Komma in Anführungszeichen eingeschlossen werden. Beispiel:
{OmApiCsvParams:1}{DBSetField:Tabelle,"Feldname1=Mustermann, Max",Feldmame2=Wert2}{OmApiCsvParams:0}
Nicht nur "Mustermann, Max" steht hier in doppelten Anführungszeichen, sondern der gesamte Parameter "Feldname1=Mustermann, Max". Es schadet nicht, wenn alle Textparameter in Anführungszeichen stehen, auch wenn sie kein Komma beinhalten, wie "Feldname2=Wert2".
Aus Kompatibilitätsgründen muss der Modus anschließend mit {OmApiCsvParams:0} deaktiviert werden. Die Einstellung gilt nicht nur für das jeweilige Makro, sondern für die gesamte Programmlaufzeit.
Beispiel
Im Layout des Eigenschaftendialogs wird ein Mausschalter platziert, mit dem der Anwender einen Kontakt aus einer umfangreichen Liste filtern und wählen kann. Die Kontaktnamen sind in einer Textdatei enthalten, teils als "Max Mustermann" und teils als "Mustermann, Max". Dem Mausschalter ist folgendes Makro (in einer Zeile) hinterlegt:
{RaiseError:In archivierten Dokumenten gesperrt,{Self:DocTable}=docarch}
{OmApiCsvParams:1}
{DBSetField:document,"contact={ExecStringDlg:C:\Kontakte.txt,0,0,0,Kontakt wählen}"}
{OmApiCsvParams:0}
Siehe auch