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 .