如何通过流程审批与外部表单实现对接
在流程的审批过程中,我们有很多业务是需要进行流程的审批的,但实际上这些业务在大部分处理上跟流程上是无关的,他们只是有部分业务的数据需要参与审批的动作而已,如:
销 售采购合同,制订采购合同是需要走审批流程,一旦审批完成后,这个采购合同后续的执行是则是由采购合同模块本身的处理来完成,后续跟审批操作没有多太关 系。在系统设计上,我们需要开发一个单独的模块进行采购合同的处理,但我们又希望他们有些信息是需要参与审批,并且在审批完成后,能完成对采购合同进行修 改。
为了更形象说明这个整合开发原理,我们举一个简单的例子:如供应商入库,前期的供应商信息我们是需要审批的,一旦审批通过后,我们后续 的其他业务模块就可以使用供应商的信息。为此我们基于activiti进行了了灵活的处理,本文先介绍其中一方便快捷的方法,本文的前提就是供应商管理模块已经存在。我们 需要在供应商表中加一个字段 act_inst_id_,用于存储Activiti的流程实例Id,用于后续追踪供应商的审批过程。
步骤一
根据供应商的信息制作在线表单,如:
步骤二
编写供应商的数据处理接口
1.通过审批表单的数据来创建供应商
实现流程在启动时创建时调用供应商的创建接口,实现接口ProcessStartAfterHandler即可。
2.通过审批表单更新供应商的数据
实现TaskAfterHandler接口即可
3.通过审批表单的审批触发供应商数据的审批状态
实现ProcessEndHandler即可。
代码说明
以下是我们把以上三个实现均放在CrmProviderManager中来实现,代码如下所示:
@Service public class CrmProviderManager extends BaseManager<CrmProvider> implements ProcessStartAfterHandler,TaskAfterHandler,ProcessEndHandler{ /** * 通过Json数据创建供应商 * @param json * @param bpmInstId * @return */ public CrmProvider createFromJson(String json,String actInstId){ CrmProvider crmProvider=JSON.parseObject(json, CrmProvider.class); //关联流程实例ID crmProvider.setActInstId(actInstId); crmProviderDao.create(crmProvider); return crmProvider; } /** * 通过Json更新供应商的值 * @param json * @param busKey */ public void updateFromJson(String json,String busKey){ CrmProvider orgProvider=get(busKey); if(orgProvider==null) return; CrmProvider newProvider=JSON.parseObject(json,CrmProvider.class); try { BeanUtil.copyNotNullProperties(orgProvider, newProvider); } catch (Exception e) { e.printStackTrace(); } crmProviderDao.update(orgProvider); } /** * 1.通过流程实例创建完成后通过表单的数据创建供应商信息 */ @Override public String processStartAfterHandle(String json, String actInstId) { CrmProvider crmProvider=createFromJson(json,actInstId); crmProvider.setStatus(MStatus.INIT.name()); //返回业务主键给流程实例 return crmProvider.getProId(); } /** * 2.任务审批完成时调用,用于更新供应商的数据 */ @Override public void taskAfterHandle(IExecutionCmd cmd, String nodeId, String busKey) { updateFromJson(cmd.getJsonData(),busKey); } /** * 3.流程成功审批完成时,对供应商的审批状态进行更新 */ @Override public void endHandle(BpmInst bpmInst) { String busKey=bpmInst.getBusKey(); CrmProvider crmProvider=crmProviderDao.get(busKey); if(crmProvider!=null){ crmProvider.setStatus(MStatus.ENABLED.name()); crmProviderDao.update(crmProvider); } } }
步骤三
配置流程定义及流程解决方案,实现以下几点,特别是节点上的数据配置处理
关联审批表单
关联审批人员
在节点上配置调用供应商的数据处理接口
配置完成后,流程启动在审批过程中,就会调用对应的供应商接口实现数据的同步处理了。
步骤四
若我们需要在供应商管理模块中,点添加的时候,就可以实现启动供应商审批流程,这时我们需要做一点配置。在全局的模块流程绑定模块中,配置供应商模块中的流程,同时在供应商添加管理模块中,调用这个配置处理。如下:
在供应商管理模块中增加以下调用,用来替换原来的添加处理即可,同时增加查看流程实例的信息调用:
//处理添加
function _add(){
//检查是否存在流程配置,若没有,则启用本地的默认配置
_ModuleFlowWin({
title:'供应商入库申请',
moduleKey:'CRM_PROVIDER',
//failCall:add,
success:function(){
grid.load();
}
});
}
//查看流程审批实例信息
function checkDetail(actInstId){
_OpenWindow({
title:'审批明细',
width:800,
height:480,
url:__rootPath+'/bpm/core/bpmInst/get.do?actInstId='+actInstId
});
}
这时我们在这个模块中添加供应商时,即可以显示供应商的填写流程申请入口。如下所示:
同时在供应商管理中可以看到流程审批的相关信息
最终的使用效果如下所示:
http://www.redxun.cn:8020/saweb/login.jsp
相关推荐
综上所述,"oa项目中的activiti流程demo"是一个全面展示Activiti在OA项目中应用的实例,涵盖了流程定义、任务管理、业务逻辑集成、UI交互、监控和优化等多个方面,为开发者提供了宝贵的实践参考。通过深入理解并运用...
通过学习和实践这个示例,开发者不仅可以掌握Activiti的基本使用,还能了解到如何将流程引擎与实际业务场景相结合,提升企业的业务流程自动化水平。同时,Activiti的灵活性和扩展性也使其成为企业级应用开发的热门...
6. **服务调用**:Activiti 可以与外部服务进行交互,通过服务任务(Service Task)调用业务逻辑、数据库操作或其他系统接口。这使得 Activiti 能够无缝集成到现有的企业架构中。 7. **监控与审计**:Activiti 提供...
5. **表单集成**:Activiti允许集成自定义表单,提供业务数据输入和展示。可以通过Form Key与流程中的表单字段关联,实现数据的双向绑定。 6. **变量管理**:在流程执行过程中,可以设置和获取流程变量,这些变量...
源码中可以研究表单的定义、渲染和数据交互。 6. **服务任务与工作流集成**:Activiti 提供了服务任务,可以调用外部系统或服务。源码中可以看到服务任务的调用机制,以及与外部系统集成的接口设计。 7. **流程...
9. **流程审计与历史数据**:探讨如何利用Activiti的审计功能,收集流程执行的历史数据,为业务分析和决策提供依据。 10. **流程优化与最佳实践**:分享在实际项目中使用Activiti的经验和技巧,提出一些优化流程...
3. **Service Task与业务逻辑集成**:在示例中,你将看到如何通过Service Task将Activiti流程与自定义业务逻辑结合,例如调用外部服务或者执行复杂的业务规则。 4. **表单与用户界面集成**:Activiti支持与前端UI的...
书中会讲解如何设计和集成自定义表单,以及与后端系统的数据交互,如数据库操作和外部服务调用。 7. **监听器与事件处理**:学习如何使用监听器来扩展Activiti的行为,例如在流程的特定阶段触发自定义逻辑,或者...
这个文档《Activiti流程文件细解》深入探讨了Activiti流程定义的关键元素,帮助我们理解如何设计和实现复杂的业务流程。 首先,我们要了解的是`<process>`标签,它是流程定义的基本单位。在这个例子中,`请假流程-...
6. **服务调用**:Activiti可与外部系统进行交互,例如调用Web服务、数据库操作或其他企业应用接口。 7. **历史记录**:提供对流程实例和任务的历史记录,便于跟踪和审计。 8. **安全性与权限**:通过角色和权限...
6. **表单支持**:通过表单引擎,可以将业务数据与流程紧密结合。 7. **持久化机制**:Activiti使用关系数据库存储流程实例和相关数据,确保数据安全。 8. **API与服务**:提供丰富的Java API和RESTful服务接口,...
3. **服务任务与集成**:Activiti 可以与外部系统和服务进行交互,例如通过 REST API 或 SOAP Web 服务。在 `WEB-INF` 目录下,可能包含用于配置这些服务任务的 XML 文件,如 `processes.xml`,它们定义了服务调用的...
总结,Activiti 6.x 用户指南是开发者和流程管理人员的重要参考资料,涵盖了从安装配置到实际应用的全方位指导,对于理解和使用 Activiti 进行业务流程自动化具有极大价值。通过深入学习和实践,可以充分利用 ...
6. **流程变量与数据交互**:学习如何设置、获取流程变量,以及如何将这些变量与外部系统(如数据库或Web服务)的数据交互。 7. **动态流程变更**:了解如何在运行时通过API动态改变流程实例的行为,比如修改任务...
- **Database Integration (DB)**:Activiti Engine需要与数据库进行交互,存储流程定义、实例状态和其他元数据。 **2. BPMN 2.0标准** - ****:根元素,包含所有流程定义相关的数据。 - ****:定义了一个具体的...
总结来说,Activiti REST服务是Activiti引擎与外部系统交互的重要桥梁,它使得流程管理更加灵活和便捷。开发者应当熟悉这些接口,以便在实际工作中高效地利用Activiti实现业务流程自动化。通过深入学习和实践,我们...
8. **服务任务与API**:在流程中,服务任务通常用来调用外部业务逻辑,如调用数据库、发送邮件等。Activiti提供API让开发者注册服务任务的实现类,方便扩展流程功能。 9. **事件与信号**:事件和信号用于流程的异步...
10. **API 使用**:通过 Activiti 的 Java API 或 REST API 进行编程交互,例如启动流程、完成任务、查询数据等。 了解并掌握这些知识点,开发者就能充分利用 Activiti 6.0.0 来搭建高效且灵活的企业工作流管理系统...
这个界面使得非技术人员也能方便地与 Activiti 进行交互,例如创建和修改流程定义,启动新的流程实例,以及跟踪当前正在执行的流程。 "META-INF" 目录是 Java 应用的标准组成部分,其中包含了关于应用程序的重要元...
7. **表单与变量**:Activiti支持与业务数据的交互,表单和变量是实现这一目标的关键。用户将了解如何定义表单字段,如何使用流程变量存储和传递数据。 8. **事件与信号**:这部分将介绍流程中的事件和信号,如中断...