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);