Sdílet prostřednictvím


Kontrola stromu aktivit

Kontrolu stromu aktivit používají autoři aplikací pracovního postupu ke kontrole pracovních postupů hostovaných aplikací. Pomocí WorkflowInspectionServices, pracovní postupy lze vyhledat konkrétní podřízené aktivity, jednotlivé aktivity a jejich vlastnosti lze vytvořit výčet a metadata modulu runtime aktivit mohou být uložena v mezipaměti v určitém okamžiku. Toto téma obsahuje přehled WorkflowInspectionServices o tom, jak ho použít ke kontrole stromu aktivit.

Použití WorkflowInspectionServices

Metoda GetActivities se používá k vytvoření výčtu všech aktivit v zadaném stromu aktivit. GetActivities vrátí výčet, který se dotkne všech aktivit ve stromu, včetně podřízených položek, obslužných rutin delegátů, výchozích proměnných a výrazů argumentů. V následujícím příkladu se definice pracovního postupu vytvoří pomocí výrazu Sequence, While, ForEach<T>, WriteLinea výrazů. Po vytvoření definice pracovního postupu se vyvolá a pak InspectActivity se volá metoda.

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);

Chcete-li vytvořit výčet aktivit, GetActivities je volána v kořenové aktivitě a znovu rekurzivně pro každou vrácenou aktivitu. V následujícím příkladu se každá DisplayName aktivita a výraz ve stromu aktivit zapíše do konzoly.

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);
    }
}

Tento ukázkový kód poskytuje následující výstup.

Položka seznamu 1
Položka seznamu 2Položka seznamu 3Položka seznamu 4Položka seznamu 5Položky přidané do kolekce.Řetězec sekvenčníholiterálového<seznamu<>>
While
AddToCollection<String>
VariableValue<– řetězec ICollection<>>
LambdaValue<– řetězec>
LocationReferenceValue<List<String>>
LambdaValue<– logická hodnota>
LocationReferenceValue<List<String>>
Řetězec forEach<>
VariableValue<IEnumerable<String>>
WriteLine
DelegateArgumentValue<– řetězec>
Sekvence
WriteLine
Literální<řetězec> k načtení konkrétní aktivity místo výčet všech aktivit, Resolve se používá. Ukládání Resolve metadat do mezipaměti, pokud WorkflowInspectionServices.CacheMetadata nebylo dříve volána, a GetActivities proveďte ukládání metadat do mezipaměti. Pokud CacheMetadata byl volána, GetActivities je založen na existujících metadatech. Proto pokud byly změny stromu provedeny od posledního volání CacheMetadata, GetActivities může poskytnout neočekávané výsledky. Pokud byly změny pracovního postupu provedeny po volání GetActivities, metadata mohou být znovu uložena do mezipaměti voláním ActivityValidationServices Validate metody. Metadata ukládání do mezipaměti jsou popsána v další části.

Ukládání metadat do mezipaměti

Ukládání metadat do mezipaměti pro sestavení aktivity a ověření popisu argumentů, proměnných, podřízených aktivit a delegátů aktivit Metadata se ve výchozím nastavení ukládají do mezipaměti modulu runtime, když je aktivita připravená ke spuštění. Pokud autor hostitele pracovního postupu chce před tím ukládat metadata pro aktivitu nebo strom aktivit do mezipaměti, například aby si předem vzal všechny náklady, CacheMetadata můžete je použít k ukládání metadat do mezipaměti v požadované době.