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
fieldNameDer Auswahllistenfeldname im aktuellen DatensatzlanguageOptional: Sprache der Übersetzung
public static CriteriaOperator GetEnumSingleColor(string fieldName)
Farbwert des Wertes
fieldNameDer Auswahllistenfeldname im aktuellen Datensatz
public static CriteriaOperator GetEnumSingleImage(string fieldName)
Bild des Wertes
fieldNameDer Auswahllistenfeldname im aktuellen Datensatz
public static CriteriaOperator GetEnumSingle(string fieldName, CriteriaOperator selector, MasterEnum masterEnum = null)
Zugriff auf beliebige Felder des Wertes
fieldNameDer Auswahllistenfeldname im aktuellen DatensatzselectorEine Formel, die auf den Auswahllistenwert ausgeführt wird.masterEnumOptional: 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.
GetEnumMultiDisplayableGetEnumMultiColorGetEnumMultiImage
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)
fieldNameDer Auswahllistenfeldname im aktuellen DatensatzmasterGuidGuid der AuswahllisteselectorEine Formel, die auf die Auswahllistenwerte ausgeführt wird.onlyRelationsOptional: True, falls man die Relationsdatensätze haben möchte. In dem Fall wird derselectorauf 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)
subRecordFieldDas Steuerelement für Teil-Datensätze aus der DatentabellenkonfigurationpositionOptional:SortOrderIndex des gewünschten SatzesuniqueKeyOptional 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.aggregatorOptional:AggregateTyp. BeispielsweiseAggregate.SingleoderAggregate.ExistaggregatedExpressionOptional: 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.
onlyPrimaryFlag ob nur der primären Relation gefolgt werden soll. Dies muss auftruegesetzt sein, wenn man nur einen Datensatz erwartet.relationTypeDer RelationstyprelationCategoryDie RelationskategoriesourceTypesOptional: Ergebnis wird auf bestimmte Typen eingeschränkt. Ist es nur ein Typ, dann kannaggregatedExpressionauch konkrete Felder dieses Typs beinhalten.onlyRelationsOptional: Bei True geht der Join nur bis zurOrmRelationund nicht zu den Datensätzen selbst. Dann wirdaggregatedExpressionauch auf die Relationsdatensätze ausgeführt.aggregatorOptional:AggregateTyp. BeispielsweiseAggregate.SingleoderAggregate.ExistaggregatedExpressionOptional: 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.
relationTypeDer RelationstyprelationCategoryDie RelationskategorietargetTypesOptional: Ergebnis wird auf bestimmte Typen eingeschränkt. Ist es nur ein Typ, dann kannaggregatedExpressionauch konkrete Felder dieses Typs beinhalten.onlyRelationsOptional: Bei True geht der Join nur bis zurOrmRelationund nicht zu den Datensätzen selbst. Dann wirdaggregatedExpressionauch auf die Relationssätze ausgeführt.aggregatorOptional:AggregateTyp. BeispielsweiseAggregate.SingleoderAggregate.ExistaggregatedExpressionOptional: 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.
relationTypeDer RelationstyprelationCategoryDie RelationskategoriehierarchyRelationSourceSelectorHierüber wird definiert, was in der Hierarchie ermittelt werden soll.levelCountOptional: Wird nur benötigt, falls der Wert vonhierarchyRelationSourceSelector, den Level benötigt.sourceTypesOptional: Ergebnis wird auf bestimmte Typen eindeschränkt. Ist es nur ein Typ, dann kannaggregatedExpressionauch konkrete Felder dieses Typs beinhalten.onlyRelationsOptional: Bei True geht der Join nur bis zurOrmHierarchyRelationBasebasierten Tabelle und nicht zu den Datensätzen selbst. Dann wirdaggregatedExpressionauch auf die Relationssätze ausgeführt.aggregatorOptional:AggregateTyp. BeispielsweiseAggregate.SingleoderAggregate.ExistaggregatedExpressionOptional: 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.
onlyPrimaryFlag ob nur der primären Relation gefolgt werden soll. Dies muss auftruegesetzt sein, wenn man nur einen Datensatz erwartet.relationTypeDer RelationstyprelationCategoryDie RelationskategoriehierarchyRelationSourceSelectorHierüber wird definiert, was in der Hierarchie ermittelt werden soll.levelCountOptional: Wird nur benötigt, falls der Wert vonhierarchyRelationSourceSelector, den Level benötigt.sourceTypesOptional: Ergebnis wird auf bestimmte Typen eingeschränkt. Ist es nur ein Typ, dann kannaggregatedExpressionauch konkrete Felder dieses Typs beinhalten.onlyRelationsOptional: Bei True geht der Join nur bis zurOrmHierarchyRelationBasebasierten Tabelle und nicht zu den Datensätzen selbst. Dann wirdaggregatedExpressionauch auf die Relationssätze ausgeführt.aggregatorOptional:AggregateTyp. BeispielsweiseAggregate.SingleoderAggregate.ExistaggregatedExpressionOptional: 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)
selectorEine 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)


