Udostępnij za pośrednictwem


Uwidacznianie danych przy użyciu metody CacheMetadata

Przed wykonaniem działania środowisko uruchomieniowe przepływu pracy uzyskuje wszystkie informacje o działaniu, którego potrzebuje, aby zachować jego wykonanie. Środowisko uruchomieniowe przepływu pracy pobiera te informacje podczas wykonywania CacheMetadata metody. Domyślna implementacja tej metody zapewnia środowisko uruchomieniowe ze wszystkimi publicznymi argumentami, zmiennymi i działaniami podrzędnymi uwidacznianymi przez działanie w momencie jego wykonania; Jeśli działanie musi przekazać więcej informacji do środowiska uruchomieniowego niż to (na przykład prywatne elementy członkowskie lub działania, które mają być zaplanowane przez działanie), tę metodę można zastąpić, aby ją podać.

Domyślne zachowanie cacheMetadata

Domyślna implementacja CacheMetadata działań, które pochodzą z NativeActivity procesów następujących typów metod w następujący sposób:

  • InArgument<T>, OutArgument<T>lub InOutArgument<T> (argumenty ogólne): te argumenty są widoczne dla środowiska uruchomieniowego jako argumenty o nazwie i typie równym uwidocznionej nazwie i typowi właściwości, odpowiedniemu kierunku argumentu i niektórym danym weryfikacji.

  • Variable lub dowolną podklasę: te elementy członkowskie są widoczne dla środowiska uruchomieniowego jako zmienne publiczne.

  • Activity lub wszelkie podklasy: te elementy członkowskie są narażone na środowisko uruchomieniowe jako publiczne działania podrzędne. Domyślne zachowanie można zaimplementować jawnie, wywołując AddImportedChildmetodę , przekazując działanie podrzędne.

  • ActivityDelegate lub dowolną podklasę: te elementy członkowskie są widoczne dla środowiska uruchomieniowego jako delegaty publiczne.

  • ICollection typu Variable: wszystkie elementy w kolekcji są widoczne dla środowiska uruchomieniowego jako zmienne publiczne.

  • ICollection typu Activity: wszystkie elementy w kolekcji są widoczne dla środowiska uruchomieniowego jako publiczne elementy podrzędne.

  • ICollection typu ActivityDelegate: wszystkie elementy w kolekcji są widoczne dla środowiska uruchomieniowego jako delegaty publiczne.

Dla CacheMetadata działań, które pochodzą z Activity, CodeActivity, i AsyncCodeActivity również działają jak powyżej, z wyjątkiem następujących różnic:

  • Klasy pochodzące z Activity programu nie mogą planować działań podrzędnych ani delegatów, więc takie elementy członkowskie są widoczne jako zaimportowane elementy podrzędne i delegaty;

  • Klasy pochodzące z CodeActivity elementów i AsyncCodeActivity nie obsługują zmiennych, elementów podrzędnych lub delegatów, więc zostaną ujawnione tylko argumenty.

Zastępowanie elementu CacheMetadata w celu dostarczenia informacji do środowiska uruchomieniowego

Poniższy fragment kodu przedstawia sposób dodawania informacji o elementach członkowskich do metadanych działania podczas wykonywania CacheMetadata metody. Należy pamiętać, że baza metody jest wywoływana w celu buforowania wszystkich danych publicznych dotyczących działania.

protected override void CacheMetadata(NativeActivityMetadata metadata)
{
    base.CacheMetadata(metadata);
    metadata.AddImplementationChild(this._writeLine);
    metadata.AddVariable(this._myVariable);
    metadata.AddImplementationVariable(this._myImplementationVariable);

    RuntimeArgument argument = new RuntimeArgument("MyArgument", ArgumentDirection.In, typeof(SomeType));
    metadata.Bind(argument, this.SomeName);
    metadata.AddArgument(argument);
}

Używanie metody CacheMetadata do uwidaczniania elementów podrzędnych implementacji

Aby przekazywać dane do działań podrzędnych, które mają być zaplanowane przez działanie przy użyciu zmiennych, należy dodać zmienne jako zmienne implementacji; zmienne publiczne nie mogą mieć ustawionych w ten sposób wartości. Przyczyną tego jest to, że działania mają być wykonywane bardziej jako implementacje funkcji (które mają parametry), a nie hermetyzowane klasy (które mają właściwości). Istnieją jednak sytuacje, w których argumenty muszą być jawnie ustawione, na przykład w przypadku używania ScheduleActivitymetody , ponieważ zaplanowane działanie nie ma dostępu do argumentów działania nadrzędnego w sposób, w jaki będzie działać podrzędne.

Poniższy fragment kodu pokazuje, jak przekazać argument z działania natywnego do zaplanowanego działania przy użyciu polecenia CacheMetadata.

public sealed class ChildActivity : NativeActivity
{
    public WriteLine _writeLine;
    public InArgument<string> Message { get; set; }
    private Variable<string> MessageVariable { get; set; }
    public ChildActivity()
    {
        MessageVariable = new Variable<string>();
        _writeLine = new WriteLine
        {
            Text = new InArgument<string>(MessageVariable),
        };
    }
    protected override void CacheMetadata(NativeActivityMetadata metadata)
    {
        base.CacheMetadata(metadata);
        metadata.AddImplementationVariable(this.MessageVariable);
        metadata.AddImplementationChild(this._writeLine);
    }
    protected override void Execute(NativeActivityContext context)
    {
        string configuredMessage = context.GetValue(Message);
        context.SetValue(MessageVariable, configuredMessage);
        context.ScheduleActivity(this._writeLine);
    }
}