Mit Hilfe der Maskensteuerung ist es beispielsweise möglich abhängig von Feldwerten Elemente in der Maske zu aktivieren bzw. zu deaktivieren oder ganz auszublenden. Dazu werden sogenannte Form-Events implementiert.
Hierbei wird die Klasse BAFormEventsBase erweitert und das Attribut BAFormEventsImplementation gesetzt. Das Attribut erhält eine eindeutige Guid und einen Namen.

[BAFormEventsImplementation("[INSERT UNIQUE GUID]", "[INSTERT TRANSLATION GUID]")]
public class MyFormEvents : BAFormEventsBase
{ ... }

Folgende Events existieren

  • BeforeOpening Wird vor allen Berechnungen oder Laden der Daten ausgeführt.
  • OnOpening Wird vor dem Öffnen ausgeführt.
  • OnRefresh Wird beim Aktualisieren ausgeführt. Wird in der Basisklasse bei OnOpening ausgeführt.
  • OnSaved Wird beim Speichern ausgeführt. Wird in der Basisklasse bei OnOpening ausgeführt.

Maskensteuerelemente beeinflussen

Mit den Hilfsmethoden AddAttributeToControl(s) kann man Attribute bestimmten Steuerelementen hinzufügen. Man kann das Steuerelement selbst ermitteln oder über

  • den Feldnamen,
  • den Typen des Steuerelementes,
  • den Relationstypen / Relationskategorie

bestimmen.

Beispiel: Ausblenden des Steuerelementes für den Feldnamen LastName eines Kontaktes.

public override void OnOpening(FormEventsParameters parameters)
{
    base.OnOpening(parameters);
    AddAttributeToControl(parameters, nameof(OrmContact.LastName), AttributeEnum.Skip);
}

Möglichkeiten von AttributeEnum

  • ReadOnly Lesemodus
  • Skip Ausblenden (Feld wird nicht gerendert)
  • Visible Ausblenden (Feld wird unsichtbar gerendert)
  • ReadOnlyIfNotEmpty Lesemodus, wenn das Feld nicht leer ist.
  • SkipIfNotEmpty Ausblenden, wenn das Feld nicht leer ist (Feld wird nicht gerendert)
  • SkipRequiredValidation Überspringt die Pflichtfeldvalidierung.

Ribbon bar-Steuerelemente beeinflussen

Auch die Aktionen in der Ribbon bar können beeinflusst werden. Um die richtigen Aktionen zu erhalten existiert die Hilfsmethode GetActionsOfType, um Aktionen eines bestimmten Typen zu ermitteln.

protected static IEnumerable<T> GetActionsOfType<T>(FormEventsParameters parameters) where T : ActionBase

Mit der Klasse RibbonActionsModificationModel kann man nun die DynamicClientVisibility beeinflussen.

public override void OnOpening(FormEventsParameters parameters)
{
    base.OnOpening(parameters);
    IEnumerable<ClientActionCreatePDFAndEMail> actions = GetActionsOfType<ClientActionCreatePDFAndEMail>(parameters);
    foreach (ClientActionCreatePDFAndEMail action in actions)
    {
        RibbonActionsModificationModel modifier = new RibbonActionsModificationModel();
        modifier.DynamicClientVisibility.Add(EnumActionVisibility.IfValueIsTrue);
        modifier.AdditionalClientData.Add("TestValueIsTrue", ((OrmMyDataTable)parameters.Orm).BooleanField);
        parameters.FormModel.RibbonModifications.Add(action.Id, modifier);
    }
}