Ü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
Konzepte
Erstellen von benutzerdefinierten Aktivitäten
Weitere Ressourcen
Entwickeln von Workflowaktivitäten
Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.