Convalida basata su codice imperativoImperative Code-Based Validation

La convalida basata su codice imperativo fornisce un modo semplice per la convalida automatica di un'attività ed è disponibile per le attività che derivano dagli oggetti CodeActivity, AsyncCodeActivity e NativeActivity.Imperative code-based validation provides a simple way for an activity to provide validation about itself, and is available for activities that derive from CodeActivity, AsyncCodeActivity, and NativeActivity. Il codice di convalida che determina qualsiasi errore o avviso di convalida viene aggiunto all'attività.Validation code that determines any validation errors or warnings is added to the activity.

Utilizzo della convalida basata su codiceUsing Code-Based Validation

La convalida basata su codice è supportata dalle attività che derivano dagli oggetti CodeActivity, AsyncCodeActivity e NativeActivity.Code-based validation is supported by activities that derive from CodeActivity, AsyncCodeActivity, and NativeActivity. Il codice di convalida può essere inserito nell'override CacheMetadata e gli errori o gli avvisi di convalida possono essere aggiunti all'argomento dei metadati.Validation code can be placed in the CacheMetadata override, and validation errors or warnings can be added to the metadata argument. Nell'esempio seguente, tratto dal convalida di base di esempio, se il Cost è maggiore di Price, un errore di convalida viene aggiunto ai metadati.In the following example, taken from the Basic Validation sample, if the Cost is greater than the Price, a validation error is added to the metadata.

Nota

Si noti che Cost e Price non sono argomenti dell'attività, ma proprietà impostate in fase di progettazione.Note that Cost and Price are not arguments to the activity, but are properties that are set at design time. Per questo motivo i valori possono essere convalidati nell'override CacheMetadata.That is why their values can be validated in the CacheMetadata override. Il valore dei dati passati mediante un argomento non può essere convalidato in fase di progettazione perché i dati non si propagano fino alla fase di esecuzione, ma gli argomenti dell'attività possono essere convalidati per assicurarsi che siano associati usano i gruppi di overload e di attributo RequiredArgument.The value of the data flowing through an argument cannot be validated at design time because the data does not flow until run time, but activity arguments can be validated to ensure that they are bound by using the RequiredArgument attribute and overload groups. Questo codice di esempio rileva l'attributo RequiredArgument per l'argomento Description e, se non è associato, viene generato un errore di convalida.This example code sees the RequiredArgument attribute for the Description argument, and if it is not bound then a validation error is generated. Gli argomenti obbligatori vengono trattati nelle argomenti necessari e gruppi di Overload.Required arguments are covered in Required Arguments and Overload Groups.

public sealed class CreateProduct : CodeActivity  
{  
    public double Price { get; set; }  
    public double Cost { get; set; }  

    // [RequiredArgument] attribute will generate a validation error   
    // if the Description argument is not set.  
    [RequiredArgument]  
    public InArgument<string> Description { get; set; }  

    protected override void CacheMetadata(CodeActivityMetadata metadata)  
    {  
        base.CacheMetadata(metadata);  
        // Determine when the activity has been configured in an invalid way.  
        if (this.Cost > this.Price)  
        {  
            // Add a validation error with a custom message.  
            metadata.AddValidationError("The Cost must be less than or equal to the Price.");  
        }  
    }  

    protected override void Execute(CodeActivityContext context)  
    {  
        // Not needed for the sample.  
    }  
}  

Per impostazione predefinita, un errore di convalida viene aggiunto ai metadati quando viene chiamato il metodo AddValidationError.By default, a validation error is added to the metadata when AddValidationError is called. Per aggiungere un avviso di convalida, usare l'overload AddValidationError che accetta un oggetto ValidationError e specificare che l'oggetto ValidationError rappresenta un avviso impostando la proprietà IsWarning.To add a validation warning, use the AddValidationError overload that takes a ValidationError, and specify that the ValidationError represents a warning by setting the IsWarning property.

Viene eseguita quando un flusso di lavoro viene modificato nell'utilità di progettazione del flusso di lavoro e gli eventuali errori o avvisi di convalida vengono visualizzati in tale utilità.Validation occurs when a workflow is modified in the workflow designer and any validation errors or warnings are displayed in the workflow designer. La convalida avviene anche in fase di esecuzione quando un flusso di lavoro viene richiamato e, se si verificano errori di convalida, viene generata un'eccezione InvalidWorkflowException dalla logica di convalida predefinita.Validation also occurs at run time when a workflow is invoked and if any validation errors occur, an InvalidWorkflowException is thrown by the default validation logic. Per ulteriori informazioni sulla chiamata della convalida e l'accesso a eventuali errori o avvisi di convalida, vedere richiamare la convalida delle attività.For more information about invoking validation and accessing any validation warnings or errors, see Invoking Activity Validation.

Qualsiasi eccezione generata dal metodo CacheMetadata non viene considerata come errore di convalida.Any exceptions that are thrown from CacheMetadata are not treated as validation errors. Queste eccezioni saranno escluse dalla chiamata all'oggetto Validate e devono essere gestite dal chiamante.These exceptions will escape from the call to Validate and must be handled by the caller.

La convalida basata su codice è utile per convalidare l'attività che contiene il codice, tuttavia non è visibile nelle altre attività del flusso di lavoro.Code-based validation is useful for validating the activity that contains the code, but it does not have visibility into the other activities in the workflow. Convalida i vincoli dichiarativi offre la possibilità di convalidare le relazioni tra un'attività e altre attività nel flusso di lavoro e viene descritta nel vincoli dichiarativi argomento.Declarative constraints validation provides the ability to validate the relationships between an activity and other activities in the workflow, and is covered in the Declarative Constraints topic.