繁体   English   中英

如何将数据集从活动传递到.net中的工作流?

[英]How to pass dataset from activity to workflow in .net?

我创建了一个活动来返回数据集,如下所示:

public class DbQueryDataSet : AsyncCodeActivity<DataSet>
    {
        // private variables
        IDictionary<string, Argument> parameters;
        DbHelper dbHelper;


        // public arguments
        [DefaultValue(null)]
        public InArgument<string> ProviderName { get; set; }

        [DefaultValue(null)]
        public InArgument<string> ConnectionString { get; set; }

        [DefaultValue(null)]
        public InArgument<string> ConfigName { get; set; }

        [DefaultValue(null)]
        public CommandType CommandType { get; set; }

        [RequiredArgument]
        public InArgument<string> Sql { get; set; }

        [DependsOn("Sql")]
        [DefaultValue(null)]
        public IDictionary<string, Argument> Parameters
        {
            get
            {
                if (this.parameters == null)
                {
                    this.parameters = new Dictionary<string, Argument>();
                }
                return this.parameters;
            }
        }


        /*public DbQueryDataSet()
        {
            this.CommandType = CommandType.Text;
        }*/

        protected override IAsyncResult BeginExecute(AsyncCodeActivityContext context, AsyncCallback callback, object state)
        {
            // configure the helper object to access the database
            dbHelper = new DbHelper();
            dbHelper.ConnectionString = this.ConnectionString.Get(context);
            dbHelper.ProviderName = this.ProviderName.Get(context);
            dbHelper.ConfigName = this.ConfigName.Get(context);
            dbHelper.Sql = this.Sql.Get(context);
            dbHelper.CommandType = this.CommandType;
            dbHelper.Parameters = this.parameters;
            dbHelper.Init(context);

            // create the action for doing the actual work
            Func<DataSet> action = () => dbHelper.GetDataSet();
            context.UserState = action;

            return action.BeginInvoke(callback, state);
        }

        protected override DataSet EndExecute(AsyncCodeActivityContext context, IAsyncResult result)
        {
            Func<DataSet> action = (Func<DataSet>)context.UserState;
            DataSet dataSet = action.EndInvoke(result);


            // dispose the database connection
            dbHelper.Dispose();
            Result.Set(context, dataSet);
            // return the state
            return dataSet;
        }
    }

然后创建工作流程示例,并将此活动放在工作流程上并设置所需的属性。 但是,当我尝试访问此活动以获取结果数据集时,它什么也不返回。 如果我调试出代码,则它将进入EndExecute方法并正确填充数据集。 但是什么都没有从我们调用它的地方返回到工作流,下面是工作流应用程序示例的program.cs中使用的代码:

    Activity oActivity = new Workflow1();
    Dictionary<string, object> result = WorkflowInvoker.Invoke(oActivity);

在这里,它在字典对象结果中返回0个键。 任何人都可以帮助我如何将数据集恢复到此处?
我正在使用.Net 4.0

WorkflowInvoker.Invoke()从工作流返回OutAurgument和InOutArguments。

我认为您只是添加了一个方向为“ Out”的参数,并使用该参数关联了活动的结果。

John Vottero是正确的,但没有明确提供所有步骤。

在您的工作流中创建一个名为MyWorkflowArgument的输入/输出参数(例如)。

在名为myActivityArgument的活动中创建一个输入/输出参数。

在工作流级别,在活动的属性中,将myWorkflowArgument添加到myActivityArgument的字段中

现在确保您的活动代码填充了myActivityArgument。 这意味着myActivityArgument的值在工作流级别可用作myWorkflowArgument。

然后,当工作流程使用myWorkflowArgument作为键完成时,可以将myWorkflowArgument与其他活动一起使用或从Dictionary结果中检索值。

参数名称由您决定。 我通常为工作流参数使用与活动参数相同的名称,以便我可以知道何时应该保留它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM