为工作流变量分配值

时间:2013-01-11 14:48:28

标签: c#-4.0 workflow-foundation-4 workflow-activity

我有一个关于Windows Workflow Foundation 4的问题。我有一个名为PositionArrayActivity的活动。此活动内部有一个Sequence活动。我需要在Execute方法中(在工作流执行期间)oneFund变量将其值映射到在Create方法中创建的PORTFOLIO_NAME ....我有什么办法在运行时将oneFund值映射到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;
    }
}

1 个答案:

答案 0 :(得分:1)

您需要有一个ActivityContext来设置变量值,所以首先将var的声明(该名称实际编译?)移动到更高的范围。

然后在执行中 var.Set(activityContext,oneFund);

但有一件事,oneFund属性只会在应用程序启动时设置一次,因此您可能会有一些令人惊讶的结果。如果您希望每个实例都有,那么您需要一个参考。