Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bir etkinliği yürütmeden önce, iş akışı çalışma zamanı yürütmesini sürdürmek için ihtiyaç duyduğu etkinlik hakkındaki tüm bilgileri alır. İş akışı çalışma zamanı, CacheMetadata yönteminin yürütülmesi sırasında bu bilgileri alır. Bu yöntemin varsayılan uygulaması, etkinlik yürütüldüğünde çalışma zamanına etkinlik tarafından sunulan tüm genel parametreleri, değişkenleri ve alt etkinlikleri sağlar. Eğer etkinlik, çalışma zamanına bundan daha fazla bilgi (örneğin özel üyeler veya etkinlik tarafından zamanlanacak etkinlikler) vermesi gerekiyorsa, bu yöntem bu bilgiyi sağlamak için geçersiz kılınabilir.
Varsayılan CacheMetadata davranışı
öğesinin CacheMetadata , türetilen NativeActivity etkinlikler için varsayılan uygulaması aşağıdaki yöntem türlerini aşağıdaki yollarla işler:
InArgument<T>, OutArgument<T>veya InOutArgument<T> (genel bağımsız değişkenler): Bu bağımsız değişkenler, kullanıma sunulan özellik adı ve türüne, uygun bağımsız değişken yönüne ve bazı doğrulama verilerine eşit bir ad ve türe sahip bağımsız değişkenler olarak çalışma zamanına sunulur.
Variable veya herhangi bir alt sınıfı: Bu üyeler, çalışma zamanına genel değişkenler olarak sunulur.
Activity veya herhangi bir alt sınıfı: Bu üyeler çalışma zamanına ortak alt etkinlikler olarak sunulur. Varsayılan davranış, çocuk etkinliği geçirilerek AddImportedChild çağrılarak açıkça uygulanabilir.
ActivityDelegate veya herhangi bir alt sınıfı: Bu üyeler çalışma zamanında genel delege olarak sunulur.
ICollection türü Variable: Koleksiyondaki tüm öğeler çalışma zamanına ortak değişkenler olarak sunulur.
ICollection türü Activity: Koleksiyondaki tüm öğeler, çalışma zamanında genel alt öğeler olarak sunulur.
ICollection türü ActivityDelegate: Koleksiyondaki tüm öğeler çalışma zamanına genel temsilci olarak sunulur.
CacheMetadata, ve Activity 'den CodeActivityAsyncCodeActivitytüretilen etkinlikler için, aşağıdaki farklar dışında yukarıdaki gibi çalışır:
öğesinden Activity türetilen sınıflar alt etkinlikleri veya temsilcileri zamanlayamaz, bu nedenle bu üyeler içeri aktarılan alt öğeler ve temsilciler olarak sunulur;
CodeActivity ve AsyncCodeActivity sınıflarından türetilen sınıflar değişkenleri, alt öğeleri veya temsilcileri desteklemez, bu nedenle yalnızca bağımsız değişkenler kullanıma sunulur.
Çalışma zamanına bilgi sağlamak için CacheMetadata'yı geçersiz kılma
Aşağıdaki kod parçacığı, yöntemin yürütülmesi CacheMetadata sırasında bir etkinliğin meta verilerine üyeler hakkında nasıl bilgi ekleneceğini gösterir. Etkinlik hakkındaki tüm genel verileri önbelleğe almak için yöntemin temeli çağrıldığını unutmayın.
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);
}
Uygulamanın alt elemanlarını açığa çıkarmak için CacheMetadata kullanma
Değişkenleri kullanarak bir etkinlik tarafından zamanlanacak alt etkinliklere veri geçirmek için değişkenlerin uygulama değişkenleri olarak eklenmesi gerekir; genel değişkenlerin değerleri bu şekilde ayarlanamaz. Bunun nedeni, etkinliklerin kapsüllenmiş sınıflar (özellikleri olan) yerine işlevlerin (parametreleri olan) uygulamaları olarak yürütülmesi amaçlanmasıdır. Ancak, ScheduleActivity kullanıldığında olduğu gibi, zamanlanan etkinliğin üst etkinliğin bağımsız değişkenlerine, bir alt etkinliğin erişebileceği şekilde erişimi olmadığından, bağımsız değişkenlerin açıkça ayarlanması gereken durumlar vardır.
Aşağıdaki kod parçacığı, CacheMetadata kullanarak yerel bir etkinlikten zamanlanmış bir etkinliğe bağımsız değişken geçirmeyi gösterir.
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);
}
}