【发布时间】:2016-06-16 10:28:00
【问题描述】:
我最近开始使用 Workflows。我可以通过使用 OutArgument 将一个活动的输出作为输入传递给另一个活动。不使用 OutArgument 是否可能。
如果可能,请建议我怎么做?
谢谢大家
【问题讨论】:
标签: workflow-foundation-4 workflow-foundation
我最近开始使用 Workflows。我可以通过使用 OutArgument 将一个活动的输出作为输入传递给另一个活动。不使用 OutArgument 是否可能。
如果可能,请建议我怎么做?
谢谢大家
【问题讨论】:
标签: workflow-foundation-4 workflow-foundation
您可以使用工作流扩展来充当整个工作流范围内的变量存储库。
创建一个包含属性的工作流扩展。 将扩展添加到工作流应用程序。 从活动中设置或获取属性的值。
见https://msdn.microsoft.com/en-us/library/ff460215(v=vs.110).aspx
回应您的评论。
你的假设是错误的。扩展“保存”活动 1 的输出,然后可用于活动 2。
例如:
创建一个类来保存属性:
public class PropertyStoreExtension
{
int _myProperty
public int MyProperty
{
get
{
return this._myProperty;
}
set
{
this._myProperty = value;
}
}
}
将此添加为您的工作流程的扩展:
PropertyStoreExtension propertyStoreExtension = new PropertyStoreExtension
WorkflowInvoker myWorkflowInstence = new
WorkflowInvoker(myWorkflowDefinition());
myWorkflowInstence.Extensions.Add(propertyStoreExtension);
myWorkflowInstence.Invoke()
您的工作流程包含 2 个活动: 第一个获取其“输出”并将其存储在扩展中。
public class Activity1_SetProperty: CodeActivity
{
protected override void Execute(CodeActivityContext context)
{
PropertyStoreExtension pse =context.GetExtension<PropertyStoreExtension>();
if (pse != null)
{
pse.MyProperty=outputValue;
}
}
}
第二个从扩展中获取值。
public class Activity2_GetProperty: CodeActivity
{
protected override void Execute(CodeActivityContext context)
{
PropertyStoreExtension pse =context.GetExtension<PropertyStoreExtension>();
if (pse != null)
{
int intputValue; = pse.MyProperty
}
}
}
【讨论】: