用 xbpm 开发工单

37
用 XBPM 用用用用 余余余 XBPM 用用用用用用

Upload: urania

Post on 04-Jan-2016

245 views

Category:

Documents


0 download

DESCRIPTION

XBPM 基础培训系列. 用 XBPM 开发工单. 余红明. 大纲. 引例 认识开发环境 相关知识点介绍 案例实现 高级应用介绍 参考文档. 引例. 例子:出差借款申请. 员工出差前,可以申请出差补贴及住宿等费用。 申请流程需经 主管 , 经理 , 财务 审核,如借款金额大于 5000 ,需要经理审批。 申请成功,系统打款,并邮件通知相关人 申请失败,邮件通知申请人. 需求分析 UC. 明确业务数据 申请人,联系方式,出差地点,日期范围,借款金额,出差事务详情。 申请页面 审批页面 查看页面 处理记录列表. 流程图. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 用 XBPM 开发工单

用 XBPM 开发工单

余红明

XBPM 基础培训系列

Page 2: 用 XBPM 开发工单

大纲• 引例• 认识开发环境• 相关知识点介绍• 案例实现• 高级应用介绍• 参考文档

Page 3: 用 XBPM 开发工单

引例

Page 4: 用 XBPM 开发工单

例子:出差借款申请• 员工出差前,可以申请出差补贴及住宿等

费用。• 申请流程需经主管,经理,财务审核,如

借款金额大于 5000 ,需要经理审批。• 申请成功,系统打款,并邮件通知相关人• 申请失败,邮件通知申请人

Page 5: 用 XBPM 开发工单

需求分析 UC

• 明确业务数据– 申请人,联系方式,出差地点,日期范围,借

款金额,出差事务详情。• 申请页面• 审批页面• 查看页面• 处理记录列表

Page 6: 用 XBPM 开发工单

流程图

Page 7: 用 XBPM 开发工单

认识开发环境(以 vodka 为例)

Page 8: 用 XBPM 开发工单

相关插件• XBPM 插件

– http://core-sys-dept.alibaba-inc.com:9999/eclipse_plugin/xbpm• Jtester 插件

– http://beust.com/eclipse/• XBPM 插件使用

• 如图

1. 新建流程定义

2. 流程图设计

Page 9: 用 XBPM 开发工单

相关 Jar 包• alibaba\crm\bpm\bpmprocess– 流程相关

• alibaba\crm\bpm\bpmplugin-core– 规则引擎相关

• 依赖• baza 产品• JBPM4

Page 10: 用 XBPM 开发工单

Spring 配置• bpm-plugin-bean.xml– 定义了 xbpm 相关 service 、 bo 的 bean

• biz-data-source.xml– 定义了 bpmDao 、 jarurl

• sqlmap-config.xml– xbpm 相关 sqlmap

Page 11: 用 XBPM 开发工单

数据库表介绍

10…*

1

0…*

0…*

0…1新

Page 12: 用 XBPM 开发工单

相关知识点介绍

Page 13: 用 XBPM 开发工单

回顾• 节点• 连接• 事件• 上下文• 常用 API

似乎还缺少点什么?

表单!

Page 14: 用 XBPM 开发工单

相关属性 / 上下文• path– 开始节点、任务– 用于指定页面路径

• alias– 用于在展示时查找页面路径

• $BIZ_SYSTEM_TYPE– approve.srv_customize

Page 15: 用 XBPM 开发工单

申请页面• url 格式– vodka/…/xxx.xul?

PROC_NAME=XBpm_LeaveDemo&SYSTEM_TYPE=approve.srv_customize

– 2 个参数必填!其余可选• Prepare– 预定义 CustomizeNewAction – 也可自己实现– 负责 models 初始化、提供创建流程接口

• models– PROCINST– BUSIDATA– 若自己实现 prepare ,可自定义其他 models

Page 16: 用 XBPM 开发工单

申请页面 xul 编写• 业务数据表单绑定到 BUSIDATA 这个 model

• 编写 save 函数,如function save(){var procInstObj = PROCINST.getRow();// 流程数据var BusiDataObj = BusiDataForm.getRow();// 业务数据var paramsList=[BusiDataObj];shy.confirm('${#msg:xbpm_committask}', function(val){ if( val ){// 创建流程 var datainfo = shy.rpc.createProcess(procInstObj,BusiDataObj,paramsList); shy.alert(datainfo.message,function(){ if(datainfo.flag=='true'){window.close();} }); }})};

<form name='BusiDataForm' binding='BUSIDATA' sceneId='${#request:bpmSceneId}'></form>

Page 17: 用 XBPM 开发工单

创建流程规范• 朱磊 - 通用创建流程接口设计及使用– http://b2b-doc.alibaba-inc.com/pages/viewpage.a

ction?pageId=42934289• 提供统一接口• 提供业务数据到 xbpm 业务数据的管理与转

换功能

Page 18: 用 XBPM 开发工单

审批页面• url 格式(统一)– vodka/…/busidata.xbpmpage?

INSTS=123,customize,456,XBpm_LeaveDemo.XBpm_LeaveDemo_Director

• Prepare– 预定义 CustomizeBaseAction– 预扩展 CustomizeDataExtAction 、

CustomizeDataAllAction– 可自扩展– 负责审批页面 models 的初始化,提供审批接口

Page 19: 用 XBPM 开发工单

审批页面的 models• CustomizeBaseAction– XBpmJsonData : BUSIDATA_ 、 ACTINST_– XBpmPvgInfo

• CustomizeDataExtAction– XBpmOutTrans– XBpmJsonData : BUSIDATA_ 、

ACTINST_ 、 PROCINST_• CustomizeDataAllAction– XBpmJsonData : BUSIDATA_ 、

ACTINST_ 、 PROCINST_ 、 ACTINSTEXT_

Page 20: 用 XBPM 开发工单

审批页面如何操作数据• 在 prepare 中构造 models• 绑定 XBpmJsonData 到 xul 页面的 form• 绑定 model 中的字段到页面元素– 注意字段遵循的命名规范

• 调用审批接口– 将 model 还原成流程对象

// 将 Bean 转换到对应的 Map 中com.alibaba.xbpm.util.BpmConvertDataUtil.getXBpmMap(Object, HashMap, String)

// 从 Map 中获取对应的 Beancom.alibaba.xbpm.util.BpmConvertDataUtil.getXBpmBean(Map<String, Object>, Object, String)

Page 21: 用 XBPM 开发工单

sceneId 场景模式

• view_readonly 只读 • view_text 纯文本 • view_hidden 隐藏 • view_not_render 不渲染

• 在展示审批 / 详情页面时指定某个模块的显示方式

• 当无权限处理任务时起作用• bpmSceneId :用于面板的显示控制• btSceneId :用于按钮的显示控制

Page 22: 用 XBPM 开发工单

其他• 查看详情页面– 复用审批页面– 使用 senseId 控制面板显示状

态, btSceneId=view_hidden , bpmSceneId=view_readonly

• 查看历史流程– 复用审批页面,查询历史表– url 参数 xdatatype=his

• 处理记录列表– 参考现有页面

Page 23: 用 XBPM 开发工单

别忘 Spirng 注册• <bean name='/bpm/leave_new.xul.do'

class='com.alibaba.xbpm.web.xbpmaction.CustomizeNewAction' scope='singleton'/>

• <bean name='/bpm/leave_approve.xul.do' class='com.alibaba.xbpm.web.xbpmaction.CustomizeDataExtAction' scope='singleton'/>

Page 24: 用 XBPM 开发工单

案例实现

分支: http://svn.alibaba-inc.com/repos/crm/vodka/branches/20100915_15263_1

Page 25: 用 XBPM 开发工单

确定业务字段

Bpm_busi_data 表字段 业务 含义requestPersonname 申请人col18 手机col10 出差地点col15 开始日期col16 结束日期col1 借款金额requestNote 出差详情描述

Page 26: 用 XBPM 开发工单

步骤• 设计流程图– 设置 path 、 alias 属性– process\XBpm_LeaveDemo

• 编写页面– 申请( xul\bpm\leave_new.xul )– 审批( xul\bpm\leave_approve.xul )

Page 27: 用 XBPM 开发工单

打包、部署• 打包– 将流程定义的 3 个文件打包成 zip 格式的包,后缀改成 parx

• 部署– 页面 :vodka/admin/deployProcess.htm

• 查看部署结果– select * from bpm_lob l where l.procdef_name=?

Page 28: 用 XBPM 开发工单

测试、执行• 提交申请– vodka/bpm/leave_new.xul?

PROC_NAME=XBpm_LeaveDemo&SYSTEM_TYPE=approve.srv_customize

• 审批– vodka/approve/xbpm_task.jsp

Page 29: 用 XBPM 开发工单

高级应用介绍

Page 30: 用 XBPM 开发工单

高级 API

• ProcessService– getContextValue(String, Long, String) ,根据流程实例和

key 名查询上下文表,这个方法只查 bpm_variable 表

• ActivityService– processJump(BpmActInst, String, Map<String,

Object>) ,会在内存生成连接– nodeEnter(BpmActInst, String, Map<String, Object>,

boolean) ,直接进入目标节点– changeContextByProcInstId(Long, Map<String,

Object>) ,修改上下文

Page 31: 用 XBPM 开发工单

BPM_ACTINST_EXT 表• 存在 procinst,actinst和扩展字段,可以用来

表明某个节点相关的数据,可以在不同业务中同一字段不同含义。

• 可用作业务数据表(当 actinst=0 )

Page 32: 用 XBPM 开发工单

CustomizeBaseAction

• Prepare• doApprove

• doRead– 审阅工单

• addSubActInst– 转移工单

Page 33: 用 XBPM 开发工单

更复杂的 AclmServiceDataAction

• Prepare• doApproveOperation• doReadOperation

• doProcessManualTask• doSaveSrvNote2Survey• 还有很多……

仅供参考!遇到复杂业务时可自行

扩展

Page 34: 用 XBPM 开发工单

任务类型• BPM_TRANSFER – 转交任务 taskType

• BPM_BETRANSFER – 被转交的任务 taskType

• BPM_TIMER – 定时钟任务 taskType

• BPM_BACK – 退回任务 taskType

• BPM_BEENTERNODE – 被重新进入节点结束的任务 taskType

Page 35: 用 XBPM 开发工单

工单状态• STATE_NEW = "new“

– 已创建• STATE_ASSIGN = "assign“

– 已分发• STATE_TAKEOVER = "takeover“

– 已接手• STATE_TEMPSAVE = "tempsave“

– 已暂存• STATE_FINISH = "finish“

– 已完成• STATE_CANCEL = "cancel“

– 已取消

Page 36: 用 XBPM 开发工单

参考文献• 张惠华 - 个性化工单开发总结

– http://b2b-doc.alibaba-inc.com/pages/viewpage.action?pageId=42056794

• 章向明 - VODKA 中 XBPM动态表单 customize 模式配置说明– http://b2b-doc.alibaba-inc.com/pages/viewpage.action?pageId=41910750

• 朱磊 - 通用创建流程接口设计及使用– http://b2b-doc.alibaba-inc.com/pages/viewpage.action?pageId=42934289

• 文档中心 -BPM ( X-BPM 开发使用手册 .doc )– http://b2b-doc.alibaba-inc.com/pages/viewpage.action?pageId=13942923

• 工单开发手册– http://b2b-doc.alibaba-inc.com/pages/viewpage.action?pageId=40564883

Page 37: 用 XBPM 开发工单

Q&A