Möchte man für eine Eigenschaft von Datentyp String eine Auswahl anbieten, geschieht dies über die Angabe eines Steuerelementes und eines Datenproviders. Es ist sowohl möglich ein eigenes Steuerelement als auch einen eigenen Datenprovider zu implementieren oder man verwendet vorhandene Elemente.

Steuerelement

Zurzeit existieren zwei Steuerelemente:

[ComboboxControl]
[TokenboxControl]

Die Combobox wird für die Einzelauswahl und die Tokenbox für die Auswahl mehrerer Werte verwendet. Möchte man ein eigenes Steuerelement implementieren, muss man eine Klasse erstellen die SelectionControlAttributeBase erweitert und die Methode CreateControls implementiert.

Datenprovider

Es gibt eine Vielzahl verschiedener Datenprovider für Steuerelemente. Zu erkennen sind diese an dem Präfix „CDP“ und befinden sich unterhalb des Namespaces BA.Core.DataProviders.

Jeder Datenprovider besteht aus zwei Klassen:

  • dem Datenprovider selbst und
  • dessen Eigenschaften mit deren Hilfe das Verhalten angepasst werden kann.

Um einen Datenprovider zu verwenden, wird die Klasse mit den Eigenschaften als Attribut angegeben. Beispielsweise:

[CDPEnumValuesProperties(masterGuid: EnumWeekDays.Guid)]

Jeder Datenprovider hat andere Eigenschaften, mit denen er beeinflusst werden kann. Schauen sie sich die jeweiligen Möglichkeiten genau an.

In manchen Situationen sind die Eigenschaften variabel und können daher nicht am Attribut selbst angegeben werden. Dafür existieren Klassen mit deren Hilfe die Eigenschaften modifiziert werden können. Beispielsweise:

[CDPDataSourceModifier(UseConfiguration = true)]

Mit dessen Hilfe wird die Eigenschaft DataSource oder DataSources gesetzt werden. Diese beinhaltet üblicherweise die Guid oder das GuidSet der Datentabellen. In dem Beispiel wird die Datentabelle aus der Konfiguration übernommen. Weitere Möglichkeiten entnehmen sie der Klassendokumentation.

Eine einfache Möglichkeiten Modifizierungen vorzunehmen ist das Attribut

[CDPModifier(ModifierMethod = nameof(ModifyDataProviders))]

Dort gibt man eine Methode aus der aktuellen Klasse an und modifiziert dort die Eigenschaften des Datenproviders

public void ModifyDataProviders(ConfigurationBase configuration, string propertyName, ControlDataProviderPropertiesBase properties)
{
    if (properties is CDPOrmFieldsProperties prop && propertyName == nameof(OrmFieldName))
    {  …  }
}

Beispiele

Einzelauswahl einer Vorlage beliebigen Typs:

[ComboboxControl]
[CDPOrmDataProperties(dataSources: new string[] { EnumDataSource.TemplateBaseGuid })]
public string DefaultTemplate { get; set; }

Mehrfachauswahl von öffentlichen Ordnern. Die Ordner müssen die Datentabellen beinhalten können, welche in OrmDataSources angegeben sind.

[TokenboxControl]
[CDPRecordCollectionsProperties(onlyPublic: true)]
[CDPDataSourceModifier(ControlDataSourceProperty = nameof(OrmDataSources))]
public string RecordCollection { get; set; }

Einzelauswahl einer Rolle, ohne Jeder und System User.

[ComboboxControl]
[CDPRolesProviderProperties(filterEveryOne: true, filterSystemUser: true)]
public string EditorRole

Maskenaktualisierung

Mit dem Attribut [AutoSubmit] wird bei Auswahl eines neuen Wertes, die Maske automatisch aktualisiert, beispielsweise um weitere Eigenschaften ein- oder auszublenden.