Partilhar via


Validação imperativa baseada em código

A validação baseada em código imperativo fornece uma maneira simples para uma atividade fornecer validação sobre si mesma, e está disponível para atividades que derivam de CodeActivity, AsyncCodeActivitye NativeActivity. O código de validação que determina quaisquer erros ou avisos de validação é adicionado à atividade.

Usando validação baseada em código

A validação baseada em código é suportada por atividades derivadas de CodeActivity, AsyncCodeActivitye NativeActivity. O código de validação pode ser colocado na CacheMetadata substituição e erros ou avisos de validação podem ser adicionados ao argumento de metadados. No exemplo a seguir, se o Cost for maior que o Price, um erro de validação será adicionado aos metadados.

Nota

Observe que Cost e Price não são argumentos para a atividade, mas são propriedades que são definidas em tempo de design. É por isso que os seus valores podem ser validados na CacheMetadata substituição. O valor dos dados que fluem através de um argumento não pode ser validado em tempo de design porque os dados não fluem até o tempo de execução, mas os argumentos de atividade podem ser validados para garantir que eles sejam vinculados usando os RequiredArgument grupos de atributos e sobrecarga. Este código de exemplo vê o RequiredArgument atributo para o Description argumento e, se ele não estiver vinculado, um erro de validação será gerado. Os argumentos necessários são abordados em Argumentos necessários e Grupos de sobrecarga.

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

Por padrão, um erro de validação é adicionado aos metadados quando AddValidationError é chamado. Para adicionar um aviso de validação, use a AddValidationError sobrecarga que leva um ValidationError, e especifique que o ValidationError representa um aviso definindo a IsWarning propriedade.

A validação ocorre quando um fluxo de trabalho é modificado no designer de fluxo de trabalho e quaisquer erros ou avisos de validação são exibidos no designer de fluxo de trabalho. A validação também ocorre em tempo de execução quando um fluxo de trabalho é invocado e, se ocorrerem erros de validação, um InvalidWorkflowException é gerado pela lógica de validação padrão. Para obter mais informações sobre como invocar a validação e acessar quaisquer avisos ou erros de validação, consulte Invocando a validação da atividade.

Quaisquer exceções lançadas não são tratadas como erros de CacheMetadata validação. Essas exceções escaparão da chamada e Validate devem ser tratadas pelo chamador.

A validação baseada em código é útil para validar a atividade que contém o código, mas não tem visibilidade das outras atividades no fluxo de trabalho. A validação de restrições declarativas fornece a capacidade de validar as relações entre uma atividade e outras atividades no fluxo de trabalho e é abordada no tópico Restrições declarativas .