1

Windows Workflow Foundation 4 について 1 つ質問があります。PositionArrayActivity という名前のアクティビティがあります。このアクティビティには、シーケンス アクティビティが含まれています。Execute メソッド (ワークフローの実行中) で、oneFund 変数で自分の値を Create メソッドで作成された PORTFOLIO_NAME にマッピングする必要があります。

ありがとう

public sealed class PositionArrayActivity : NativeActivity, IActivityTemplateFactory
{
    [Browsable(false)]
    public Dictionary<string, List<Entity>> dictionary = new Dictionary<string, List<Entity>>();
    public ActivityAction<Entity[]> Body { get; set; }
    public Entity[] PositionList { get; set; }
    public SqlDataReader rdr;
    public SqlDataReader sdr;
    public Entity[] positionArray;
    public List<String> fundList;
    public String oneFund { get; set; }
    public String date { get; set; }
    public List<Entity> listToArrayPositions;

    protected override void CacheMetadata(NativeActivityMetadata metadata)
    {
        metadata.AddDelegate(Body);
    }

    protected override void Execute(NativeActivityContext context)
    {
       // A lot of code.... 
    }


    public Activity Create(DependencyObject target)
    {
        Variable<string> var = new Variable<string>
        {
            Name = "PORTFOLIO_NAME"
        };

        var fef = new PositionArrayActivity();  
        var aa = new ActivityAction<Entity[]>();
        var da = new DelegateInArgument<Entity[]>();
        da.Name = "positions";
        fef.Body = aa;
        aa.Argument = da;
        aa.Handler = new Sequence
        {
            Variables = { var }
        };

        return fef;
    }
}
4

1 に答える 1

1

変数値を設定するには ActivityContext が必要なので、最初に var の宣言 (その名前は実際にコンパイルされましたか?) をより高いスコープに移動します。

次に、 var.Set(activityContext, oneFund); を実行します。

ただし、oneFund プロパティはアプリケーションの起動時に 1 回しか設定されないため、驚くべき結果が得られる可能性があります。インスタンスごとにそれを行いたい場合は、引数が必要です。

于 2013-01-13T15:09:36.503 に答える