Die Art und Weise wie Aktionen Daten an die Clientseite übertragen hat sich geändert, da Änderungen an dem Steuerelement vorgenommen wurden. Das betrifft insbesondere die ehemalige Eigenschaft AdditionalClientData von ActionBase. Aber auch DynamicClientVisibility wurde teilweise während dem rendern der Aktion verändert.

Bei den Aktionen kamen solche mißbräuchliche Änderungen des Steuerelements strukturell vor, da die Daten für die Clientseite über die ehemalige Eigenschaft AdditionalClientData gesetzt wurden. Aktionen haben keine eigene Klasse für das Rendern, sondern das Steuerlement wird ausschließlich nach über die Methode AdditionalRibbonButtonAssignment nach Client spezifischen Daten gefragt. In dieser Methode wurde dann AdditionalClientData gesetzt, was genau Auswirkungen auf andere Benitzer haben kann, da diese Eigenschaft für alle Benutzer gilt.

ActionMethodId setzen

Um einen vereinfachten Weg zum Setzen der Clientseiten Aktion zu ermöglichen wurde eine neue Eigenschaft ActionMethodId eingeführt. Dies bedeutet auch das eine Änderung der Aktion zur Laufzeit nicht erfolgen darf. dadurch wird aus

AdditionalClientData.AddOrUpdate("ActionMethodId", "BA.Training.ClientActionMyAction");

nun

ActionMethodId = "BA.Training.ClientActionMyAction";

im Konstruktor des Steuerelements.

Änderung der Signatur von AdditionalRibbonButtonAssignment

Die Signatur von AdditionalRibbonButtonAssignment hat sich geändert. Zum einen wird nun eine Map additionalClientData übergeben in der man die Clientseitigen Daten hineinschreibt und zum anderen erhält man den aktuellen Datensatz orm, falls die Aktion in einer Maske dargestellt wird.

public override void AdditionalRibbonButtonAssignment(RibbonButtonItem ribbonItem, Dictionary<string, object> additionalClientData, EnumActionVisibleForParentType parentType, DevExUIModelBase uiModel, OrmBABase orm)

Umstellen von AdditionalClientData nach additionalClientData

Der Name des Parameters additionalClientData von AdditionalRibbonButtonAssignment ist identisch zu der ehemeligen Steuerelementeigenschaft und es muss lediglich der erste Buchstabe “A” in “a” geändert werden.

Häufig wurde die Eigenschaft AdditionalClientData in der Vergangenheit auch an anderen Stellen mit Werten belegt. Beispielsweise im Konstruktor. Alle diese Belegungen müssen nun in die Methode AdditionalRibbonButtonAssignment verschoben werden.

Wegfall der Schnittstelle IOrmSecurityHandler

Die Schnittstelle IOrmSecurityHandler und damit die Methode CanHandleOrm ist weggefallen. Der Inhalt muss nach AdditionalRibbonButtonAssignment verschoben werden.

In diesem Zusammenhang existiert nun auch die Methode

ControlHelper.StandardOrmSecurityHandling(DataObject, this, orm);

nicht mehr. Statt den Aufruf kann man nun

additionalClientData["UserHasRole"] = orm?.UserCanEdit() ?? true;

schreiben.

Laufzeit Änderungen von DynamicClientVisibility

Wenn in AdditionalRibbonButtonAssignment die Eigenschaft DynamicClientVisibility verändert wurde ist dies ebenfalls eine unzulässige Änderung des Steuerelementes und muss unterbleiben. Alternativ kann man nun anstatt der Eigenschaft des Steuerelements den Wert in additionalClientData setzen. Der Objekttyp ist dort List<string>

Beispiel:

List<string> dynamicClientVisibility = (List<string>)additionalClientData["DynamicClientVisibility"];
dynamicClientVisibility.Add(EnumActionVisibility.IfUserHasRoleGuid);