1

NativeActivity体を含む がありますActivity。このアクティビティの目的は、子アクティビティの期間中にリソースを として公開することですVariable。私が遭遇した問題はVariable、アクティビティの外では使用できないように見えることです。StreamReaderリソースの例として使用します。

ResourceActivity.cs:

[Designer(typeof(ResourceActivityDesigner))]
public sealed class ResourceActivity : NativeActivity
{
    [RequiredArgument]
    public InArgument<string> Path { get; set; }

    [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
    public Activity Body { get; set; }

    [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
    public Variable<StreamReader> Resource { get; set; }

    public ResourceActivity()
    {
        this.Resource = new Variable<StreamReader>
        {
            Default = null,
            Name = "reader"
        };
    }

    protected override void CacheMetadata(NativeActivityMetadata metadata)
    {
        if (this.Path != null) metadata.AddArgument(this.Path);
        if (this.Body != null) metadata.AddChild(this.Body);
        if (this.Resource != null) metadata.AddVariable(this.Resource);
    }

    protected override void Execute(NativeActivityContext context)
    {
        this.Resource.Set(context, new StreamReader(this.Path.Get(context)));
        context.ScheduleActivity(this.Body, new completionCallback(Done), new FaultCallback(Faulted));
    }

    private void Done(NativeActivityContext context, ActivityInstance instance)
    {
        var reader = this.Reader.Get(context);
        if (reader != null) reader.Dispose();
    }

    private void Faulted(NativeActivityFaultContext context, Exception ex, ActivityInstance instance)
    {
        var reader = this.Reader.Get(context);
        if (reader != null) reader.Dispose();
    }
}

ワークフロー デザイナの変数リストに「リソース」または「リーダー」が表示されません。で何か不足していCacheMetadataますか?

4

2 に答える 2

0

答えはCollection<Variable>、クラスに を追加することだったようです。CacheMetadata不要でした。

[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public Collection<Variable> Variables { get; private set; }

public ResourceActivity()
{
    this.Resource = new Variable<StreamReader> { Default = null, Name = "reader" };
    this.Variables = new Collection<Variable>(new [] { this.Resource });
}

編集:いいえ、変数が複数回定義されていることを示すエラーが発生します。リソースを変数コレクションに追加しないと、表示されません...

編集 #2:これを Microsoft Connect のバグとして提出し、これは既知のバグであると言われましたが、VS 2010 での修正の対象ではありません。延期されました。

于 2010-06-10T12:57:48.883 に答える
0

アクティビティ自体と子の間で変数を共有する場合は、アクティビティの代わりにタイプ ActivityAction としてボディを定義する必要があります。Matt Winkler によるこのブログ投稿を参照してください。

于 2010-06-10T08:08:56.790 に答える