An vielen Stellen innerhalb der Anwendungskonfiguration ist es möglich, Programmlogik zu hinterlegen. An allen diesen Stellen wird die Formelsprache verwendet. Diese basiert auf der „Criteria Language” von DevExpress.

Eine Erläuterung zur Syntax der Formelsprache ist hier zu finden: https://docs.devexpress.com/CoreLibraries/17541/devexpress-data-library.

Innerhalb der Formelsprache kann auf Konfigurationselemente – speziell Datentabellen und Spalten aus Datentabellen – zugegriffen werden. Die korrekte Gross-Kleinschreibung ist hierbei wichtig.

Element Beispiel
Datentabelle
Ausgeliefert OrmCompany
Selbst erstellt OrmMyTableCustom
Datenspalten
Spalte [Name]
Angepasste Spalte [Custom_Location]
Gemeinsame Spalte [Common_Subject]
Relationsdefinitionen
Ausgeliefert [RelatedCreatedBy]
Selbst erstellt [RelatedCustom_MyRelationDef]

Für einige oft benötigte Aufgabenstellungen gibt es eine Reihe von BA Funktionen.

Beispielformeln

Allgemeine Beispiele

Formel Erklärung
AddHours(LocalDateTimeNow(), 4) In ein Feld das aktuelle Datum/Uhrzeit + 4h eintragen
Iif(!BAIsEqualEnumValue([Status], ‘Opportunity states’, ‘Offen’), [Subject] + ‘ ‘ + BATranslateEnum([Status]), [Subject]) In einem Feld: Betreff + (Status (Auswahlliste!)) wenn Status <> “Offen”, sonst nur Betreff
[ExpectedTurnover] * BAGetEnumValueDecimalField([Probability], ‘Opportunity probabilities’, ‘NumericValue’) In ein Feld Umsatz*Wahrscheinlichkeit (in%) eintragen.
BAIsEqualEnumValue([OrmType], ‘Data sources’, ‘Brief’) || (BAIsEqualEnumValue([OrmType], ‘Data sources’, ‘Serienbrief’) && BAIsEqualEnumValue([ActivityState], ‘Activity: States’, ‘Mass letter’)) Filter: Alle Briefe, inklusive der Serienbriefe, aber ohne die Statusdatensäze, für die es noch gar keinen Brief gib.
IsInstanceOfType(This, ‘OrmLetter’) || (IsInstanceOfType(This, ‘OrmMassLetterStatus’) && BAIsEqualEnumValue([ActivityState], ‘Activity: States’, ‘Mass letter’)) Filter: Alle Briefe, inklusive der Serienbriefe, aber ohne die Statusdatensäze, für die es noch gar keinen Brief gib. Alternative Lösung.
!BAIsEqualEnumValue([Status], ‘Follow-up status’, ‘Erledigt’) AND [EndDate] > AddYears(LocalDateTimeToday(), -1) AND [EndDate] < AddYears(LocalDateTimeToday(), 1) Filter: Alle offenen Wiedervorlagen für den Zeitraum Heute – 1 Jahr und Heute + 1 Jahr
BACurrentUser() = [CreatedBy] Filter: Alle Wiedervorlagen, die ich erstellt habe.
BAGetPrimarySource(’‘, ‘RelatedParents’, ‘Nearest’, ‘‘, BAGetPrimarySource(’‘, ‘RelatedResponsiblePerson’, ?, ?)) = BACurrentUser() Alle Wiedervorlagen, irgendwo in der Hierarchie zu Firmen, deren Betreuer ich bin.
[Subject] + ‘ (’ + BATranslateEnum([Status]) + ‘) ‘ + ToStr(GetDay(BAToCurrentTimeZone([Created]))) + ‘.’ + ToStr(GetMonth(BAToCurrentTimeZone([Created]))) + ‘.’ + ToStr(GetYear(BAToCurrentTimeZone([Created]))) Betreff + “(” + Auswahllistenwert + “)” + Erstelldatum (Ohne Zeit)
Iif(IsNull([EndDate]), AddHours(BAToCurrentTimeZone([Created]), 2), [EndDate]) Wenn Enddatum leer: Erstelldatum + 2h

Beispiele für Teildatensätze

Formel Erklärung
[Addresses][[SortOrder] = 0].Single([City]) Ausgabe der Datenspalte „City” des ersten Teildatensatzes.
[Addresses][[SortOrder] = 1].Single(BATranslateEnum([AddressType])) Ausgabe des Auswahllistenwertes in Benutzersprache aus der Datenspalte „AddressType” des zweiten Teildatensatzes.
[Addresses][BAIsEqualEnumValue([AddressType], ‘Address types’, ‘Hauptanschrift’)].Single([City]) Ausgabe der Datenspalte „City” aus dem Teildatensatz mit dem Adresstyp „Hauptanschrift”.
[Addresses][[AddressType] = {eb7852ef-9ba5-47f6-ab68-82fb891a2943}].Single([City]) Ausgabe der Datenspalte „City” aus dem Teildatensatz mit einem über GUID bestimmten Adresstyp.