Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Granskning av aktivitetsträd används av arbetsflödesprogramförfattare för att inspektera de arbetsflöden som finns i programmet. Genom att använda WorkflowInspectionServices kan arbetsflöden sökas efter specifika delaktiviteter, enskilda aktiviteter och deras egenskaper kan listas, 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 omfattar alla aktiviteter i trädet, inklusive underordnade, delegerade hanterare, standardvärden för variabler 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, och sedan anropas InspectActivity-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 anropas GetActivities på rotaktiviteten, och sedan rekursivt på varje returnerad aktivitet. I följande exempel skrivs DisplayName för varje aktivitet och uttryck i aktivitetsträdet ut till konsolen.
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);
}
}
Den här exempelkoden innehåller följande utdata.
Listobjekt 1Listobjekt 2Listobjekt 3Listobjekt 4Listobjekt 5Objekt lades till i samlingen.Sekvens<liststräng<>>WhileAddToCollection<String>VariableValue<ICollection<String>>LambdaValue<String>LocationReferenceValue<List<String>>LambdaValue<Boolean>LocationReferenceValue<List<String>>ForEach<String>VariableValue<IEnumerable<String>>WriteLineDelegateArgumentValue<String>SequenceWriteLineLiteral<String> För att hämta en specifik aktivitet i stället för att räkna upp alla aktiviteter används Resolve. Både Resolve och GetActivities utför cachelagring av metadata om WorkflowInspectionServices.CacheMetadata det inte har anropats tidigare. Om CacheMetadata har kallats bygger GetActivities på den 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 ActivityValidationServicesValidate 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örtiden när en aktivitet förbereds för exekvering. Om en arbetsflödesvärdförfattare vill lagra cache för metadatan för ett aktivitets- eller aktivitetsträd innan detta, till exempel för att ta hela kostnaden i förväg, kan CacheMetadata användas för att lagra cache för metadata vid den önskade tidpunkten.