我试图通过编写标准活动来编写自定义活动,其中一个是一个Assign活动,它负责将一个字符串值赋给一个名为'TextOut'的OutArgument,我在自定义Activity上定义了它。我们的想法是,使用此自定义Activity的工作流作者在工作流中定义一个变量,并将其映射到我的自定义Activity的TextOut OutArgument。我想用迭代方法实现这一点,因为我需要在运行时动态创建pick分支。我遗漏了这段代码来简化我的问题。
活动的代码如下所示。这可能不是应该如何完成的,因为它不起作用:)使用此Activity的工作流会抛出验证错误:“未提供所需活动参数'To'的值。”
我想获得一些关于如何让我的OutArgument使用Assign子活动的建议(所以不要在我的OutArgument上调用.Set)。
public sealed class OutArgActivity : Activity
{
public OutArgument<string> TextOut { get; set; }
public OutArgActivity()
{
Assign assign = new Assign {
To = this.TextOut,
Value = new InArgument<string>(
env => "this is my custom return value")
};
Sequence sequence = new Sequence();
sequence.Activities.Add(assign);
this.Implementation = () => sequence;
}
}
答案 0 :(得分:8)
尝试在Assign活动中使用ArgumentReference,如下所示:
public sealed class OutArgActivity : Activity
{
public OutArgument<string> TextOut { get; set; }
public OutArgActivity()
{
Assign<string> assign = new Assign<string>
{
To = new ArgumentReference<string>("TextOut"),
Value = new InArgument<string>(
env => "this is my custom return value")
};
Sequence sequence = new Sequence();
sequence.Activities.Add(assign);
this.Implementation = () => sequence;
}
}
答案 1 :(得分:0)
如果您不想使用魔术弦,可以用这种方式。
public sealed class OutArgActivity : Activity
{
public OutArgument<string> TextOut { get; set; }
public OutArgActivity()
{
Assign<string> assign = new Assign<string>
{
To = new OutArgument<string>(ctx => TextOut.Get(ctx)),
Value = new InArgument<string>(
env => "this is my custom return value")
};
Sequence sequence = new Sequence();
sequence.Activities.Add(assign);
this.Implementation = () => sequence;
}
}
这似乎很不直观,但是由于OutArgument<>
的构造函数的参数是Expression
,因此可以将其转换为位置引用。正是这样。