BA.Core.CriteriaOperators.CriteriaOperatorBuilder
In der Klasse befindet sich eine Sammlung verschiedener Methoden zum Erstellen komplexer Criteria Operator auf Objekt Basis. Beispielsweise für den Zugriff auf Auswahllisten, Gemeinsame Spalten, Relationen, etc.
Wird eine entsprechende String Repräsentation benötigt kann diese mit Hilfe von ToString()
auf den Objekten abgerufen werden.
Feldwert
Um auf einen Feldwert zuzugreifen [FeldName]
public static OperandProperty GetField(string fieldName)
Zeitzonen
Die Zeiten werden in BA-Datensätzen als UTC Wert abgespeichert. Sollen diese Werte in Formeln genutzt werden, müssen diese in die aktuelle Zeitzone umgewandelt werden.
public static CriteriaOperator GetDateWithTimeZone(CriteriaOperator operand)
Auswahllistenwert einer Einzelauswahl
Um den Auswahllistenwert einer Einzelauswahl zu erhalten, gibt es verschiedene Methoden
public static CriteriaOperator GetEnumSingleDisplayable(string fieldName, string language = null)
Übersetzung des Wertes
fieldName
Der Auswahllistenfeldname im aktuellen Datensatzlanguage
Optional: Sprache der Übersetzung
public static CriteriaOperator GetEnumSingleColor(string fieldName)
Farbwert des Wertes
fieldName
Der Auswahllistenfeldname im aktuellen Datensatz
public static CriteriaOperator GetEnumSingleImage(string fieldName)
Bild des Wertes
fieldName
Der Auswahllistenfeldname im aktuellen Datensatz
public static CriteriaOperator GetEnumSingle(string fieldName, CriteriaOperator selector, MasterEnum masterEnum = null)
Zugriff auf beliebige Felder des Wertes
fieldName
Der Auswahllistenfeldname im aktuellen Datensatzselector
Eine Formel, die auf den Auswahllistenwert ausgeführt wird.masterEnum
Optional: Wird benötigt, wenn in der Formel auf Felder zugegriffen wird, die speziell für eine Auswahlliste ist.
Auswahllistenwerte einer Mehrfachauswahl
Der Umgang mit mehrfachen Werten in Formelsprache ist nicht trival und man sollte sich auf die Verwendung der BA eigenen Funktion BAContainsEnumValue
beschränken.
Free Joins für Datenbankabfragen
Die Free Joins in Datenbankabfragen sind sehr komplex, daher stehen in dieser Library eine Reihe Methoden zur Verfügung, um dies zu vereinfachen. Benötigt werden diese, wenn man zum Beispiel eine Spalte für Ansichten implementieren möchte.
Auswahllistenwerte einer Mehrfachauswahl
In Formeln für Datenbankabfragen ist es eventuell trotzdem notwendig, die Joins auf alle Werte zu nutzen. Dies ist beispielsweise der Fall, wenn man eine eigene Spalte für die Mehrfachgruppierung in Ansichten implementieren möchte, Dazu stehen hier eine Reihe von Methoden zur Verfügung.
GetEnumMultiDisplayable
GetEnumMultiColor
GetEnumMultiImage
Die Basis Zugriffsmethode ist GetEnumMulti
, sie liefert den entsprechenden Free Join als JoinOperand
zurück.
public static CriteriaOperator GetEnumMulti(string fieldName, Guid masterGuid, CriteriaOperator selector, bool onlyRelations = false)
fieldName
Der Auswahllistenfeldname im aktuellen DatensatzmasterGuid
Guid der Auswahllisteselector
Eine Formel, die auf die Auswahllistenwerte ausgeführt wird.onlyRelations
Optional: True, falls man die Relationsdatensätze haben möchte. In dem Fall wird derselector
auf diese Sätze ausgeführt.
Teil-Datensätze
Für den Zugriff auf Teil-Datensätze steht die zentrale Methode GetSubRecords
zur Verfügung.
public static JoinOperand GetSubRecords(OrmSubRecordField subRecordField, int position = -1, Guid? uniqueKey = null, Aggregate aggregator = Aggregate.Single, CriteriaOperator aggregatedExpression = null)
subRecordField
Das Steuerelement für Teil-Datensätze aus der Datentabellenkonfigurationposition
Optional:SortOrder
Index des gewünschten SatzesuniqueKey
Optional und alternativ zuposition
: Eindeutiger Schlüssel des Teil-Datensatzes. Dies kann nur genutzt werden, wenn die Verwendung des Teil-Datensatzes in der Datentabelle dies unterstützt.aggregator
Optional:Aggregate
Typ. BeispielsweiseAggregate.Single
oderAggregate.Exist
aggregatedExpression
Optional: Formel die auf die Sätze der Aggregation ausgeführt wird. Default ist[This]
, was den Datensatz selbst zurückliefert.
Beispiel:
OrmSubRecordField subRecordField = (OrmSubRecordField)Api.Config.OrmEntity(EnumDataSourceExtension.MyDataTable).GetField(nameof(OrmMyDataTable.SubDatas));
OperandProperty fieldProperty = new OperandProperty(nameof(OrmSubDataTable.TextField));
JoinOperand subRecordSortOrder0 = CriteriaOperatorBuilder.GetSubRecords(subRecordField, position: 0, aggregatedExpression: fieldProperty);
Relationen
Um die komplexen Relation-Joins zur vereinfachen, verwendet man die folgenden beiden Methoden. Eine für den Zugriff von Ziel zur Quelle und eine für den umgekehrten Fall.
public static JoinOperand GetSourcesJoin(bool onlyPrimary, EnumRelationType relationType, Guid? relationCategory, IEnumerable<Guid> sourceTypes = null, bool onlyRelations = false, Aggregate aggregator = Aggregate.Single, CriteriaOperator aggregatedExpression = null)
Um auf die Quellen einer Relation zuzugreifen, steht diese Methode zur Verfügung.
onlyPrimary
Flag ob nur der primären Relation gefolgt werden soll. Dies muss auftrue
gesetzt sein, wenn man nur einen Datensatz erwartet.relationType
Der RelationstyprelationCategory
Die RelationskategoriesourceTypes
Optional: Ergebnis wird auf bestimmte Typen eingeschränkt. Ist es nur ein Typ, dann kannaggregatedExpression
auch konkrete Felder dieses Typs beinhalten.onlyRelations
Optional: Bei True geht der Join nur bis zurOrmRelation
und nicht zu den Datensätzen selbst. Dann wirdaggregatedExpression
auch auf die Relationsdatensätze ausgeführt.aggregator
Optional:Aggregate
Typ. BeispielsweiseAggregate.Single
oderAggregate.Exist
aggregatedExpression
Optional: Formel die auf die Sätze der Aggregation ausgeführt wird. Default ist[This]
, was den Datensatz selbst zurückliefert.
public static JoinOperand GetTargetsJoin(EnumRelationType relationType, Guid? relationCategory, IEnumerable<Guid> targetTypes = null, bool onlyRelations = false, Aggregate aggregator = Aggregate.Single, CriteriaOperator aggregatedExpression = null)
Um auf die Ziele einer Relation zuzugreifen, steht diese Methode zur Verfügung.
relationType
Der RelationstyprelationCategory
Die RelationskategorietargetTypes
Optional: Ergebnis wird auf bestimmte Typen eingeschränkt. Ist es nur ein Typ, dann kannaggregatedExpression
auch konkrete Felder dieses Typs beinhalten.onlyRelations
Optional: Bei True geht der Join nur bis zurOrmRelation
und nicht zu den Datensätzen selbst. Dann wirdaggregatedExpression
auch auf die Relationssätze ausgeführt.aggregator
Optional:Aggregate
Typ. BeispielsweiseAggregate.Single
oderAggregate.Exist
aggregatedExpression
Optional: Formel die auf die Sätze der Aggregation ausgeführt wird. Default ist[This]
, was den Datensatz selbst zurückliefert.
Hierarchie-Relationen
Falls eine Relation Hierarchisch ist, können diese Hilfsmethoden verwendet werden, um beispielsweise den obersten und den nähsten Datensatz zu erhalten.
public static JoinOperand GetHierarchyPrimarySourceJoin(EnumRelationType relationType, Guid? relationCategory, EnumPrimaryHierarchyRelationSourceSelector hierarchyRelationSourceSelector, int levelCount = 0, GuidSet sourceTypes = null, bool onlyRelations = false, Aggregate aggregator = Aggregate.Single, CriteriaOperator aggregatedExpression = null)
Die Methode wird verwendet, um garantiert nur einen Datensatz zu erhalten, indem dem primären Weg gefolgt wird.
relationType
Der RelationstyprelationCategory
Die RelationskategoriehierarchyRelationSourceSelector
Hierüber wird definiert, was in der Hierarchie ermittelt werden soll.levelCount
Optional: Wird nur benötigt, falls der Wert vonhierarchyRelationSourceSelector
, den Level benötigt.sourceTypes
Optional: Ergebnis wird auf bestimmte Typen eindeschränkt. Ist es nur ein Typ, dann kannaggregatedExpression
auch konkrete Felder dieses Typs beinhalten.onlyRelations
Optional: Bei True geht der Join nur bis zurOrmHierarchyRelationBase
basierten Tabelle und nicht zu den Datensätzen selbst. Dann wirdaggregatedExpression
auch auf die Relationssätze ausgeführt.aggregator
Optional:Aggregate
Typ. BeispielsweiseAggregate.Single
oderAggregate.Exist
aggregatedExpression
Optional: Formel die auf die Sätze der Aggregation ausgeführt wird. Default ist[This]
, was den Datensatz selbst zurückliefert.
public static JoinOperand GetHierarchySourcesJoin(bool onlyPrimary, EnumRelationType relationType, Guid? relationCategory, EnumHierarchyRelationSourceSelector hierarchyRelationSourceSelector, int levelCount = 0, IEnumerable<Guid> sourceTypes = null, bool onlyRelations = false, Aggregate aggregator = Aggregate.Single, CriteriaOperator aggregatedExpression = null)
Die Methode wird verwendet, um in der Hierarchie bestimmte Quellen zu finden.
onlyPrimary
Flag ob nur der primären Relation gefolgt werden soll. Dies muss auftrue
gesetzt sein, wenn man nur einen Datensatz erwartet.relationType
Der RelationstyprelationCategory
Die RelationskategoriehierarchyRelationSourceSelector
Hierüber wird definiert, was in der Hierarchie ermittelt werden soll.levelCount
Optional: Wird nur benötigt, falls der Wert vonhierarchyRelationSourceSelector
, den Level benötigt.sourceTypes
Optional: Ergebnis wird auf bestimmte Typen eingeschränkt. Ist es nur ein Typ, dann kannaggregatedExpression
auch konkrete Felder dieses Typs beinhalten.onlyRelations
Optional: Bei True geht der Join nur bis zurOrmHierarchyRelationBase
basierten Tabelle und nicht zu den Datensätzen selbst. Dann wirdaggregatedExpression
auch auf die Relationssätze ausgeführt.aggregator
Optional:Aggregate
Typ. BeispielsweiseAggregate.Single
oderAggregate.Exist
aggregatedExpression
Optional: Formel, die auf die Sätze der Aggregation ausgeführt wird. Default ist[This]
, was den Datensatz selbst zurückliefert.
Zugriff auf das Benutzerprofil
Diese Methode erzeugt einen Join der auf das Benutzerprofil des aktuellen Benutzers verweist.
public static JoinOperand GetCurrentUserProfile(CriteriaOperator selector = null)
selector
Eine Formel, die auf dem Benutzerprofil ausgeführt wird.
Filter
Für Abfragen benötigt man Filter, um die korrekten Datensätze zu erhalten.
Temporary Key Filter
Der wichtigste Filter ist der Temporary Key Filter, um temporäre Datensätze auszuschließen.
public static CriteriaOperator ApplyTemporaryKeyFilter(CriteriaOperator criteria = null, Guid? temporaryKey = null)
Aktiv Filter
Um beispielsweise nur aktive Datensätze zu erhalten, muss dieser Filter gesetzt werden.
public static CriteriaOperator ApplyActiveFilter(CriteriaOperator criteria, EnumEntryActiveState activeState)
Datensatzfilter
Abfragen sollten möglichste immer auf die gewünschten Typen eingeschränkt werden, falls globale Abfragen erstellt. Dazu dient diese Methode
public static CriteriaOperator ApplyObjectTypeFilter(CriteriaOperator criteria, Guid dataSourceGuid, CriteriaOperator selector = null)
Leserechte
Um die Leserechte zu berücksichtigen, muss dieser Filter gesetzt werden.
public static CriteriaOperator ApplyReadPermissions(CriteriaOperator criteria, Type queryOrmType, GuidSet dataSources = null, bool doNotAddOrmTypeCheck = false)