Activiteitenstructuurinspectie
Controle van activiteitenstructuur wordt gebruikt door auteurs van werkstroomtoepassingen om de werkstromen te inspecteren die door de toepassing worden gehost. Met behulp van WorkflowInspectionServiceskunnen werkstromen worden gezocht naar specifieke onderliggende activiteiten, kunnen afzonderlijke activiteiten en hun eigenschappen worden geïnventariseerd en kunnen runtimemetagegevens van de activiteiten op een bepaald moment in de cache worden opgeslagen. Dit onderwerp bevat een overzicht van WorkflowInspectionServices en hoe u deze kunt gebruiken om een activiteitsstructuur te inspecteren.
WorkflowInspectionServices gebruiken
De GetActivities methode wordt gebruikt om alle activiteiten in de opgegeven activiteitsstructuur te inventariseren. GetActivities retourneert een opsomming die alle activiteiten binnen de structuur aanraakt, waaronder onderliggende, gedelegeerde handlers, standaardinstellingen voor variabelen en argumentexpressies. In het volgende voorbeeld wordt een werkstroomdefinitie gemaakt met behulp van een Sequence, While, ForEach<T>en WriteLineexpressies. Nadat de werkstroomdefinitie is gemaakt, wordt deze aangeroepen en wordt de InspectActivity
methode aangeroepen.
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);
Als u de activiteiten wilt inventariseren, wordt de GetActivities activiteit aangeroepen op de hoofdactiviteit en opnieuw recursief op elke geretourneerde activiteit. In het volgende voorbeeld wordt de DisplayName activiteit en expressie in de activiteitenstructuur naar de console geschreven.
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);
}
}
Deze voorbeeldcode biedt de volgende uitvoer.
Lijstitem 1
Lijstitem 2Lijstitem 3Lijstitem 4Lijstitem 5Items toegevoegd aan verzameling.Reeks letterlijke<lijstreeksen<>>
Terwijl
AddToCollection-tekenreeks<>
VariableValue<ICollection-tekenreeks<>>
LambdaValue-tekenreeks<>
List<String LocationReferenceValue<>>
LambdaValue<Booleaanse waarde>
List<String LocationReferenceValue<>>
ForEach-tekenreeks<>
VariableValue<IEnumerable<String>>
WriteLine
DelegateArgumentValue String<>
Volgorde
WriteLine
Letterlijke<tekenreeks> Om een specifieke activiteit op te halen in plaats van alle activiteiten te inventariseren, Resolve wordt gebruikt. GetActivities Voer zowel Resolve metagegevens in de cache op als WorkflowInspectionServices.CacheMetadata
deze nog niet eerder is aangeroepen. Als CacheMetadata deze is aangeroepen GetActivities , is dit gebaseerd op de bestaande metagegevens. Als er daarom boomstructuurwijzigingen zijn aangebracht sinds de laatste aanroep, CacheMetadataGetActivities kan dit onverwachte resultaten opleveren. Als er wijzigingen zijn aangebracht in de werkstroom na het aanroepen GetActivities, kunnen metagegevens opnieuw in de cache worden opgeslagen door de methode aan te ActivityValidationServices Validate roepen. Metagegevens in de cache worden in de volgende sectie besproken.
Metagegevens opslaan in cache
Het opslaan van de metagegevens voor een activiteit bouwt en valideert een beschrijving van de argumenten, variabelen, onderliggende activiteiten en activiteit gedelegeerden van de activiteit. Metagegevens worden standaard in de cache opgeslagen door de runtime wanneer een activiteit wordt voorbereid voor uitvoering. Als een auteur van een werkstroomhost de metagegevens voor een activiteit of activiteitsstructuur wil opslaan voordat dit bijvoorbeeld alle kosten vooraf moet worden gemaakt, CacheMetadata kan deze worden gebruikt om de metagegevens op het gewenste moment in de cache op te cachen.