在工作流活动之间共享数据
本文关键字:共享 数据 之间 活动 工作流 | 更新日期: 2023-09-27 18:08:16
我有一个自定义活动列表(在代码后面编写,c#),其中每个都是从NativeActivity派生的,现在我在foreach循环的帮助下将所有这些活动添加到序列中。现在的问题是,如果我需要从一个活动中获取一些值并将其传递给另一个活动,我应该如何进行。
比如说,activity1设置了一个字符串属性值为"某个文件名"(允许一个图像文件路径),并且基于它旁边的活动,它将在for循环的帮助下添加到序列中,将其作为输入来翻转该图像。
获取文件的逻辑在activity1的执行方法中有三个,在activity2的执行方法中也有一个。
thanks in advance
var workflow = new Sequence();
Variable<Dictionary<string,object>> variable = new Variable<Dictionary<string,object>>
{
Name = "SharedData"
};
workflow.Variables.Add(variable);
foreach (MyCustomActivity activity in mAddedActivities)
{
workflow.Activities.Add(activity);
}
WorkflowInvoker invoker = new WorkflowInvoker(workflow);
invoker.Invoke();
这就是我为实际实现所做的,不需要任何参数内/外参数,变量"共享数据"足以容纳跨活动的数据。
现在,在覆盖的代码活动"执行"方法的每个活动级别,你必须使用这段代码来获取输入/获取这个工作流变量"SharedData"的值。
WorkflowDataContext dataContext = context.DataContext;
PropertyDescriptorCollection propertyDescriptorCollection = dataContext.GetProperties();
foreach (PropertyDescriptor propertyDesc in propertyDescriptorCollection)
{
if (propertyDesc.Name == "SharedData")
{
myData = propertyDesc.GetValue(dataContext) as Dictionary<string, object>;
if (myData == null) //this to check if its the initial(1st) activity.
myData = new Dictionary<string, object>();
//I'm adding here an additional value into the workflow variable
//its having signature same as that of workflow variable
//dictionary's key as what it is and value as an object
//which user can cast to what actually one wants.
myData.Add("islogonrequired", Boolean.TrueString);
//here I'm fetching some value, as i entered it in my previous activity.
string filePath = myData["filepath"].ToString();
propertyDesc.SetValue(dataContext, myData);
break;
}
}
希望这可以帮助别人…感谢大家的帮助和支持。
var workflow = new Sequence();
//Variable<string> v = new Variable<string>
//{
// Name = "str"
//};
//workflow.Variables.Add(v);
Dictionary<string, object> abc = new Dictionary<string, object>();
abc.Add("thedata", "myValue");
foreach (MyCustomActivity activity in mAddedActivities)
{
if (activity.ActivityResult == null)
activity.ActivityResult = new Dictionary<string, object>();
activity.ActivityResult = abc;
workflow.Activities.Add(activity);
//new Assign<string>
// {
// To = v,
// Value = activity.ActivityResult["thedata"].ToString()
// };
}
WorkflowInvoker invoker = new WorkflowInvoker(workflow);
invoker.Invoke();
这就是我所做的,并且不知何故它正在工作。我不确定这是正确的方法,给我一些建议吧!!,这里的ActivityResult是在各种添加的活动之间共享的属性,通过某种接口成员…