Übersicht über Aktivitätsvalidierungslogik

Die Validierungssteuerelementkomponente einer Aktivität beinhaltet die gesamte Entwurfs- und Laufzeitvalidierungslogik. Dadurch wird sichergestellt, dass die Eigenschaften einer Aktivität, die in den Metadaten der Aktivitäten definiert sind, ordnungsgemäß konfiguriert werden.

Das Aktivitätsframework verfügt über umfassende Standardprüfungsfunktionen, sodass für die Aktivität meist kein benutzerdefiniertes Validierungssteuerelement geschrieben werden muss. Wird dennoch eine benutzerdefinierte Validierungssteuerelementklasse geschrieben, muss die benutzerdefinierte Klasse von Validator erben.

Hinweis

Standardmäßig werden Aktivitätsinstanzeigenschaften nicht überprüft, auch wenn ValidationOptionAttribute auf ValidationOption.Required festgelegt wird. Sollen Instanzeigenschaften in den benutzerdefinierten Aktivitäten geprüft werden, muss zu diesem Zweck ein benutzerdefiniertes Validierungssteuerelement geschrieben werden.

Die Prüfung wird automatisch während der Kompilierung eines Workflows durchgeführt sowie beim Aufruf der Validate-Methode einer Validierungssteuerelementkomponente für eine Aktivität mit dem entsprechenden Aktivitätsmetadatenobjekt als Parameter. Dadurch kann ein Workflowerstellungstool (bei Auswahl) ein Paradigma vom Typ "correct-by-construction" verwenden.

Darüber hinaus werden Überprüfungen in einer Workflowinstanz während der Laufzeit durchgeführt, wenn eine Workflowänderung vorgenommen wird. Diese Prüfung kann sich von der während der Kompilierzeit ausgeführten Prüfung unterscheiden. Durch diese Funktion wird die Sicherheit eines Laufzeitvorgangs gewährleistet (beispielsweise Hinzufügen oder Ersetzen einer Aktivität in der Aktivitätsstruktur einer ausgeführten Workflowinstanz).

Im folgenden Beispiel wird gezeigt, wie ein benutzerdefiniertes Aktivitätsvalidierungssteuerelement durch Ableitung von der ActivityValidator-Klasse und Überschreiben der Validate-Methode erstellt wird, um benutzerdefinierte Prüfungscodes hinzuzufügen.

Public Class CustomActivityValidator
    Inherits ActivityValidator
    Public Overrides Function Validate(ByVal manager As ValidationManager, ByVal obj As Object) As ValidationErrorCollection
        Dim activity As Activity1 = CType(obj, Activity1)
        If activity.Parent IsNot Nothing Or activity.Activities.Count <> 0 Then
            Dim errors As ValidationErrorCollection = New ValidationErrorCollection()
            errors.AddRange(MyBase.Validate(manager, obj))
            Return errors
        End If
        Return New ValidationErrorCollection()
    End Function
End Class
public class CustomActivityValidator : ActivityValidator
{
    public override ValidationErrorCollection Validate(ValidationManager manager, object obj)
    {
        Activity1 activity = obj as Activity1;
        if (activity.Parent != null || activity.Activities.Count != 0)
        {
            ValidationErrorCollection errors = new ValidationErrorCollection();
            errors.AddRange(base.Validate(manager, obj));
            return errors;
        }
    return new ValidationErrorCollection();
    }
}

Soll der benutzerdefinierte Codegenerator mit der Aktivität verwendet werden, muss die Aktivität dem folgenden Beispiel entsprechend mit ActivityValidatorAttribute ergänzt werden.

<ActivityValidator(GetType(CustomActivityValidator))> _
Public Class Activity1
    Inherits SequenceActivity

    Public Shared MyPropertyProperty As DependencyProperty = System.Workflow.ComponentModel.DependencyProperty.Register("MyProperty", GetType(String), GetType(Activity1))

    <DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)> _
    Public Property MyProperty() As String
        Get
            Return (CType((MyBase.GetValue(Activity1.MyPropertyProperty)), String))
        End Get
        Set(ByVal Value As String)
            MyBase.SetValue(Activity1.MyPropertyProperty, value)
        End Set
    End Property
End Class
[ActivityValidator(typeof(CustomActivityValidator))]
public partial class Activity1: SequenceActivity
{
    public Activity1()
    {
        InitializeComponent();
    }

    public static DependencyProperty MyPropertyProperty = System.Workflow.ComponentModel.DependencyProperty.Register("MyProperty", typeof(string), typeof(Activity1));

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
    public string MyProperty
    {
        get
        {
            return ((string)(base.GetValue(Activity1.MyPropertyProperty)));
        }
        set
        {
            base.SetValue(Activity1.MyPropertyProperty, value);
        }
    }
}

Siehe auch

Referenz

Validator

Konzepte

Erstellen von benutzerdefinierten Aktivitäten

Weitere Ressourcen

Entwickeln von Workflowaktivitäten

Footer image

Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.