WF工作流详细设计方案WF工作流详细设计工作流系统是以规格化的流程描述作为输入的软件组件,它维护流程的运行状态,并在人和应用之间分派活动;是一种反映业务流程的计算机化的、实现经营过程集成与经营过程自动化而建立的可由工作流管理系统执行的业务模型。工作流起源于生产组织和办公自动化领域,其目的是将现有工作分解,按照一定的规则和过程来执行并监控,提高效率,降低成本;本设计依据是WFMC(工作流管理联盟)规范和图论中的有向图理论;基于的技术是DOTNETMVC架构和WindowsWorkflowFoundation(WWF)工作流设计平台。该节主要包括以下内容:实现技术与实现方案、工作流设计器、工作流调用服务(封装类、WFLocalService和WFWebService)、工作流分类、工作调用、工作流监控、页面流和工作流权限等实现技术与实现方案实现技术WF(windowsworkflowfoundation)微软工作流组件,一个工作流是一个人类或系统活动的模型,该模型被定义为一组活动的地图。工作流通过拖放活动组件来设计,被编译为.Net程序集,然后在工作流运行时和.NetCLR中执行。Activity:工作流组件中活动组件,一个活动是工作流中的一个步骤,是工作流中执行、重用、复合的基本单元,活动组件下包含事件组件(Event),接收外部事件组件(HandleExternalEvent),调用外部方法组件(CallExternalModthod)等。本地服务组件:localservice,规定业务与工作流组件交互的事件和方法接口,实现业务与工作流的交互,用于工作流活动组件调用。系统工作流引擎采用微软WF,WF使用户可以直观地设计复杂的算法,从而解决业务问题并为业务建模,它为开发和执行基于复杂过程的多种应用程序提供了框架。如果用户具备由各活动(Activity)组成的基于工作流的系统(如WindowsWorkflowFoundation),则可利用命令性代码和声明性活动地图的强大组合以及绑定它们的声明性规则来实现应用程序。主要好处在于用户可以为解决方案建模(甚至以直观方式建模),将WindowsWorkflow嵌入运行时服务器来解释图表,并使WindowsWorkflow遵循在创建块中定义的链接。进程越复杂,为其设计和实现的流程就越简单。进程动态更改越容易,用户需要编写和维护的代码数量就越少。WF运行时为工作流程序提供了托管执行环境,还为程序提供了持续时间、可靠性、挂起/恢复、事务以及补偿特征。在某种意义上,活动类似于中间语言(IL)操作码或程序语句,但包含特定领域的知识。简而言之,WindowsWorkflowFoundation使程序语义具有声明性并且十分准确,使用户能够为接近实际进程的应用程序建模。它是最适合此工作的工具。用户无需使用IL编写前端可视应用程序,而是使用RAD开发工具和更具人类可读性的语言。WindowsWorkflowFoundationSDK提供了广泛的编程语言,专门用于为复杂的业务程序建模,特别是在这些程序可能随着时间而改进的情况下。在这种情况下,主要好处在于用户可以添加特殊活动来进行工作流,并使用内置行为活动来控制该工作流。用户可以专注于任务,其他事情由运行时进行处理。WF工作流引擎提供了以用户/角色机制的安全机制,实现与系统的无缝集成。实现方案二滩公司电力营销软件面临需求多变,流程变更频繁的环境,适于采用WF工作流技术来满足这一需求。工作流是用于说明数据和操作流的工具,因此,任何需要IF或WHILE语句的方案都可以是工作流。但是,任何人都不能使用仅包含IF语句的工作流,工作流运行时确实具有成本,该成本可以在流复杂性超出给定阈值时分摊。基于工作流的解决方案的真正优点是使复杂进程更易于建模和实现,更重要的是使其更易于改进和扩展。而这一优点正是二滩公司电力营销软件所需要的特性。系统工作流设计模式l设计工具:利用VS.Net2005提供的工作流设计器进行工作流设计;l工作流类型:统一采用状态机模式;l基本结构:采用状态组件、EventDriven组件、HandleExternalEvent组件、CallExternalMethod组件、SetState组件配合本地服务组件等6类组件完成设计;l事件和状态接口参数:均在本地服务组件中以接口的形式规定;l统一外部调用接口:统一接口函数RaiseEvent(form,id),在工作流接口函数中根据form中状态不同决定引发不同事件,驱动工作流运行。(测试中)l功能划分:业务实现主要放置在工作流本地服务组件函数中实现,而工作流组件主要起逻辑控制作用。l页面流由配置文件配置,根据返回状态决定跳转页面;数据流由DynamicForm传递。2、系统工作流运行模式对于一个通用的预测、优化、报价业务来说,其业务逻辑和流程是可变的。在B/S模式下表现为两种可能:1、页面间的跳转是可变的。为了实现这个目标,本系统必须要有一个总控程序来控制业务逻辑。控制器接收用户的请求,通过查询配置表调用模型中“正确”的工作流组件进行相应处理,工作流组件根据当前状态参数(State)驱动对应的活动组件,最后再根据返回状态参数(State)调用“正确”的视图来显示返回的处理结果。总控程序本身也被封装成服务端组件,整个系统页面间跳转全部由DispatchForm和WF共同完成。DispatchForm根据一个定义好的配置文件实例化相应工作流组件执行任务,然后根据工作流组件执行返回状态参数,根据该返回状态参数决定跳转到哪个页面。通过WF和总控程序的耦合,实现了数据流和页面流的以一致的方式运行。2、单一页面的数据流,总控组件根据配置表调用工作流组件,工作流组件根据状态参数调用各活动组件,各活动组件调用相应算法,以Dynamicform作为状态间数据流载体传递参数,其返回值后不跳转页面而直接刷新当前页面内容。3、工作流组件加载模式所有的工作流加载方式均通过配置文件(actioncontroller.xml)配置,动态加载工作流组件,动态加载本地服务组件。其基本原理与算法库管理相似,读取ActionController.xml文件中的配置项,利用对象工厂技术加载工作流组件和本地服务组件,执行相应的工作流程。(测试)4、工作流内部运行模式业务流程中调用本地服务(localservice)组件来引发事件(RaiseEvent),利用统一规定的引发事件接口(RaiseEvent),传递统一的参数(form,工作流ID),在活动组件中利用事件驱动组件中HandleExternalEvent组件监听接收外部事件,若事件发生,接着利用CallExternalModthod组件调用外部方法,跳转到下一状态,若一个状态下存在多个处理分支则添加多个事件驱动组件来处理。工作流基本结构表述为:工作流——状态组件——事件驱动组件(多个)。图3-1工作流结构图工作流设计器该系统工作流设计器主要是面向开发人员,实现对工作流程的定制和修改。设计器功能介绍设计器时基于微软的WF技术架构,采用DONETC/S的方式实现。特征功能明细文件对工作流文件的编辑功能:1、工作流文件的新建、打开、保存等编辑操作2、工作流打印操作3、退出编辑对工作流流程中元素的编辑功能:1、剪切2、拷贝3、粘贴4、删除工作流对工作流流程图的操作:1、展开2、合并3、缩放4、导航(放大、缩小、移动、默认)参数设置设计器涉及的参数配置包括:1、LocalService动态加载参数配置(xml)2、页面流参数设置(xml)图形化编辑图形化功能区,是创建工作流程的主要操作区,包括功能有:1、工作流元素的拖放;2、流程的变动调整;3、创建流程的快捷方式等;基础工作流活动元素1、StateActivity状态活动2、EventDrivenActivity事件驱动活动3、HandleExternalEventActivity绑定外部时间活动4、CallExternalMethodActivity调用外部方法活动5、SetStateActivity状态转换活动6、StateInitializationActivity状态初始化活动,当状态开始运行的时间开始执行;7、StateFinalizationActivity状态结束活动,在一个状态转向另一个状态之前执行;8、DelayActivity延时活动9、TerminateActivity终止活动性事件参数设置属性事件参数设置,是通过设计器生成工作流的关键,包括的功能有:1、接口服务的动态加载;2、接口的设置;3、事件的绑定;4、外部事件的调用设置;8.2.2核心类结构图备注:WorkflowLoader工作流设计器加载服务类;EventBindingService事件绑定服务类;WorkflowDesignerControl工作六图形化设计服务类;ToolBoxService设计器工具箱(Activity容器)服务类;PropertyValuesUIService属性值窗口服务类;MemberCreationService成员创建服务类;SelfHostToolboxItem设计器宿主工具箱成员加载处理服务类;WorkflowMenuCommandService工作流目录事件命令服务类;Helpers工作流通用处理功能类(静态类)设计器功能界面图示(WF设计器功能图)工作流调用服务工作流调用服务包括:工作流引擎和运行时(WorkflowRuntime)及运行时服务(Service)的封装类(WorkflowModuleService)、工作流LocalService服务(WFLocalService)和工作流WebService服务(WFWebService)等;封装类(WorkflowModuleService)封装类是工作流运行的基础,封装的功能包括:工作流引擎(运行时)WorflowRuntime的封装,对整个项目来说,只能有一个WorkflowRuntime实例,在同一个WorkflowRuntime可以同时运行多个工作流实例;手动调度服务的加载(ManualWorkflowSchedulerService),手动调度服务为工作流执行中的手动调度提供了支持;外部数据交互服务加载(ExternalDataExchangeService),外部数据交互服务为工作流内部与工作流外部(宿主程序)的数据交互提供支持;工作流持久化服务的加载(SqlWorkflowPersistenceService),持久化是将工作流实例从工作流引擎中移出,存入持久性介质,以及从介质中将实例载入工作流引擎中,SqlWorkflowPersistenceService类是使用SQL数据库对工作流状态进行持久化的服务,实例使用Unload方式通过加载到引擎中的SqlWorkflowPersistenceService服务,完成实例的内存移出与保存到数据库的操作,引擎使用GetWorkflow方法,可通过SqlWorkflowPersistenceService服务将存于数据库中的实例加载并返回,实例使用load方法,可触发引擎的WorkflowLoaded事件工作流跟踪服务的加载(SqlTrackingService),跟踪工作流及其接点状态是工作流平台的核心功能,WF提供的Tracking服务用以跟踪工作流的执行状态;工作流执行过程中会有各种状态的改变,Tracking能将这些状态改变信息记录到数据库并提供查询端口;另外在封装类中还实现了对自定义服务的加载,同时负责工作流引擎的启动,并保证工作流引擎的唯一性;封装类类图结构:备注:WorkflowModuleServiceHost工作流模板服务宿主类,主要是对工作流引擎、服务及功能的封装;启动工作流引擎;WorkflowModuleServiceStart启动一个工作流实例,并获得实例信息;WorkflowModuleServiceLoad加载一个已经存在的工作流;工作流LocalService服务(