【问题标题】:Is it possible to inject values into Workflow Arguments?是否可以将值注入工作流参数?
【发布时间】:2009-09-06 21:18:08
【问题描述】:

我有一个 .net 4.0 工作流,我自己托管(仅使用 WorkflowInstance.Run),当我重新水化工作流时,我想初始化它的一些内部参数,以便后续活动可以使用这些值...... 我该怎么做呢?

【问题讨论】:

    标签: workflow .net-4.0 workflow-foundation workflow-foundation-4


    【解决方案1】:

    使用参数 (In/OutArgument) 来定义工作流的输入或输出(也包括活动)..

    这里是示例语法..

    Dictionary <string, object> input = new Dictionary <string, object> (); 
    input.Add( "UserName" , userName); 
    input.Add ( "UserName", userName); 
    WorkflowInstance myInstance = new WorkflowInstance(
    new WorkflowConsoleApplication2.Sequence1(),input); 
    
    WorkflowInstance myInstance = new WorkflowInstance (
    new WorkflowConsoleApplication2.Sequence1 (), input); 
    

    在您的工作流程图中,定义输入参数,然后您将能够访问参数的值。

    【讨论】:

    • 但是当我加载一个现有的工作流时不能使用它可以吗?我将使用: WorkflowInstance.Load(WorkflowElement, PersistenceProvider) ..没有采用参数字典的覆盖。我的要求是,在工作流程进展到某个点之前,我没有所有参数......然后我可以注入它们以供以下活动使用......
    【解决方案2】:

    通常,参数用于在您第一次开始执行工作流之前提供给您的工作流。

    例如,您可能有 InArgument 输入 1、InArgument 输入 2、OutArugment 输出,当您创建工作流时,您传入所有输入,以及用于存储所有输出的工作流变量。

    一旦工作流已经运行,它就会有参数,它不会期望它们会因某些外部因素而改变。 (如果这是一个混淆点:它通常不会在您的工作流程开始时恢复执行 - 它会在中间的某个任意书签处恢复。)那么您如何将数据传递到您的工作流程正在执行中?

    在这里,我建议查看消息传递活动。数据在 ReceiveMessage 的 Value OutArgument 上“进入”工作流。它是如何到达那里的?它是由 Receive 活动设置的。但是接收活动是如何设置它的呢?好吧,首先服务主机告诉接收活动恢复,因为它有一条消息。然后接收活动说“我收到了什么消息?”没有人会神奇地将数据推送到其中,而是在 Activity 激活后,它知道从某处的队列中提取数据。

    希望你可以使用这个想法 1)有人存储工作流所需的数据 2)运行时或服务主机或任何重新激活工作流的东西 3)活动在运行时(重新激活后)提取所需的数据 作为您的解决方案的模型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-05
      • 2013-05-10
      • 2019-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多