Condividi tramite


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

Validator

Concetti

Creazione di attività personalizzate

Altre risorse

Sviluppo di attività flusso di lavoro

Footer image

Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.