结合业务查询-分布式
来源:互联网 发布:dubstep软件 编辑:程序博客网 时间:2024/06/18 16:50
阅读原文
场景描述
BPS工作流默认客户端界面中包括"待办任务列表"、"已办任务列表"等纯流程信息,而为了业务操作人员更全面了解任务相关的业务信息,往往需要在任务列表中显示工作任务相关的业务属性信息。
本场景适用业务表和流程表不在同一个数据源的部署模式,解决不同数据源情况下流程表和业务表联合查询的问题,基本原理是BPS引擎运行时会将业务表的数据保存到流程库的冗余表中用来实现结合业务查询。
案例简介
业务场景描述:
在报销流程中,审批人登录系统后能结合工作项和报销业务表查询到待审批的报销单信息,查询条件为报销人,如下图所示:
场景实现(关键步骤描述)
- 报销业务表
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
'财务审阅人'
;
- 配置映射关系WFBizMapping,流程表同业务表在不同的数据源时,需要将业务数据同步冗余到流程库中的冗余表,首先要手工配置业务表与BPS冗余表之间的字段映射,如下图所示:
- 插入业务数据,创建流程实例时需要输入业务数据。引擎会根据映射关系将业务数据写到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);
- 结合业务查询关键代码
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;
}
阅读全文
0 0
- 结合业务查询-分布式
- 分布式查询
- 分布式查询
- 分布式查询
- 分布式查询
- 分布式查询
- 分布式查询
- 分布式查询
- 分布式查询
- 分布式业务系统的一致性
- 中国移动业务查询码
- 业务账号的查询
- EBS业务事件查询
- MySQL 业务查询
- MYSQL 业务查询
- rxjava2 结合retrofit2进行业务封装
- Hive结合shell脚本实现自动化业务
- 分布式查询和分布式事务
- 关于ORACLE 在windos 环境下出现ORA-12546的问题研究
- Win32串口操作的技巧
- 安装 360的 poseidon
- javascript的原生dom知识点
- alloc、init你弄懂50%了吗?
- 结合业务查询-分布式
- 使用nmon工具進行Linux性能監控
- 编程式事务与声明式事务的区别
- 欢迎关注我的微信公众号
- eclipse自动生成get、set方法的文档注释
- 红黑树 RBTreee
- 909422229_Ajax中async的属性:true与false
- cocos2d::Console::listenOnTCP(int): error: undefined reference to 'bzero'
- 23.输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。