工作流数据库设计_第1页
工作流数据库设计_第2页
工作流数据库设计_第3页
工作流数据库设计_第4页
工作流数据库设计_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、工作流设计参考(包括PHP实现) 本文关键词:php工作流jvorkflow工作流设计的工作流很少有让人满意的,即便是国内用的比较多的jbpm,用起来也会 觉得很便扭。再加上PHP中没有什么好用的工作流,于是干脆自己设计一个,设计的原则 如下:1根据80/20原则,只使用wfhic模型中最符合自身应用的20%功能2充分吸收国内使用jbpm开发BOSS中遇到的问题,工作流引擎只负责参数的收集和流程 的流转,具体和业务的控制,交给每个流程定制的控制类去实现。3表单采用简单的html+控制标签的方法实现4权限和模板引擎,以及其它辅助函数直接使用办公系统自带的框架5充分利用PHP语言的特点,流程设计是

2、基于数据库的,程序上使用OO设计,但采用重 对象的方法6不把可视化设计流程的工作交给最终客户,而旦由设计时完成,因此不考虑流程版本更新 的问题一、工作流数据表设计tbl_woikflow_definatioii:匚作流定义表defuiation_id流程iddefuiation_name流程名称defuiationjiandler流程处理辅助文件,每 个工作流一个文件自定义处理文件,及其对象。例如 vvorkflow-propoisal-haiidler.php,其中定义对象 proposaltbl_woikflow_node :流程结点步骤表node.id结点iddefuiation_id流

3、程idnode.mdex结点序号结点的stepnode_name结点名称node_type结点类型1人为决策,2自动处理(直接执行 execute_function), 3等待外部响应(例如外部 WS触发),4分支,5汇总6结束结点(此结点 执行时候自动终止进程)uiit_fiinction流程初始函数mn_function流程运行函数save_function流程保存函数transit_fiinction流程流转函数prev_node_index前结点序号例如1。开始结点没有执行前,通过此来校验一下流程next_node_index后结点序号例如同意3,不同意4。尾结点或要结束的结 点没有,

4、若没有,直接调用endexecutor执行角色,组,人1 ole1,2 group1,2 userl,2,为空由运行时决 定execute_type执行类型0需所有人执行1只需一人执行remind提醒0不提醒1邮件2短信3邮件和短信field可编辑的字段name,contentmax_day最长时间(天)tbLworkflow_process :流程执行进程表|process_id进程id|defuiation_id流程id|process_desc进程描述显示在我的工作台中|context上下文存放上下文变量,例如业务表的id|current_node_index当前结点序号|start_t

5、ime流程启动时间如遇分支、汇合显示为:1 =3,4=3,5 =6|fuiish_tmie流程完成时间|state状态1运行2结束|start_usei-发起人发起人,用于显示自己的流程tbLworkflow_tluead :流程执行线程表thiead_id线程idprocessed进程idprocess_desc进程描述node.id结点idnode_naine结点名称executor执行人staxt_time线程生成时间receive_time线程接收时间fuush_tmie线程完成时间max_time结点规定的最长时间state状态0未接收1己接收2己处理二、常见流程 人工决策 领导传阅

6、部门领导审批 填写表单结束 放弃提交同意重填(退回)不同意完成外部响应发送支付信息接收支付成功响应(外部WS触发该流程)三、PHP设计运行的函数由结点在设计时候决定,如果没有设定,就使用默认的函数。利用了 PHP语言 的以下特性Sname();/ / This calls the BarQ methodfiinction Bar()echo Tills is Bar”;Sfbo = new Foo();Sfiincname =H Variable;Sfdo-SfuncnameQ; This calls Sfoo-VariableQ?使用前诃以用method.exists来检查。Wdi kflo

7、wService .phpWdrkflowServiceSdefinationSprocessSnodeStlueadSmput用户输入的和流程有关的变量list_defiiiation()(uiit_process(defination_id)(global user;取得Sdefination,得到业务的 handler,例如 WorkflowProposalHaiidler建立Sprocess行记录stait_processQ(调用 WoikflowProposalHandler-stan(Spiocess)/新建业务对象,并把业务类的参数例如proposal_id 放到Sprocess

8、context里面init_thread( 1); 默认调用第一个结点list_ my_tluead ()(global user;uiit_tluead(node_iiidex) (取得$node取得 Sprocess修改Sprocess为运行到当前结点Switch($node c node_type)Case 1:人工决策建立 StlueadW7dikflowProposalHandler- nut_fiinction (Sprocess,$node,Sthiead)发送提醒Case 2:自动处理建立 StlueadWdikflowProposalHandle init_function

9、($process,Snode.$thiead)调用 i-un_tlnead(tlnead_id)Case 3:等待外部响应建立 StlueadWdikflowProposalHandle init_function ($process,Snode.$thiead)Case 4:分支取得所有分支的子结点iniCthieacl(子结点)Case 5:汇总:取得所有前结点,如果所有前结点的Tluead都结束了,调出下一结点调用init_tliiead(子结点)Case 6:结束:直接结束进程processend_process()nm_thiead(thiead_id) (取得Snode取得 Sp

10、rocess取得 S threadSwitch($node c node_type)Case 1:人工决策修改Stluead为己接收WorkflowProposalHandler- iun_fiinction (Sprocess,Snode,Stluead) 显示表单Case 2:自动处理修改Stluead为己接收Snext_node_id=WorkflowPioposalHaiidler- iiin_function (Sprocess,Snode,Stluead) 调用 transit_tluead(tluead_id. Snext_node_id)Case 3:等待外部响应修改Stlue

11、ad为己接收Snext_node_id=WorkflowPioposalHaiidler- iiin_function (Sprocess,Snode,Stluead)transit_tlnead(tlnead_id, $next_node_id)Case 4:分支Case 5:汇总:Case 6:结束:save_tluead(tluead_id) (/保存结点数据取得Snode取得 Sprocess取得 StlueadSwitch($node c node_type)Case 1:人工决策WorkflowProposalHandler- save_fiinction (SpiocessSno

12、de.Stluead)保存表单WdrkflowProposalHandle nm_fiinction ($process,$node,$thiead) 显示表单Case 2:自动处理Case 3:等待外部响应Case 4:分支Case 5:汇总:Case 6:结束: transit_tluead(tluead_id. Snext_node_id)(取得Snode取得 Sprocess取得 StlueadSwitch($node c node_type)Case 1:人工决策WorkflowProposalHandler-transit_fiinction(Sprocess,Suode,Stlu

13、ead,Snext_node_id)修改Stluead为己完成If($next_node_id $ cui_node_id) 回退删除所有大于$next_node_id的Threadiiiit_tluead(SnexCnode_id);Case 2:自动处理修改Stluead为己完成If($next_node_id $ cui_node_id) (回退删除所有大于$next_node_id的Tlueadiiiit _thread(Snext_node_id);Case 3:等待外部响应修改Stluead为巳完成If($next_node_id list_defination();case st

14、aivprocess : 启动参数:defiiiationid7dikflowSenTice-iiut_process(defination_id);WoikflowSenTice-start_processQ;case list_ my_tluead :待处理的列表WdikflowServicelist_ my_thread0;case mn_tliiead :参数:thread_idWdikflowServiceruii_thread(thread_id);case save_tluead :参数:tluead_id把input收集起来(所有的变量以f_开头),赋给WoikflowSeiv

15、ice的Input,另外还要获 得 tluead_idWorkflowServrice-save_tluead(tluead_id);case tiaiisit_thiead :参数:thread_id把input收集起来,赋给WorkflowSeivice的Input,另外还要获得tluead_idSnext_node_id =得到用户选择的下一结点idW7dikflowSendce- transit _thiead(thread_id, Snext_node_id);case list_my_process:所有我发起的流程case list_all_piocess:所有我发起的流程case view_piocess :在其它程序中初始化流程1先自行建立好业务表单2WorkflowSerdce-iiiiCpiocess

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论