【发布时间】:2009-09-06 21:18:08
【问题描述】:
我有一个 .net 4.0 工作流,我自己托管(仅使用 WorkflowInstance.Run),当我重新水化工作流时,我想初始化它的一些内部参数,以便后续活动可以使用这些值...... 我该怎么做呢?
【问题讨论】:
标签: workflow .net-4.0 workflow-foundation workflow-foundation-4
我有一个 .net 4.0 工作流,我自己托管(仅使用 WorkflowInstance.Run),当我重新水化工作流时,我想初始化它的一些内部参数,以便后续活动可以使用这些值...... 我该怎么做呢?
【问题讨论】:
标签: workflow .net-4.0 workflow-foundation workflow-foundation-4
使用参数 (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);
在您的工作流程图中,定义输入参数,然后您将能够访问参数的值。
【讨论】:
通常,参数用于在您第一次开始执行工作流之前提供给您的工作流。
例如,您可能有 InArgument 输入 1、InArgument 输入 2、OutArugment 输出,当您创建工作流时,您传入所有输入,以及用于存储所有输出的工作流变量。
一旦工作流已经运行,它就会有参数,它不会期望它们会因某些外部因素而改变。 (如果这是一个混淆点:它通常不会在您的工作流程开始时恢复执行 - 它会在中间的某个任意书签处恢复。)那么您如何将数据传递到您的工作流程正在执行中?
在这里,我建议查看消息传递活动。数据在 ReceiveMessage 的 Value OutArgument 上“进入”工作流。它是如何到达那里的?它是由 Receive 活动设置的。但是接收活动是如何设置它的呢?好吧,首先服务主机告诉接收活动恢复,因为它有一条消息。然后接收活动说“我收到了什么消息?”没有人会神奇地将数据推送到其中,而是在 Activity 激活后,它知道从某处的队列中提取数据。
希望你可以使用这个想法 1)有人存储工作流所需的数据 2)运行时或服务主机或任何重新激活工作流的东西 3)活动在运行时(重新激活后)提取所需的数据 作为您的解决方案的模型。
【讨论】: