Aracılığıyla paylaş


Etkinlik Ağacı Denetimi

Etkinlik ağacı denetimi, iş akışı uygulaması yazarları tarafından uygulama tarafından barındırılan iş akışlarını incelemek için kullanılır. WorkflowInspectionServices kullanılarak, iş akışları belirli alt etkinliklere göre aranabilir, etkinlikler ve özellikleri tek tek listelenebilir ve etkinliklerin çalışma zamanı meta verileri belirli bir anda önbelleğe alınabilir. Bu konu, WorkflowInspectionServices kullanarak bir etkinlik ağacını nasıl inceleyeceğinize dair genel bir bakış sunar.

WorkflowInspectionServices'i kullanma

GetActivities yöntemi, belirtilen etkinlik ağacındaki tüm etkinlikleri listelemek için kullanılır. GetActivities alt öğeler, temsilci işleyicileri, değişkenlerin varsayılan değerleri ve bağımsız değişken ifadeleri dahil olmak üzere ağaçtaki tüm etkinliklere dokunan bir numaralandırılabilir döndürür. Aşağıdaki örnekte , , Sequence, WhileForEach<T>, ve ifadeleri kullanılarak bir WriteLineiş akışı tanımı oluşturulur. İş akışı tanımı oluşturulduktan sonra çağrılır ve ardından InspectActivity yöntemi çağrılır.

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

Etkinlikleri listelemek için, GetActivities kök etkinlikte ve döndürülen her etkinlikte yine özyinelemeli olarak çağrılır. Aşağıdaki örnekte, DisplayName etkinlik ağacındaki her etkinliğin ve ifadenin değeri konsola yazılır.

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

Bu örnek kod aşağıdaki çıkışı sağlar.

Liste Öğesi 1
Liste Öğesi 2Liste Öğesi 3Liste Öğesi 4Liste Öğesi 5Koleksiyona eklenen öğeler.SıraDeğişmez Değer<Liste<Dizesi>>
Sırasında
AddToCollection<Dizesi>
VariableValue<ICollection<Karakter Dizisi>>
LambdaValue<Dizesi>
LocationReferenceValue<Liste<Dizesi>>
LambdaValue<Mantıksal Değer>
LocationReferenceValue<Liste<Dizesi>>
ForEach<Dizesi>
VariableValue<IEnumerable<Dizesi>>
Yazma Çizgisi
DelegateArgumentValue<Dizesi>
Sıra
Yazma Çizgisi
Literal< Dize> Belirli bir etkinliği almak için, tüm etkinlikleri Resolve listelemek yerine kullanılır. Resolve ve GetActivities, WorkflowInspectionServices.CacheMetadata daha önce çağrılmadıysa, meta verileri önbelleğe alır. CacheMetadata ÇağrıldıysaGetActivities, mevcut meta verileri temel alır. Bu nedenle, CacheMetadata ve GetActivities için son çağrıdan bu yana ağaç değişiklikleri yapıldıysa, beklenmeyen sonuçlar verebilir. çağrısından GetActivitiessonra iş akışında değişiklikler yapılmışsa meta veriler yöntemi çağrılarak ActivityValidationServicesValidate yeniden önbelleğe alınabilir. Önbelleğe alma meta verileri sonraki bölümde açıklanmıştır.

Önbelleğe Alma Meta Verileri

Bir etkinlik için meta verileri önbelleğe almak, etkinliğin bağımsız değişkenlerinin, değişkenlerinin, alt etkinliklerinin ve etkinlik temsilcilerinin açıklamasını oluşturur ve bunları doğrular. Bir etkinlik yürütme için hazırlandığında meta veriler varsayılan olarak çalışma zamanı tarafından önbelleğe alınır. Bir iş akışı ana bilgisayar yazarı, bu işlemden önce bir etkinliğin veya etkinlik ağacının meta verilerini önbelleğe almak istiyorsa, örneğin tüm maliyeti önceden almak için, CacheMetadata istenen zamanda meta verileri önbelleğe almak için kullanılabilir.