对.net工作流理解

来源:互联网 发布:软件开发工程师多少钱 编辑:程序博客网 时间:2024/06/01 08:45
1.1对于工作流总体概貌的理解
这几天一直在看MSDN,整理下自己的思路。
在.net工作流中,进程通过WorkflowRuntime创建和维护WorkflowInstance.除此而外,WorkflowRuntime可以创建自定义的服务和本地服务(为工作流处理对象设计服务),可以控制从内存中加载和卸载工作流(配合sqlWorkflowPersistenceService就可以实现工作流的持久化)等等。
现在理解下进程中workflowRuntime,workflowInstance和服务的关系(见附件)。
这是MSDN中描述服务在workflowRuntime中的执行情况,不过从侧面反映了:
1.workflowInstance由workflowRuntime创建。
2.服务由addservice()加载入workflowRuntime中,而与workflowInstance实例无关。
3.workflowInstance在创建后,自动流动触发activity。在activity中触发service中的事件,转而由workflowRuntime将事件转化为接口上的事件调用(EventHandle)。
从上面的分析,举个例子来说,就是workflowInstance相当于公司中文档批复的业务流程,而服务就是需要批复的文档以及在文档上要做的操作。而workflowRuntime则是跳出流程和文档,调整两者连接的部门(虚拟,假设有此部门)。
1.2 对ExternalDataExchangeService服务的理解
诚如MSDN所说,一个必须添加到工作流运行时引擎才能启用本地服务通信的服务。若要正确地初始化和注册这些服务(我觉得应该是添加到workflowRuntime里服务于workflowInstance的服务),必需将本地服务添加到ExternalDataExchangeService中。
因此workflowRuntime,workflowInstance,ExternalDataExchangeService和本地服务的关系是:workflowRuntime承载workflowInstance,ExternalDataExchangeService被添加到workflowRuntime,本地服务被添加到ExternalDataExchangeService中以实现对于譬如SqlWorkflowPersistenceService的初始化。
还有,就是本地服务必须实现使用 ExternalDataExchangeAttribute 进行修饰的接口。本地服务中的需要定义方法和事件(需要实现ExternalDataEventArgs)供CallExternalMethodActivity和HandleExternalEventActivity使用。
前者用于工作流实例从外部接收信息,后者用于处理由本地服务引发的事件的工作流通信活动。workflowRuntime会将本地服务上的方法调用转化为workflowInstance上的Event触发。

  要认识工作流引擎需要了解以下几个要素:
实体(Entity) :是工作流的主体,是需要随着工作流一起流动的物件(Object)。例如,在一个采购申请批准流程中,实体就是采购申请单;在公文审批流程中,实体就是公文。
参与者(Participant) :是各个处理步骤中的责任人,可能是人,也可能是某个职能部门,还可能是某个自动化的设备;
流程定义(Flow Definition) :是预定义的工作步骤,它规定了实体流动的路线。它可能是完全定义的,即对每种可能的情况都能完全确定下一个参与者,也可能是不完全定义的,需要参与者根据情况决定下一个参与者;
工作流引擎(Engine) :是驱动实体按流程定义从一个参与者流向下一个参与者的机制

原创粉丝点击