Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Voordat u een activiteit uitvoert, verkrijgt de werkstroomruntime alle informatie over de activiteit die nodig is om de uitvoering ervan te behouden. De werkstroomruntime haalt deze informatie op tijdens de uitvoering van de CacheMetadata methode. De standaard implementatie van deze methode biedt de runtime alle openbare argumenten, variabelen en onderliggende activiteiten die worden weergegeven door de activiteit op het moment dat deze wordt uitgevoerd; als de activiteit meer informatie moet geven aan de runtime dan deze (zoals privéleden of activiteiten die door de activiteit moeten worden gepland), kan deze methode worden overschreven om deze op te geven.
Standaardgedrag van CacheMetadata
De standaardimplementatie van CacheMetadata voor activiteiten die zijn afgeleid van NativeActivity verwerkt de volgende methodetypen op de volgende manieren:
InArgument<T>, OutArgument<T>, of InOutArgument<T> (generieke argumenten): deze argumenten worden aan de runtime blootgesteld als argumenten met een naam en type gelijk aan de naam en het type van de blootgestelde eigenschap, de juiste argumentrichting en enkele validatiegegevens.
Variable of een subklasse daarvan: Deze leden worden blootgesteld aan de runtime als openbare variabelen.
Activity of een subklasse daarvan: Deze leden worden blootgesteld aan de runtime als openbare onderliggende activiteiten. Het standaardgedrag kan expliciet worden geïmplementeerd door aan te roepen AddImportedChild, waarbij de onderliggende activiteit wordt doorgegeven.
ActivityDelegate of een subklasse daarvan: Deze leden worden als openbare gedelegeerden blootgesteld aan de runtime.
ICollection van het type Variable: Alle elementen in de verzameling worden als openbare variabelen aan de runtime blootgesteld.
ICollection van het type Activity: Alle elementen in de verzameling worden als openbare onderdelen aan de runtime blootgesteld.
ICollection van het type ActivityDelegate: Alle elementen in de verzameling worden als openbare gedelegeerden aan de runtime blootgesteld.
De CacheMetadata voor activiteiten die zijn afgeleid van Activity, CodeActivityen AsyncCodeActivity die ook werken zoals hierboven, met uitzondering van de volgende verschillen:
Klassen die zijn afgeleid van Activity kunnen geen onderliggende activiteiten of gemachtigden inplannen, daarom worden deze leden gezien als geïmporteerde kinderen en gemachtigden.
Klassen die zijn afgeleid van CodeActivity en AsyncCodeActivity bieden geen ondersteuning voor variabelen, onderliggende elementen of gemachtigden, zodat alleen argumenten worden weergegeven.
CacheMetadata overschrijven om informatie te verstrekken aan de runtime
Het volgende codefragment laat zien hoe u informatie over leden toevoegt aan de metagegevens van een activiteit tijdens de uitvoering van de CacheMetadata methode. Houd er rekening mee dat de basis van de methode wordt aangeroepen om alle openbare gegevens over de activiteit in de cache op te cachen.
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);
}
CacheMetadata gebruiken om implementatie-kinderen beschikbaar te maken
Om gegevens door te geven aan subactiviteiten die door een activiteit met variabelen moeten worden gepland, moeten de variabelen als implementatievariabelen worden toegevoegd; openbare variabelen kunnen op deze manier niet worden ingesteld. De reden hiervoor is dat activiteiten meer moeten worden uitgevoerd als implementaties van functies (die parameters hebben), in plaats van ingekapselde klassen (die eigenschappen hebben). Er zijn echter situaties waarin de argumenten expliciet moeten worden ingesteld, zoals bij het gebruik van ScheduleActivity. Dit komt omdat de geplande activiteit geen toegang heeft tot de argumenten van de bovenliggende activiteit zoals een onderliggende activiteit dat wel zou hebben.
Het volgende codefragment laat zien hoe u een argument van een systeemeigen activiteit doorgeeft aan een geplande activiteit met behulp van 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);
    }
}