子活动的自定义活动设置参数
我正在尝试为 WF4 创建一个自定义活动,该活动托管子活动并将一些参数传递给其子活动。我在下面附上了我的活动的简化版本(父活动和子活动),
public class Child : CodeActivity
{
public InArgument<Dictionary<string, object>> Data;
protected override void Execute(CodeActivityContext context)
{
Dictionary<string, object> data = Data.Get(context);
//Some operations on the input data
}
}
public class Parent : NativeActivity
{
public InArgument<int> Value1 { get; set; }
public InArgument<string> Value2 { get; set; }
public Child Body { get; set; }
protected override void Execute(NativeActivityContext context)
{
int value1 = Value1.Get(context);
string value2 = Value2.Get(context);
Dictionary<string, object> data = new Dictionary<string, object>();
data.Add("value1", value1);
data.Add("value2", value2);
context.SetValue(Body.Data, data);
context.ScheduleActivity(this.Body);
}
protected override void CacheMetadata(NativeActivityMetadata metadata)
{
Body = new Child();
base.CacheMetadata(metadata);
}
}
当工作流执行到达活动的 Execute 方法时,子活动的 Data 参数为 null。
有人可以给我一些指导,如何在这两项活动之间传递争论吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
虽然使用额外变量的方法有效,但在 ActivityAcytion 中使用调度具有某些输入的子级的“官方”方法,或者如果您还希望使用 ActivityFunc 获得结果。
恐怕代码并没有真正变得更简单或更容易理解,但为了完整性,我决定添加这个。
While the approach with the extra variable works the "official" way of scheduling a child with some inputs is using in ActivityAcytion or if you also want a result with an ActivityFunc.
I am afraid the code doesn't really get to be any simpler or easier to understand but for completeness sake I just decided to add this.
我还需要通过父活动返回子活动的结果。为此,我使用了 ScheduleActivity 方法和 CompletionCallback 参数。我在下面附上了包含 out 参数集的父/子示例活动,也许某个时候有人会需要它:)
父:
子:
I also needed to return the result from the child activity via the parent activity. For this I used the ScheduleActivity method with the CompletionCallback parameter. I attached below the Parent / Child example activities containing the out argument set also, maybe it will be needed by someone at some time :)
Parent:
Child:
可能无法直接在 Execute 方法中设置输入参数的值。必须引入一个中间变量。 Child.Data 参数连接到此变量并在 Parent.Execute 方法中。
家长:
孩子:
这不是一个好的解决方案,但我在 WF4 中几乎看不到任何好的东西:)。
it is probably not possible to set value of input argument directly in Execute method. An intermediate variable must be introduced. Child.Data argument is connected to this variable and in Parent.Execute method.
Parent:
Child:
This is not a nice solution but I hardly see anything nice in WF4:).