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/4928/devexpress-data-library/criteria-language-syntax
Wenn die Formelsprache in Ansichten oder Kalenderansichten verwendet wird, wird sie in genau eine Datenbankabfrage („SQL-Select”) umgewandelt und durch den Datenbankserver ausgeführt. An allen anderen Stellen wird sie innerhalb der Anwendung selbst ausgeführt. Dadurch ergeben sich einige grundsätzliche Unterschiede zwischen dem Ergebnis von Formeln in Ansichten oder Kalenderansichten sowie an allen anderen Stellen. In Ansichten kann es außerdem je nach Datenbankserver ebenfalls unterschiedliche Ergebnisse geben. Einige bekannte Unterschiede werden hier aufgeführt.
Werden Formel innerhalb der Anwendung ausgeführt, können diese zu mehreren Datenbankabfragen führen. Diese sind aus Gründen der Performance zu minimieren. Hinweise hierzu finden sich ebenfalls hier.
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. |