Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Prohlídku stromu aktivit používají autoři aplikací pracovních postupů k prohlížení pracovních postupů hostovaných samotnou aplikací. Pomocí WorkflowInspectionServices lze vyhledávat pracovní postupy podle konkrétních podřízených aktivit, jednotlivé aktivity a jejich vlastnosti mohou být seřazeny, a metadata za běhu 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í služby 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 je tato definice vyvolána a poté se volá metoda InspectActivity.
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($"{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.SekvenceLiterální<seznam<řetězec>>
Zatímco
PřidatDoKolekce<Řetězec>
VariableValue<– řetězec ICollection<>>
LambdaValue<– řetězec>
LocationReferenceValue<List<String>>
LambdaValue<Boolean>
LocationReferenceValue<List<String>>
ForEach String<>
VariableValue<IEnumerable<String>>
WriteLine
DelegateArgumentValue<String>
Sekvence
WriteLine
Literální<řetězec> k načtení konkrétní aktivity místo vyjmenovávání všech aktivit, Resolve se používá. Obě Resolve a GetActivities ukládají metadata do mezipaměti, pokud WorkflowInspectionServices.CacheMetadata nebylo dříve voláno. Pokud byl volán CacheMetadata, pak 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 ActivityValidationServicesValidate 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 vytváří a ověřuje popis argumentů, proměnných, podřízených aktivit a delegátů aktivit dané aktivity. 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 uchovávat metadata pro aktivitu nebo strom aktivit do mezipaměti, například aby převzal všechny náklady předem, CacheMetadata může být použito k uchovávání metadat do mezipaměti v požadovaném čase.