370 likes | 580 Views
XBPM 基础培训系列. 用 XBPM 开发工单. 余红明. 大纲. 引例 认识开发环境 相关知识点介绍 案例实现 高级应用介绍 参考文档. 引例. 例子:出差借款申请. 员工出差前,可以申请出差补贴及住宿等费用。 申请流程需经 主管 , 经理 , 财务 审核,如借款金额大于 5000 ,需要经理审批。 申请成功,系统打款,并邮件通知相关人 申请失败,邮件通知申请人. 需求分析 UC. 明确业务数据 申请人,联系方式,出差地点,日期范围,借款金额,出差事务详情。 申请页面 审批页面 查看页面 处理记录列表. 流程图.
E N D
XBPM基础培训系列 用XBPM开发工单 余红明
大纲 • 引例 • 认识开发环境 • 相关知识点介绍 • 案例实现 • 高级应用介绍 • 参考文档
例子:出差借款申请 • 员工出差前,可以申请出差补贴及住宿等费用。 • 申请流程需经主管,经理,财务审核,如借款金额大于5000,需要经理审批。 • 申请成功,系统打款,并邮件通知相关人 • 申请失败,邮件通知申请人
需求分析UC • 明确业务数据 • 申请人,联系方式,出差地点,日期范围,借款金额,出差事务详情。 • 申请页面 • 审批页面 • 查看页面 • 处理记录列表
相关插件 • XBPM插件 • http://core-sys-dept.alibaba-inc.com:9999/eclipse_plugin/xbpm • Jtester插件 • http://beust.com/eclipse/ • XBPM插件使用 • 如图 2. 流程图设计 1.新建流程定义
相关Jar包 • alibaba\crm\bpm\bpmprocess • 流程相关 • alibaba\crm\bpm\bpmplugin-core • 规则引擎相关 • 依赖 • baza产品 • JBPM4
Spring配置 • bpm-plugin-bean.xml • 定义了xbpm相关service、bo的bean • biz-data-source.xml • 定义了bpmDao、jarurl • sqlmap-config.xml • xbpm相关sqlmap
数据库表介绍 1 0…* 0…* 1 0…* 新 0…1
回顾 • 节点 • 连接 • 事件 • 上下文 • 常用API 似乎还缺少点什么? 表单!
相关属性/上下文 • path • 开始节点、任务 • 用于指定页面路径 • alias • 用于在展示时查找页面路径 • $BIZ_SYSTEM_TYPE • approve.srv_customize
申请页面 • url格式 • vodka/…/xxx.xul?PROC_NAME=XBpm_LeaveDemo&SYSTEM_TYPE=approve.srv_customize • 2个参数必填!其余可选 • Prepare • 预定义CustomizeNewAction • 也可自己实现 • 负责models初始化、提供创建流程接口 • models • PROCINST • BUSIDATA • 若自己实现prepare,可自定义其他models
申请页面xul编写 • 业务数据表单绑定到BUSIDATA这个model • 编写save函数,如 <form name='BusiDataForm' binding='BUSIDATA' sceneId='${#request:bpmSceneId}'></form> function save(){ varprocInstObj = PROCINST.getRow();//流程数据 varBusiDataObj = BusiDataForm.getRow();//业务数据 varparamsList=[BusiDataObj]; shy.confirm('${#msg:xbpm_committask}', function(val){ if( val ){//创建流程 vardatainfo = shy.rpc.createProcess(procInstObj,BusiDataObj,paramsList); shy.alert(datainfo.message,function(){ if(datainfo.flag=='true'){window.close();} }); }}) };
创建流程规范 • 朱磊 - 通用创建流程接口设计及使用 • http://b2b-doc.alibaba-inc.com/pages/viewpage.action?pageId=42934289 • 提供统一接口 • 提供业务数据到xbpm业务数据的管理与转换功能
审批页面 • url格式(统一) • vodka/…/busidata.xbpmpage?INSTS=123,customize,456,XBpm_LeaveDemo.XBpm_LeaveDemo_Director • Prepare • 预定义CustomizeBaseAction • 预扩展CustomizeDataExtAction、CustomizeDataAllAction • 可自扩展 • 负责审批页面models的初始化,提供审批接口
审批页面的models • CustomizeBaseAction • XBpmJsonData: BUSIDATA_、 ACTINST_ • XBpmPvgInfo • CustomizeDataExtAction • XBpmOutTrans • XBpmJsonData: BUSIDATA_、 ACTINST_ 、PROCINST_ • CustomizeDataAllAction • XBpmJsonData: BUSIDATA_、ACTINST_ 、PROCINST_、ACTINSTEXT_
审批页面如何操作数据 • 在prepare中构造models • 绑定XBpmJsonData到xul页面的form • 绑定model中的字段到页面元素 • 注意字段遵循的命名规范 • 调用审批接口 • 将model还原成流程对象 //将Bean转换到对应的Map中 com.alibaba.xbpm.util.BpmConvertDataUtil.getXBpmMap(Object, HashMap, String) //从Map中获取对应的Bean com.alibaba.xbpm.util.BpmConvertDataUtil.getXBpmBean(Map<String, Object>, Object, String)
sceneId场景模式 • 在展示审批/详情页面时指定某个模块的显示方式 • 当无权限处理任务时起作用 • bpmSceneId:用于面板的显示控制 • btSceneId:用于按钮的显示控制 • view_readonly只读 • view_text纯文本 • view_hidden隐藏 • view_not_render不渲染
其他 • 查看详情页面 • 复用审批页面 • 使用senseId控制面板显示状态,btSceneId=view_hidden,bpmSceneId=view_readonly • 查看历史流程 • 复用审批页面,查询历史表 • url参数xdatatype=his • 处理记录列表 • 参考现有页面
别忘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'/>
案例实现 分支:http://svn.alibaba-inc.com/repos/crm/vodka/branches/20100915_15263_1
步骤 • 设计流程图 • 设置path、alias属性 • process\XBpm_LeaveDemo • 编写页面 • 申请(xul\bpm\leave_new.xul) • 审批(xul\bpm\leave_approve.xul)
打包、部署 • 打包 • 将流程定义的3个文件打包成zip格式的包,后缀改成parx • 部署 • 页面:vodka/admin/deployProcess.htm • 查看部署结果 • select * from bpm_lob l where l.procdef_name=?
测试、执行 • 提交申请 • vodka/bpm/leave_new.xul?PROC_NAME=XBpm_LeaveDemo&SYSTEM_TYPE=approve.srv_customize • 审批 • vodka/approve/xbpm_task.jsp
高级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>),修改上下文
BPM_ACTINST_EXT表 • 存在procinst,actinst和扩展字段,可以用来表明某个节点相关的数据,可以在不同业务中同一字段不同含义。 • 可用作业务数据表(当actinst=0)
CustomizeBaseAction • Prepare • doApprove • doRead • 审阅工单 • addSubActInst • 转移工单
更复杂的AclmServiceDataAction • Prepare • doApproveOperation • doReadOperation • doProcessManualTask • doSaveSrvNote2Survey • 还有很多…… 仅供参考!遇到复杂业务时可自行扩展
任务类型 • BPM_TRANSFER • 转交任务taskType • BPM_BETRANSFER • 被转交的任务taskType • BPM_TIMER • 定时钟任务taskType • BPM_BACK • 退回任务taskType • BPM_BEENTERNODE • 被重新进入节点结束的任务taskType
工单状态 • STATE_NEW = "new“ • 已创建 • STATE_ASSIGN = "assign“ • 已分发 • STATE_TAKEOVER = "takeover“ • 已接手 • STATE_TEMPSAVE = "tempsave“ • 已暂存 • STATE_FINISH = "finish“ • 已完成 • STATE_CANCEL = "cancel“ • 已取消
参考文献 • 张惠华 - 个性化工单开发总结 • 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