Walidacja oparta na kodzie imperatywnym

Walidacja oparta na kodzie imperatywnego umożliwia działanie w celu zapewnienia weryfikacji samego siebie i jest dostępne dla działań pochodzących z CodeActivity, AsyncCodeActivityi NativeActivity. Kod weryfikacji określający wszelkie błędy weryfikacji lub ostrzeżenia są dodawane do działania.

Korzystanie z weryfikacji opartej na kodzie

Walidacja oparta na kodzie jest obsługiwana przez działania pochodzące z CodeActivitysystemów , AsyncCodeActivityi NativeActivity. Kod weryfikacji można umieścić w przesłonięciu CacheMetadata , a błędy weryfikacji lub ostrzeżenia można dodać do argumentu metadanych. W poniższym przykładzie, jeśli wartość Cost jest większa niż Price, do metadanych zostanie dodany błąd weryfikacji.

Uwaga

Należy pamiętać, że Cost i Price nie są argumentami działania, ale są właściwościami ustawionymi w czasie projektowania. Dlatego ich wartości można zweryfikować w zastąpieniu CacheMetadata . Wartość danych przepływających przez argument nie może być weryfikowana w czasie projektowania, ponieważ dane nie przepływają do czasu wykonywania, ale argumenty działań można zweryfikować, aby upewnić się, że są one powiązane przy użyciu atrybutów RequiredArgument i grup przeciążeń. Ten przykładowy kod widzi RequiredArgument atrybut argumentu Description , a jeśli nie jest powiązany, zostanie wygenerowany błąd weryfikacji. Wymagane argumenty są omówione w sekcji Wymagane argumenty i grupy przeciążenia.

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

Domyślnie do metadanych jest dodawany błąd weryfikacji, gdy AddValidationError jest wywoływany. Aby dodać ostrzeżenie dotyczące walidacji, użyj AddValidationError przeciążenia, które przyjmuje ValidationError, i określ, że ValidationError reprezentuje ostrzeżenie, ustawiając IsWarning właściwość .

Walidacja występuje, gdy przepływ pracy jest modyfikowany w projektancie przepływu pracy, a wszelkie błędy weryfikacji lub ostrzeżenia są wyświetlane w projektancie przepływu pracy. Walidacja występuje również w czasie wykonywania, gdy jest wywoływany przepływ pracy i jeśli wystąpią jakiekolwiek błędy walidacji, jest InvalidWorkflowException zgłaszany przez domyślną logikę walidacji. Aby uzyskać więcej informacji na temat wywoływania walidacji i uzyskiwania dostępu do wszelkich ostrzeżeń lub błędów walidacji, zobacz Wywoływanie walidacji działania.

Wszelkie wyjątki, CacheMetadata z których pochodzą, nie są traktowane jako błędy weryfikacji. Te wyjątki unikną połączenia Validate z elementem wywołującym i muszą być obsługiwane przez obiekt wywołujący.

Walidacja oparta na kodzie jest przydatna do sprawdzania poprawności działania zawierającego kod, ale nie ma wglądu w inne działania w przepływie pracy. Walidacja ograniczeń deklaratywnych zapewnia możliwość weryfikowania relacji między działaniem a innymi działaniami w przepływie pracy i jest omówiona w temacie Deklaratywne ograniczenia .