Datenprovider benötigen in vielen Fällen Parameter, diese werden im Attribut hinterlegt. In eigen Fälle stehen diese Parameter zum Zeitpunkt der Programmierung nicht zur Verfügung, da sie selbst konfiguriert werden. Beispielsweise benötigt die Feldauswahl die ID der Datentabellenkonfiguration. In Masken und Ansichten liegt die zugehörige Datentabelle als Konfigurationwert vor und kann daher am Datenprovider nicht gesetzt werden.

Um Dynamisch die Datenprovider mit Parameter zu Versorgen stehen sogenannte Modifiers zur Verfügung. Diese sind im Packet BA.Core.CustomAttributes abgelegt und haben den Präfix CDP. Der wichtigstes Modifier ist dabei der CDPDataSourceModifier, dieser ermittelt dynamisch die konfigurierte(n) Datentabelle(n) und versucht ebenso dynamisch diese dem Datenprovider zuzuweisen. Daher kann dieser Modifier ist vielen Kombinationen Konfiguration / Datenprovider genutzt werden.

[CDPOrmFieldsProperties(TypesToShow = new[] { typeof(OrmTextField) })]
[CDPDataSourceModifier]
[ComboboxControl]
public String OrmFieldName { get; set; }

Generischer Modifier

Der Modifier CDPModifier erlaubt es eine Methode im Steuerelement zu implementieren, welche dann den Datenprovider zur Laufzeit anpassen kann.

[CDPOrmFieldsProperties(TypesToShow = new[] { typeof(OrmTextField) })]
[CDPModifier(ModifierMethod = nameof(ModifyDataProviderProperties))]
[ComboboxControl]
public String OrmFieldName { get; set; }

Die Methode muss eine entsprechende Signatur haben. Keinen Rückgabewert und drei Parameter ConfigurationBase configuration, string propertyName und ControlDataProviderPropertiesBase properties.

public virtual void ModifyDataProviderProperties(ConfigurationBase configuration, string propertyName, ControlDataProviderPropertiesBase properties)
{
    if (properties is CDPOrmFieldsProperties prop)
    {
        if (configuration != null && configuration != null && propertyName == nameof(OrmFieldName))
        {
            GridViewConfiguration gridConfig = (GridViewConfiguration)configuration;
            prop.DataSources = GuidSet.Parse(gridConfig.GetDataSource());
        }
    }
}

Eigenen Modifier implementieren

Um einen eigenen Modifier zu implementieren wird eine Klasse erstellt, die die Basisklasse CDPModifierAttributeBase erweitert. Dazu muss eine Funktion implementiert werden in der man Zugriff auf die Konfiguration, auf das Steuerelement, auf den Namen der Eigenschaft an der der Datenprovider sitzt und auf die Eigenschaftenklasse des datenprovider selbst, um diesen zu modifizieren.

public void ModifyCDPProperties(ConfigurationBase configuration, object control, string propertyName, ControlDataProviderPropertiesBase properties)
{
   ...
}