Validation basée sur le code impératif

La validation basée sur le code impératif offre un moyen simple de valider une activité ainsi que les activités dérivées de CodeActivity, AsyncCodeActivity et NativeActivity. Le code de validation est ajouté à l’activité qui détermine les erreurs ou avertissements de validation ajoutés à l’activité.

Utilisation de la validation basée sur le code

La validation basée sur le code est prise en charge par les activités dérivées de CodeActivity, AsyncCodeActivity et NativeActivity. Le code de validation peut être placé dans la substitution CacheMetadata, et les erreurs ou avertissements de validation peuvent être ajoutés à l’argument de métadonnées. Dans l'exemple suivant, si la valeur Cost est supérieure à la valeur Price, une erreur de validation est ajoutée aux métadonnées.

Notes

Notez que Cost et Price ne sont pas des arguments de l’activité, mais sont des propriétés définies au moment du design. C'est pourquoi leurs valeurs peuvent être validées dans la substitution CacheMetadata. La valeur des données diffusées via un argument ne peut pas être validée au moment du design, car les données ne sont diffusées qu'au moment de l'exécution, mais des arguments d'activité peuvent être validés pour vérifier qu'ils sont liés à l'aide de l'attribut RequiredArgument et des groupes surchargés. Cet exemple de code voit l'attribut RequiredArgument de l'argument Description, et s'il n'est pas lié, une erreur de validation est générée. Les arguments obligatoires sont traités dans Arguments obligatoires et groupes surchargés.

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

Par défaut, une erreur de validation est ajoutée aux métadonnées lorsque AddValidationError est appelé. Pour ajouter un avertissement de validation, utilisez la surcharge AddValidationError qui prend ValidationError et spécifiez que ValidationError représente un avertissement en définissant la propriété IsWarning.

La validation a lieu lorsque, dans le Concepteur de Workflow, un workflow est modifié et que l'ensemble des erreurs ou avertissements de validation sont affichés. La validation se produit également au moment de l’exécution lorsqu’un workflow est appelé et si des erreurs de validation se produisent, InvalidWorkflowException est levée par la logique de validation par défaut. Pour plus d’informations sur l’appel de la validation et l’accès aux avertissements ou erreurs de validation, consultez Appel de la validation d’activité.

Toutes les exceptions levées à partir de CacheMetadata ne sont pas traitées comme des erreurs de validation. Ces exceptions ne seront pas détectées par l'appel à Validate et doivent être gérées par l'appelant.

La validation basée sur le code est utile pour valider l’activité qui contient le code, mais elle n’offre pas de visibilité pour les autres activités du workflow. La validation des contraintes déclaratives permet de valider les relations entre une activité et d’autres activités du workflow. Cette validation est traitée dans la rubrique Contraintes déclaratives.