有没有办法在不使用outarguments的情况下将一个工作流的输出传递给另一个工作流?

时间:2016-06-16 10:28:01

标签: workflow-foundation-4 workflow-foundation

我最近开始使用Workflows.I能够通过使用OutArgument将一个活动的输出作为输入传递给另一个。如果不使用OutArgument就可以。

如果可能请建议我怎么做?

全部谢谢

1 个答案:

答案 0 :(得分:1)

您可以使用工作流扩展作为整个工作流范围内的变量存储库。

创建包含属性的工作流扩展。 将扩展添加到工作流应用程序。 在“活动”中设置或获取属性的值。

请参阅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                     
       }

   }
}