我创建了一个返回数据集的活动,如下所示:
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
答案 0 :(得分:0)
WorkflowInvoker.Invoke()从工作流返回OutAurgument和InOutArguments。
我认为您只需添加一个方向为“Out”的Argument,并将该活动的结果与该参数挂钩。
答案 1 :(得分:0)
John Vottero是正确的,但没有明确提供所有步骤。
在工作流程中创建一个名为myWorkflowArgument的输入/输出参数(例如)。
在您的活动中创建一个名为myActivityArgument的输入/输出参数。
在工作流程级别,在您的活动的属性中,将myWorkflowArgument添加到myActivityArgument的字段
现在确保您的活动代码填满myActivityArgument。这意味着myActivityArgument的值在工作流级别可用作myWorkflowArgument。
然后,当工作流使用myWorkflowArgument作为键完成时,您可以将myWorkflowArgument与其他活动一起使用或从Dictionary结果中检索值。
参数名称取决于您。我通常使用与用于activity参数的工作流参数相同的名称,以便我可以判断它们应该保留的时间。