Exists, Evaluate und Nullsafe

Hallo,

mir werden unter “Varibalen/Felder:” beim Einfügen von Berichts-Tabellen unter “Felder” / “Table” dann mögliche Datenfelder angezeigt, wenn diese im Datensatz tatsächlich vorhanden sind.

Als bsp. Table.Kunde. Gibt es den Datensatz “Kunde” mit all seinen Unterpunkten, kann ich den prima verwenden. Ich möchte jetzt zu einem Dokument denkbare Adressfelder als “Benutzervariable” hinterlegen. Also @Adresse_Kunde, @Adresse_ Lieferant, etc. Das hatte ich mir wie folgt gedacht:

(if(Exists(“Table.Kunde.Anrede”),
If(Table.Kunde.Anrede !=“0”,Table.Kunde.Anrede+" “)))
+
(if(Exists(“Table.Kunde.Titel”),
If(Table.Kunde.Titel !=“0”,Table.Kunde.Titel+” “)))
+
(if(Exists(“Table.Kunde.Vorname”),
If(Table.Kunde.Vorname !=“0”,Table.Kunde.Vorname+ " “)))
+
(if(Exists(“Table.Kunde.Name”),
If(Table.Kunde.Name !=“0”,Table.Kunde.Name+”¶”)))
+
(if(Exists(“Table.Kunde.Strasse”),
If(Table.Kunde.Strasse !=“0”,Table.Kunde.Strasse+"¶")))
+
(if(Exists(“Table.Kunde.Postleitzahl”),
If(Table.Kunde.Postleitzahl !=“0”,Table.Kunde.Postleitzahl + " ")))
+
(if(Exists(“Table.Kunde.Ort”),
If(Table.Kunde.Ort !=“0”,Table.Kunde.Ort)))

Das klappt auch, wenn denn ein Datensatz Kunde an LL übergeben wird. Wenn es den nicht gibt, kommt eine Fehlermeldung. Also habe ich versucht mit

If(Exists(“Table.Kunde.Name”),Evaluate(“Table.Kunde .Name”))

als Benutzervariable @Kunde zu arbeiten und es dann mit

if(IsNullOrEmpty(@Kunde)=false,
(if(Exists(“Table.Kunde.Anrede”),… (dann weiter wie oben)

versucht. Hier wird ja ein “true” geliefert, wenn @Kunde leer ist, andernfalls ein false. Dann ist also was da, dann soll was geschrieben werden.

Der Fehler bleibt, weil ja in der Formel “Table.Kunde.XY” abgefragt wird, dass bei LL aber nicht vorkommt.

Hat jemand eine Idee?

Hallo,

Wir möchten vorschlagen hier mit den Funktionen Exists(…), GetValue(…) und NullSafe(…) zu prüfen.

Folgende Beispiel-Tabelle:

	DataTable dt = new DataTable();
	dt.TableName = "Kunde";

	dt.Columns.Add("Anrede", typeof(string));
	dt.Columns.Add("Titel", typeof(string));
	dt.Columns.Add("Vorname", typeof(string));
	dt.Columns.Add("Name", typeof(string));
	dt.Columns.Add("Strasse", typeof(string));
	dt.Columns.Add("Postleitzahl", typeof(string));
	dt.Columns.Add("Ort", typeof(string));

Mit zwei Datensätzen:

	dt.Rows.Add("Frau", "Dr.", null, "Müller", "Musterstr. 1", "23456", "Musterhausen");
	dt.Rows.Add(null, null,"Martin", "Schmidt", "Meisterstr. 2", "78910", "Meisterstadt");

Die Formel könnte folgendermassen aussehen:

If(Exists("Kunde.Anrede"), NullSafe(GetValue("Kunde.Anrede"), ""))+" "+
If(Exists("Kunde.Titel"), NullSafe(GetValue("Kunde.Titel"), ""))+" "+
If(Exists("Kunde.Vorname"), NullSafe(GetValue("Kunde.Vorname"), ""))+" "+
If(Exists("Kunde.Name"), NullSafe(GetValue("Kunde.Name"), ""))+"¶"+
If(Exists("Kunde.Strasse"), NullSafe(GetValue("Kunde.Strasse"), ""))+"¶"+
If(Exists("Kunde.Postleitzahl"), NullSafe(GetValue("Kunde.Postleitzahl"), ""))+" "+
If(Exists("Kunde.Ort"), NullSafe(GetValue("Kunde.Ort"), ""))+"¶¶"+
If(Exists("Kunde.Firma"), NullSafe(GetValue("Kunde.Firma")), "Keine Firma vorhanden")

In der Tabelle ‘Kunde’ gibt es ‘Firma’ nicht. Wenn wir darauf prüfen, bekommen wir einen Ersatzwert zurück. Fehlende Werte fangen wir mit NullSafe(…) ab.

Das würde im Druck dann so aussehen:
image

Für die reine Ausgabe reicht eigentlich auch schon ein GetValue(…)

template001.lst (20.8 KB)

Hallo Herr Boyaci,

vielen Dank für Ihre Hilfe! Es hat geklappt.

Mfg
Henrik Momberger

2 Likes