工作流设计参考

上传人:第*** 文档编号:38882823 上传时间:2018-05-09 格式:DOC 页数:9 大小:131KB
返回 下载 相关 举报
工作流设计参考_第1页
第1页 / 共9页
工作流设计参考_第2页
第2页 / 共9页
工作流设计参考_第3页
第3页 / 共9页
工作流设计参考_第4页
第4页 / 共9页
工作流设计参考_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《工作流设计参考》由会员分享,可在线阅读,更多相关《工作流设计参考(9页珍藏版)》请在金锄头文库上搜索。

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

2、 OO 设计,但采用重对象的 方法 6 不把可视化设计流程的工作交给最终客户,而且由设计时完成,因此不考虑流程版本更新的问题 一、工作流数据表设计二、常见流程人工决策领导传阅部门领导审批填写表单结束放弃提交同意重填(退回)不同意完成外部响应发送支付信息接收支付成功响应(外部 WS 触发该流程)三、PHP 设计运行的函数由结点在设计时候决定,如果没有设定,就使用默认的函数。利用了PHP 语言的以下特性:使用前可以用 method_exists 来检查。 工作流工作流 PHP 实现思路实现思路 WorkflowService.php WorkflowService $defination$proc

3、ess $node $thread $input 用户输入的和流程有关的变量list_defination() init_process(defination_id) global user; 取得$defination,得到业务的 handler,例如 WorkflowProposalHandler建立$process 行记录 start_process() 调用 WorkflowProposalHandler-start($process)/新建业务对象,并把业务类的参数例如 proposal_id 放到$processcontext里面init_thread(1); /默认调用第一个结点

4、 list_ my_thread () global user; init_thread(node_index) 取得$node 取得$process 修改$process 为运行到当前结点 Switch($nodenode_type) Case 1: 人工决策建立$threadWorkflowProposalHandler- init_function ($process,$node,$thread)发送提醒 Case 2: 自动处理建立$threadWorkflowProposalHandler- init_function ($process,$node,$thread)调用 run_t

5、hread(thread_id) Case 3: 等待外部响应建立$threadWorkflowProposalHandler- init_function ($process,$node,$thread) Case 4: 分支取得所有分支的子结点init_thread(子结点) Case 5: 汇总:取得所有前结点,如果所有前结点的 Thread 都结束了,调出下一结点调用 init_thread(子结点) Case 6: 结束:直接结束进程 processend_process()run_thread(thread_id) 取得$node 取得$process 取得$threadSwitc

6、h($nodenode_type) Case 1: 人工决策修改$thread 为已接收WorkflowProposalHandler- run_function ($process,$node,$thread) 显示表单 Case 2: 自动处理修改$thread 为已接收$next_node_id=WorkflowProposalHandler- run_function ($process,$node,$thread)调用 transit_thread(thread_id, $next_node_id) Case 3: 等待外部响应修改$thread 为已接收$next_node_id=

7、WorkflowProposalHandler- run_function ($process,$node,$thread)transit_thread(thread_id, $next_node_id) Case 4: 分支 Case 5: 汇总: Case 6: 结束: save_thread(thread_id) /保存结点数据 取得$node 取得$process 取得$threadSwitch($nodenode_type)Case 1: 人工决策WorkflowProposalHandler- save_function ($process,$node,$thread) 保存表单

8、WorkflowProposalHandler- run_function ($process,$node,$thread) 显示表单 Case 2: 自动处理 Case 3: 等待外部响应 Case 4: 分支 Case 5: 汇总: Case 6: 结束: transit_thread(thread_id, $next_node_id) 取得$node取得$process 取得$threadSwitch($nodenode_type)Case 1: 人工决策WorkflowProposalHandler-transit_function($process,$node,$thread,$ne

9、xt_node_id) 修改$thread 为已完成If($next_node_id list_defination() case start_process : 启动参数:defination_idWorkflowService-init_process(defination_id) WorkflowService-start_process()case list_ my_thread : 待处理的列表WorkflowService-list_ my_thread()case run_thread : 参数:thread_idWorkflowService-run_thread(thread

10、_id) case save_thread :参数:thread_id把 input 收集起来(所有的变量以 f_ 开头) ,赋给 WorkflowService 的 Input,另外还要获得 thread_idWorkflowService-save_thread(thread_id)case transit_thread :参数:thread_id 把 input 收集起来,赋给 WorkflowService 的 Input,另外还要获得 thread_id $next_node_id = 得到用户选择的下一结点 id WorkflowService- transit _thread(t

11、hread_id,$next_node_id) case list_my_process: 所有我发起的流程 case list_all_process: 所有我发起的流程 case view_process : 在其它程序中初始化流程 1 先自行建立好业务表单 2WorkflowService-init_process(defination_id)3 把建好的业务表单的 ID 放在 process 的 context 里面 4WorkflowService-init_thread(1) WorkflowService-transit_thread(1,2) 通过手动调用把前面的流程过掉 外部服务继续流转流程(只用于自动流程) 1 把 input 收集起来,赋给 WorkflowService 的 Input,另外还要获得 thread_id 2 WorkflowService-run_thread(thread_id)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号