Convalida basata su codice imperativo

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. Il codice di convalida che determina qualsiasi errore o avviso di convalida viene aggiunto all'attività.

Utilizzo della convalida basata su codice

La convalida basata su codice è supportata dalle attività che derivano dagli oggetti CodeActivity, AsyncCodeActivity e 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. Nell'esempio seguente se Cost è maggiore di Price, ai metadati viene aggiunto un errore di convalida.

Nota

Si noti che Cost e Price non sono argomenti dell'attività, ma proprietà impostate in fase di progettazione. Per questo motivo i valori possono essere convalidati nell'override CacheMetadata. 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. Questo codice di esempio rileva l'attributo RequiredArgument per l'argomento Description e, se non è associato, viene generato un errore di convalida. Gli argomenti obbligatori vengono illustrati in Argomenti obbligatori e gruppi di overload.

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. 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.

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à. 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. Per altre informazioni sul richiamo della convalida e sull'accesso a eventuali avvisi o errori di convalida, vedere Richiamo della convalida dell'attività.

Qualsiasi eccezione generata dal metodo CacheMetadata non viene considerata come errore di convalida. Queste eccezioni saranno escluse dalla chiamata all'oggetto Validate e devono essere gestite dal chiamante.

La convalida basata su codice è utile per convalidare l'attività che contiene il codice, tuttavia non è visibile nelle altre attività del flusso di lavoro. La convalida di vincoli dichiarativi consente di convalidare le relazioni tra un'attività specifica e le altre attività del flusso di lavoro ed è descritta nell'argomento Vincoli dichiarativi.