`
redxun
  • 浏览: 295875 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Activiti的流程如何与外部业务进行数据交互

阅读更多

如何通过流程审批与外部表单实现对接

 

在流程的审批过程中,我们有很多业务是需要进行流程的审批的,但实际上这些业务在大部分处理上跟流程上是无关的,他们只是有部分业务的数据需要参与审批的动作而已,如:

销 售采购合同,制订采购合同是需要走审批流程,一旦审批完成后,这个采购合同后续的执行是则是由采购合同模块本身的处理来完成,后续跟审批操作没有多太关 系。在系统设计上,我们需要开发一个单独的模块进行采购合同的处理,但我们又希望他们有些信息是需要参与审批,并且在审批完成后,能完成对采购合同进行修 改。

为了更形象说明这个整合开发原理,我们举一个简单的例子:如供应商入库,前期的供应商信息我们是需要审批的,一旦审批通过后,我们后续 的其他业务模块就可以使用供应商的信息。为此我们基于activiti进行了了灵活的处理,本文先介绍其中一方便快捷的方法,本文的前提就是供应商管理模块已经存在。我们 需要在供应商表中加一个字段 act_inst_id_,用于存储Activiti的流程实例Id,用于后续追踪供应商的审批过程。

 

步骤一

根据供应商的信息制作在线表单,如:
1.png

步骤二

编写供应商的数据处理接口

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);
 }
}

}

 

步骤三

配置流程定义及流程解决方案,实现以下几点,特别是节点上的数据配置处理

关联审批表单

关联审批人员

在节点上配置调用供应商的数据处理接口

 

 

 

3-1.png

4.png

配置完成后,流程启动在审批过程中,就会调用对应的供应商接口实现数据的同步处理了。

步骤四

若我们需要在供应商管理模块中,点添加的时候,就可以实现启动供应商审批流程,这时我们需要做一点配置。在全局的模块流程绑定模块中,配置供应商模块中的流程,同时在供应商添加管理模块中,调用这个配置处理。如下:

5.png

在供应商管理模块中增加以下调用,用来替换原来的添加处理即可,同时增加查看流程实例的信息调用:

 

   //处理添加
       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
        });
       }

 

 

这时我们在这个模块中添加供应商时,即可以显示供应商的填写流程申请入口。如下所示:

6.png

同时在供应商管理中可以看到流程审批的相关信息

7.png

最终的使用效果如下所示:

http://www.redxun.cn:8020/saweb/login.jsp

 

分享到:
评论

相关推荐

    基于jbpm与activiti的工作流平台技术架构介绍

    •数据访问层Dao: 负责与数据库交互 •业务处理层Service: 负责系统的所有业务逻辑处理 •数据控制层Controller: 负责系统的页面数据准备及跳转处理 •视图层View :负责数据的展示处理 整合的开源技术 1.Spring...

    JAVA上百实例源码以及开源项目源代码

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    java开源包1

    利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...

    java开源包11

    利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...

    java开源包2

    利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...

    java开源包3

    利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...

    java开源包6

    利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...

    java开源包5

    利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...

    java开源包10

    利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...

    java开源包4

    利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...

    java开源包8

    利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...

    java开源包7

    利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...

    java开源包9

    利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...

    java开源包101

    利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...

    Java资源包01

    利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...

    JAVA上百实例源码以及开源项目

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

Global site tag (gtag.js) - Google Analytics