上周去珠海做了一次WF培训,有人提出了一个问题:
如何可以动态的改变工作流而不需要重新编译。例如,有一套标准的流程,在不同客户项目上进行实施时,实施人员只需要通过工具简单的根据特定客户的需要改变一下流程,就可使用。不需要开发人员重新为此客户修改编译代码。
WF虽然提供了 Workflow Changes类来提供动态改变工作流的技术,但是此方法仅能改变某个工作流实例的流程,而不能改变其他实例的流程。也就是说此方法不是工作流模板级别的变更方法。
XAML Activation是目前可以选择的一个技术:
XAML based workflow definitions open up a number of additional possibilities. If we have a workflow definition entirely in XAML we can use workflow activation and avoid compilation. Activation is useful when building a large number of dynamic workflows. We merely need to pass the XML into the workflow runtime to have a run-able instance of a workflow.
http://www.odetocode.com/Articles/448.aspx
可以使用如下方法来读取工作流XAML文件并创建工作流实例:
然而代价是必须使用纯XAML标记语言,没有了Code-Beside的支持。
如何可以动态的改变工作流而不需要重新编译。例如,有一套标准的流程,在不同客户项目上进行实施时,实施人员只需要通过工具简单的根据特定客户的需要改变一下流程,就可使用。不需要开发人员重新为此客户修改编译代码。
WF虽然提供了 Workflow Changes类来提供动态改变工作流的技术,但是此方法仅能改变某个工作流实例的流程,而不能改变其他实例的流程。也就是说此方法不是工作流模板级别的变更方法。
XAML Activation是目前可以选择的一个技术:
XAML based workflow definitions open up a number of additional possibilities. If we have a workflow definition entirely in XAML we can use workflow activation and avoid compilation. Activation is useful when building a large number of dynamic workflows. We merely need to pass the XML into the workflow runtime to have a run-able instance of a workflow.
http://www.odetocode.com/Articles/448.aspx
可以使用如下方法来读取工作流XAML文件并创建工作流实例:
public WorkflowInstance CreateWorkflow(XmlReader workflowDefinitionReader);
public WorkflowInstance CreateWorkflow(XmlReader workflowDefinitionReader, XmlReader rulesReader, Dictionary<string, object> namedArgumentValues);
public WorkflowInstance CreateWorkflow(XmlReader workflowDefinitionReader, XmlReader rulesReader, Dictionary<string, object> namedArgumentValues, Guid instanceId);然而代价是必须使用纯XAML标记语言,没有了Code-Beside的支持。