结合业务查询-分布式

阅读原文

场景描述

BPS工作流默认客户端界面中包括"待办任务列表"、"已办任务列表"等纯流程信息,而为了业务操作人员更全面了解任务相关的业务信息,往往需要在任务列表中显示工作任务相关的业务属性信息。

本场景适用业务表和流程表不在同一个数据源的部署模式,解决不同数据源情况下流程表和业务表联合查询的问题,基本原理是BPS引擎运行时会将业务表的数据保存到流程库的冗余表中用来实现结合业务查询。

案例简介

业务场景描述:

在报销流程中,审批人登录系统后能结合工作项和报销业务表查询到待审批的报销单信息,查询条件为报销人,如下图所示:

场景实现(关键步骤描述)

  1. 报销业务表
    ?
    create table EXPENSEINFO
    (
       EXPID          NUMERIC( 18 ) not null ,
       PROCESSINSTID  NUMERIC( 18 ) not null ,
       EXPNAME        VARCHAR( 20 ) not null ,
       EXPMONEY       NUMBER not null ,
       REASON         VARCHAR( 255 ),
       ISBUDGETITEM   CHAR( 1 ),
       AUDITOR        VARCHAR( 20 )
      );
    alter table EXPENSEINFO  add constraint P_EXP primary key (EXPID);
    -- Add comments to the columns
    comment on column EXPENSEINFO.EXPID
       is '报销单编号' ;
    comment on column EXPENSEINFO.PROCESSINSTID
       is '流程实例ID' ;
    comment on column EXPENSEINFO.EXPNAME
       is '报销人' ;
    comment on column EXPENSEINFO.EXPMONEY
       is '报销金额' ;
    comment on column EXPENSEINFO.REASON
       is '报销原因' ;
    comment on column EXPENSEINFO.ISBUDGETITEM
       is '是否是预算内项目' ;
    comment on column EXPENSEINFO.AUDITOR
       is '财务审阅人' ;
  2. 配置映射关系WFBizMapping,流程表同业务表在不同的数据源时,需要将业务数据同步冗余到流程库中的冗余表,首先要手工配置业务表与BPS冗余表之间的字段映射,如下图所示:
  3. 插入业务数据,创建流程实例时需要输入业务数据。引擎会根据映射关系将业务数据写到WFBizInfo冗余表中,关键代码如下:
    ?
    String tableName= "EXPENSEINFO" ;
                 Map <String, Object> bizInfo = new HashMap <String, Object>();
                 bizInfo.put( "EXPNAME" , expenseInfoForm.getExpname());
                 bizInfo.put( "EXPMONEY" , expenseInfoForm.getExpmoney());
         mng.startProcessInstanceWithBizInfo(processInstID, false , new Object[ 0 ], tableName, bizInfo);
  4. 结合业务查询关键代码
    ?
    public List<WFWorkItem> getUserTasksbizInfo(User user,ExpenseInfoForm expenseInfoForm, PageCond pageCond)
                 throws WFServiceException {
                     List<WFWorkItem> tasklist = null ;
             List<String> bizBindList = new ArrayList<String>();
             bizBindList.add(expenseInfoForm.getExpname());
                     List<String> wiBindList = new ArrayList<String>();
                     //为Expmoney这一项字段的查询设置一个条件,如:插入的Expmoney为200,则在这里分别设置199和201
                     bizBindList.add(expenseInfoForm.getExpmoney- 1 );
                     bizBindList.add(expenseInfoForm.getExpmoney+ 1 );
             //获取工作列表查询器接口
                       IBPSServiceClient client = BPSServiceClientFactory. getDefaultClient();
             IWFWorklistQueryManager workListMng = client.getWorklistQueryManager();
     
             tasklist = workListMng.queryPersonWorkItemsWithBizInfo(user.getUserId(), "ALL" , "ALL" , "EXPENSEINFO" , null ,
      " EXPNAME=? and EXPMONEY between ? and ?" , wiBindList, bizBindList, pageCond);
             return tasklist;
         }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值