Imperatív Code-Based érvényesítése

Az imperatív kódalapú érvényesítés egyszerű módot biztosít a tevékenységek számára, hogy önmagukra vonatkozó érvényesítést adjanak, és azok számára érhető el, amelyek a CodeActivity, AsyncCodeActivity és NativeActivity osztályokból származnak. Az érvényesítési hibákat vagy figyelmeztetéseket meghatározó érvényesítési kód hozzáadódik a tevékenységhez.

A Code-Based érvényesítés használata

A kódalapú érvényesítést olyan tevékenységek támogatják, amelyek a CodeActivity, AsyncCodeActivity és NativeActivity elemekből származnak. Az érvényesítési kód elhelyezhető a CacheMetadata felülbírálásban, és érvényesítési hibák vagy figyelmeztetések is hozzáadhatók a metaadat-argumentumhoz. Az alábbi példában, ha a Cost nagyobb, mint a Price, érvényesítési hiba jelenik meg a metaadatokban.

Megjegyzés:

Vegye figyelembe, hogy CostPrice nem a tevékenység argumentumai, hanem a tervezéskor beállított tulajdonságok. Ezért érvényesíthetők az értékük a CacheMetadata felülbírálásban. Az argumentumon keresztül áramló adatok értéke nem érvényesíthető a tervezéskor, mert az adatok futásidőben nem áramlanak, de a tevékenységargumentumok érvényesíthetők annak biztosítása érdekében, hogy az attribútum és a RequiredArgument túlterhelési csoportok használatával legyenek kötve. Ez a RequiredArgument példakód látja a Description attribútumot az argumentumhoz, és ha nincs hozzárendelve, érvényesítési hiba keletkezik. A kötelező argumentumokat a kötelező argumentumok és a túlterhelési csoportok ismertetik.

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

A rendszer alapértelmezés szerint érvényesítési hibát ad hozzá a metaadatokhoz, amikor AddValidationError meghívják. Érvényesítési figyelmeztetés hozzáadásához használja a AddValidationError túlterhelést, amely ValidationError paramétert vesz fel, és állítsa be a ValidationError tulajdonságot, hogy a IsWarning figyelmeztetést jelentsen.

Az érvényesítés akkor történik, ha a munkafolyamat-tervező módosít egy munkafolyamatot, és a munkafolyamat-tervezőben bármilyen érvényesítési hiba vagy figyelmeztetés jelenik meg. Az érvényesítés futásidőben is megtörténik, amikor egy munkafolyamatot meghívnak, és ha bármilyen érvényesítési hiba történik, InvalidWorkflowException az alapértelmezett érvényesítési logika elindít egy hibát. Az érvényesítés meghívásáról és az érvényesítési figyelmeztetések vagy hibák eléréséről további információt a Tevékenységérvényesítés meghívása című témakörben talál.

Bármely, a CacheMetadata-ból/ből dobott kivétel nem minősül érvényesítési hibának. Ezek a kivételek kikerülnek a Validate hívásából, és a hívónak kell kezelnie őket.

A kódalapú érvényesítés hasznos a kódot tartalmazó tevékenység ellenőrzéséhez, de nem rendelkezik betekintéssel a munkafolyamat többi tevékenységébe. A deklaratív korlátozások érvényesítése lehetővé teszi a tevékenység és a munkafolyamat egyéb tevékenységei közötti kapcsolatok érvényesítését, és a Deklaratív korlátozások témakör ismerteti.