Panoramica sulla logica di convalida delle attività
Nel componente di convalida di un'attività è contenuta tutta la logica di convalida in fase di progettazione e di esecuzione. Ciò assicura che le proprietà dell'attività, definite nei metadati dell'attività, siano configurate correttamente.
Il framework di attività fornisce funzionalità di convalida predefinite complete, pertanto in molti casi non è necessario scrivere una convalida personalizzata per l'attività. Se si scrive una classe di convalida personalizzata, questa dovrà ereditare dalla classe Validator.
Nota
Per impostazione predefinita, le proprietà dell'istanza dell'attività non vengono convalidate nemmeno quando si imposta ValidationOptionAttribute su ValidationOption.Required. Se si desidera convalidare le proprietà dell'istanza nelle attività personalizzate, per farlo è necessario creare una convalida personalizzata.
La convalida avviene automaticamente durante la compilazione di un flusso di lavoro, oltre che quando il metodo Validate di un componente di convalida per un'attività viene chiamato utilizzando l'oggetto metadati dell'attività corrispondente come parametro. Ciò consente a uno strumento per la creazione di flussi di lavoro di utilizzare un paradigma "corretto dal punto di vista della costruzione", se opportuno.
La convalida si verifica inoltre in fase di esecuzione su un'istanza del flusso di lavoro quando viene eseguita una modifica del flusso. Questa convalida può differire dalla convalida eseguita in fase di compilazione. Questa funzionalità assicura la sicurezza di un'operazione runtime quale l'aggiunta o la sostituzione di un'attività nella struttura delle attività di un'istanza del flusso di lavoro in esecuzione.
Nell'esempio seguente viene illustrato come creare una convalida delle attività personalizzata mediante derivazione dalla classe ActivityValidator ed eseguendo l'override del metodo Validate per aggiungere codice di convalida personalizzato.
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();
}
}
Per utilizzare la convalida personalizzata con l'attività, è necessario decorare l'attività ActivityValidatorAttribute, come illustrato nell'esempio seguente.
<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);
}
}
}
Vedere anche
Riferimenti
Concetti
Creazione di attività personalizzate
Altre risorse
Sviluppo di attività flusso di lavoro
Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.