Delen via


Imperatieve Code-Based validatie

Imperatieve op code gebaseerde validatie biedt een eenvoudige manier voor een activiteit om validatie over zichzelf te bieden en is beschikbaar voor activiteiten die zijn afgeleid van CodeActivity, AsyncCodeActivityen NativeActivity. Validatiecode waarmee eventuele validatiefouten of waarschuwingen worden bepaald, wordt toegevoegd aan de activiteit.

Gebruik maken van Code-Based Validatie

Validatie op basis van code wordt ondersteund door activiteiten die zijn afgeleid van CodeActivity, AsyncCodeActivityen NativeActivity. Validatiecode kan in de CacheMetadata overriding worden geplaatst en validatiefouten of waarschuwingen kunnen aan het metagegevensargument worden toegevoegd. In het volgende voorbeeld, als de Cost groter is dan de Price, wordt er een validatiefout toegevoegd aan de metadata.

Opmerking

Houd er rekening mee dat Cost en Price geen argumenten zijn voor de activiteit, maar eigenschappen zijn die tijdens het ontwerp zijn ingesteld. Daarom kunnen hun waarden worden gevalideerd in de CacheMetadata overschrijving. De waarde van de gegevens die door een argument stromen, kan niet tijdens het ontwerp worden gevalideerd, omdat de gegevens pas tijdens de looptijd stromen. Activiteitsargumenten kunnen echter worden gevalideerd om te verzekeren dat ze gebonden zijn door het RequiredArgument-kenmerk en overbelastingsgroepen te gebruiken. Deze voorbeeldcode ziet het RequiredArgument kenmerk voor het Description argument en als deze niet is gebonden, wordt er een validatiefout gegenereerd. Vereiste argumenten worden behandeld in vereiste argumenten en overbelastingsgroepen.

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

Standaard wordt er een validatiefout toegevoegd aan de metagegevens wanneer AddValidationError wordt aangeroepen. Als u een validatiewaarschuwing wilt toevoegen, gebruikt u de AddValidationError overbelasting die een ValidationError accepteert, en specificeert u dat ValidationError een waarschuwing is door de IsWarning eigenschap in te stellen.

Validatie vindt plaats wanneer een werkstroom wordt gewijzigd in de werkstroomontwerper en eventuele validatiefouten of waarschuwingen worden weergegeven in de werkstroomontwerper. Validatie vindt ook plaats tijdens runtime wanneer een werkstroom wordt aangeroepen en als er validatiefouten optreden, wordt er een InvalidWorkflowException gegenereerd door de standaardvalidatielogica. Zie Validatie van activiteit aanroepen voor meer informatie over het aanroepen van validatie en het openen van validatiewaarschuwingen of -fouten.

Eventuele uitzonderingen die worden opgeworpen door CacheMetadata, worden niet behandeld als validatiefouten. Deze uitzonderingen ontsnappen van de aanroep naar Validate en moeten worden verwerkt door de beller.

Validatie op basis van code is handig voor het valideren van de activiteit die de code bevat, maar heeft geen inzicht in de andere activiteiten in de werkstroom. Validatie van declaratieve beperkingen biedt de mogelijkheid om de relaties tussen een activiteit en andere activiteiten in de werkstroom te valideren en wordt behandeld in het onderwerp Declaratieve beperkingen .