An dieser Stelle sind Unterschiede im Ergebnis von Formeln bei der Verwendung in Ansichten bzw. in Abhängigkeit des Datenbankservers sowie allgemeine Hinweise zur Verwendung von Formeln aufgeführt.

Umgang mit nicht existierenden Objekten

Wird auf ein nicht existierendes Objekt zugegriffen, wird in Ansichten Null zurückgegeben und damit der komplette Ausdruck Null.

Dieses Beispiel, um „EntityTitle Firma / EntityTitle Kontakt” auszugeben:

BAGetPrimarySource('<OrmCRMContact>', 'RelatedCompany', ?, ?, [EntityTitle]) + ' / ' + [EntityTitle]

gibt außerhalb von Ansichten bei einer nicht vorhandenen Firma „ / Kontaktname" aus, in Ansichten Null.

Die Lösung für Ansichten muß besser abgesichert werden, um dieses Verhalten zu vermeiden:

Iif(IsNull(BAGetPrimarySource('<OrmCRMContact>', 'RelatedCompany', ?, ?)), 'Keine Firma', BAGetPrimarySource('<OrmCRMContact>', 'RelatedCompany', ?, ?, [EntityTitle])) + ' / ' + [EntityTitle]

Performance-Optimierung von Formeln mit vielen Datenbankabfragen

Formeln in einer Ansicht werden in genau eine Datenbankabfrage übersetzt und sind damit sehr performant. Werden Formeln außerhalb von Ansichten verwendet, können sie pro Formel zu mehreren Datenbankanfragen führen. Diese gilt es allerdings aus Performancegründen zu vermeiden.

Beispiel 1:
Werden in einer Maske zehn Felder auf Basis von Informationen aus einem über Relation zu ermittelnden Datensatz ausgeblendet, führt dies zu mindestens zehn Datenbankabfragen bei jedem Öffnen der Maske. Performanter wäre, die Felder in einer Gruppe zu organisieren und die Gruppe komplett auszublenden.

Beispiel 2:
Auch die Formel aus dem letzten Kapitel:

Iif(IsNull(BAGetPrimarySource('<OrmCRMContact>', 'RelatedCompany', ?, ?)), 'Keine Firma', BAGetPrimarySource('<OrmCRMContact>', 'RelatedCompany', ?, ?, [EntityTitle])) + ' / ' + [EntityTitle]

lässt sich für die Verwendung außerhalb von Ansichten optimieren zu:

IsNull(BAGetPrimarySource('<OrmCRMContact>', 'RelatedCompany', ?, ?), 'Keine Firma') + ' / ' + [EntityTitle]

Unterschiedliche Datentypen zusammenfügen

In Ansichten führt [EntityTitle] + ' / ' + [Created] zu einem Fehler. Außerhalb von Ansichten funktioniert diese Formel. In Ansichten muß [EntityTitle] + ' / ' + ToStr([Created]) verwendet werde.

Unterschiede bei ToStr()

Grundsätzlich liefert die Umwandlung von Datentypen in eine Zeichenkette mit ToStr sowohl zwsichen Ansichten und anderen Stellen aber auch innerhalb von Ansichten für unterschiedliche Datenbankserver unterschiedliche Ergebnisse.