Dela via


Inspektion av aktivitetsträd

Granskning av aktivitetsträd används av arbetsflödesprogramförfattare för att inspektera de arbetsflöden som finns i programmet. Med hjälp WorkflowInspectionServicesav kan arbetsflöden sökas efter specifika underordnade aktiviteter, enskilda aktiviteter och deras egenskaper kan räknas upp och körningsmetadata för aktiviteterna kan cachelagras vid en viss tidpunkt. Det här avsnittet innehåller en översikt över WorkflowInspectionServices och hur du använder det för att inspektera ett aktivitetsträd.

Använda WorkflowInspectionServices

Metoden GetActivities används för att räkna upp alla aktiviteter i det angivna aktivitetsträdet. GetActivities returnerar en uppräkningsbar som berör alla aktiviteter i trädet, inklusive underordnade, ombudshanterare, variabelstandarder och argumentuttryck. I följande exempel skapas en arbetsflödesdefinition med hjälp av uttrycken Sequence, While, ForEach<T>, WriteLineoch . När arbetsflödesdefinitionen har skapats anropas den InspectActivity och sedan anropas metoden.

Variable<List<string>> items = new Variable<List<string>>
{
    Default = new VisualBasicValue<List<string>>("New List(Of String)()")
};

DelegateInArgument<string> item = new DelegateInArgument<string>();

Activity wf = new Sequence
{
    Variables = { items },
    Activities =
    {
        new While((env) => items.Get(env).Count < 5)
        {
            Body = new AddToCollection<string>
            {
                Collection = new InArgument<ICollection<string>>(items),
                Item = new InArgument<string>((env) => "List Item " + (items.Get(env).Count + 1))
            }
        },
        new ForEach<string>
        {
            Values = new InArgument<IEnumerable<string>>(items),
            Body = new ActivityAction<string>
            {
                Argument = item,
                Handler = new WriteLine
                {
                    Text = item
                }
            }
        },
        new Sequence
        {
            Activities =
            {
                new WriteLine
                {
                    Text = "Items added to collection."
                }
            }
        }
    }
};

WorkflowInvoker.Invoke(wf);

InspectActivity(wf, 0);

För att räkna upp aktiviteterna GetActivities anropas rotaktiviteten och rekursivt för varje returnerad aktivitet. I följande exempel skrivs DisplayName varje aktivitet och uttryck i aktivitetsträdet till konsolen.

static void InspectActivity(Activity root, int indent)
{
    // Inspect the activity tree using WorkflowInspectionServices.
    IEnumerator<Activity> activities =
        WorkflowInspectionServices.GetActivities(root).GetEnumerator();

    Console.WriteLine("{0}{1}", new string(' ', indent), root.DisplayName);

    while (activities.MoveNext())
    {
        InspectActivity(activities.Current, indent + 2);
    }
}

Den här exempelkoden innehåller följande utdata.

Listobjekt 1
Listobjekt 2Listobjekt 3Listobjekt 4Listobjekt 5Objekt har lagts till i samlingen.Sekvensliteral<liststräng<>>
Medan
AddToCollection-sträng<>
VariableValue<ICollection<String>>
LambdaValue-sträng<>
LocationReferenceValue-liststräng<<>>
LambdaValue<Booleskt värde>
LocationReferenceValue-liststräng<<>>
ForEach-sträng<>
VariableValue<IEnumerable<String>>
WriteLine
DelegateArgumentValue-sträng<>
Sekvens
WriteLine
Strängliteral<> För att hämta en specifik aktivitet i stället för att räkna upp alla aktiviteter Resolve används. Både Resolve och GetActivities utför cachelagring av metadata om WorkflowInspectionServices.CacheMetadata det inte har anropats tidigare. Om CacheMetadata har anropats GetActivities baseras det på befintliga metadata. Om trädändringar har gjorts sedan det senaste anropet till CacheMetadataGetActivities kan det därför ge oväntade resultat. Om ändringar har gjorts i arbetsflödet efter anropet GetActivitieskan metadata cachelagras igen genom att anropa ActivityValidationServices Validate metoden. Cachelagring av metadata beskrivs i nästa avsnitt.

Cachelagring av metadata

Cachelagring av metadata för en aktivitet bygger och validerar en beskrivning av aktivitetens argument, variabler, underordnade aktiviteter och aktivitetsdelegater. Metadata cachelagras som standard av körningen när en aktivitet förbereds för körning. Om en arbetsflödesvärdförfattare vill cachelagras metadata för ett aktivitets- eller aktivitetsträd före detta, till exempel för att ta hela kostnaden i förväg, kan du CacheMetadata använda för att cachelagras metadata vid önskad tidpunkt.