Condividi tramite


Convalida Code-Based imperativa

La convalida basata su codice imperativo consente a un'attività di fornire la convalida su se stessa ed è disponibile per le attività che derivano da CodeActivity, AsyncCodeActivitye NativeActivity. Il codice di convalida che determina eventuali errori o avvisi di convalida viene aggiunto all'attività.

Uso della convalida Code-Based

La convalida basata sul codice è supportata dalle attività che derivano da CodeActivity, AsyncCodeActivitye 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, viene aggiunto un errore di convalida ai metadati.

Annotazioni

Si noti che Cost e Price non sono argomenti per l'attività, ma sono proprietà impostate in fase di progettazione. Ecco perché i valori possono essere convalidati nell'override CacheMetadata . Il valore dei dati che fluiscono attraverso un argomento non può essere convalidato in fase di progettazione perché i dati non vengono trasferiti fino al runtime, ma gli argomenti dell'attività possono essere convalidati per garantire che siano vincolati utilizzando l'attributo RequiredArgument e i gruppi di overload. In questo codice di esempio viene visualizzato l'attributo RequiredArgument per l'argomento Description e, se non è associato, viene generato un errore di convalida. Gli argomenti obbligatori sono trattati 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, viene aggiunto un errore di convalida ai metadati quando AddValidationError viene chiamato . Per aggiungere un avviso di convalida, usare l'overload AddValidationError che accetta un ValidationErrore specificare che ValidationError rappresenta un avviso impostando la IsWarning proprietà .

La convalida viene eseguita quando un flusso di lavoro viene modificato nella finestra di progettazione del flusso di lavoro e gli eventuali errori o avvisi di convalida vengono visualizzati nella finestra di progettazione del flusso di lavoro. La convalida si verifica anche in fase di esecuzione quando viene richiamato un flusso di lavoro e, se si verificano errori di convalida, viene lanciata un'eccezione rappresentata da InvalidWorkflowException dalla logica di convalida predefinita. Per altre informazioni sulla chiamata della convalida e sull'accesso a eventuali avvisi o errori di convalida, vedere Richiamo della convalida delle attività.

Tutte le eccezioni generate da CacheMetadata non vengono considerate come errori di convalida. Queste eccezioni esce dalla chiamata a Validate e devono essere gestite dal chiamante.

La convalida basata sul codice è utile per convalidare l'attività che contiene il codice, ma non ha visibilità sulle altre attività nel flusso di lavoro. La convalida dei vincoli dichiarativi consente di convalidare le relazioni tra un'attività e altre attività nel flusso di lavoro ed è descritta nell'argomento Vincoli dichiarativi .