起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8813|回复: 7

[处理中3] 事务同时控制业务库插入和流程启动可以么

[复制链接]

368

主题

793

帖子

2378

积分

金牌会员

Rank: 6Rank: 6

积分
2378
QQ
发表于 2020-5-20 08:46:31 | 显示全部楼层 |阅读模式
版本: BeX5V3.5 小版本号:
数据库: 服务器操作系统: 应用服务器:
客户端操作系统: 浏览器:
事务同时控制业务库插入和流程启动可以么

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
35910
发表于 2020-5-20 11:30:11 | 显示全部楼层

process中设置自动保存和自动启动默认的本来就是同一个事务中
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

368

主题

793

帖子

2378

积分

金牌会员

Rank: 6Rank: 6

积分
2378
QQ
 楼主| 发表于 2020-5-20 15:20:02 | 显示全部楼层
jishuang 发表于 2020-5-20 11:30
process中设置自动保存和自动启动默认的本来就是同一个事务中

我说是java后台进行,不是前台进行,后台启动流程, 就是那个ProcessUtils.startProcess,这个能控制事务么
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
35910
发表于 2020-5-20 16:20:21 | 显示全部楼层
完整的需求描述清楚,后端启动,数据在什么地方保存的?
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

368

主题

793

帖子

2378

积分

金牌会员

Rank: 6Rank: 6

积分
2378
QQ
 楼主| 发表于 2020-6-18 09:47:09 | 显示全部楼层
本帖最后由 胡屠户 于 2020-6-18 09:53 编辑
jishuang 发表于 2020-5-20 16:20
完整的需求描述清楚,后端启动,数据在什么地方保存的?

第一步,在插入数据后,需要启动多个流程,放在一个map中。
第二步,遍历循环启动流程,存在流程执行人失效的
第三步,提交事务。
以上所有都被try catch包裹,且异常中回滚

但是依旧造成,数据没插入流程启动了,显示一堆空页面

// 事务控制
                Connection conn = null;
                PreparedStatement ps = null;
                Transaction tx = new Transaction();
                // 待发流程
                Map<String, JSONObject> toStartProcessMap = new HashMap<String, JSONObject>();
                try {
                        // ================开启事务================
                        tx.begin();
                        // 打开连接
                        conn = tx.getConnection(data);
                        // 解析JSONArray字符串
                        Map<String, JSONArray> dataMap = getMapData(xmlStr);
                        Iterator<Entry<String, JSONArray>> iter = dataMap.entrySet().iterator();
                        while (iter.hasNext()) {
                                Entry<String, JSONArray> entry = iter.next();
                                JSONArray vJsonArray = entry.getValue();
                                // 插入主从表数据
                                String mainUUID = getUUID();
                                JSONObject mJson = vJsonArray.getJSONObject(0);
                                createRecode(conn, ps, mainUUID, mJson, vJsonArray);
                                // 装载待启动流程
                                String processTitle = getProcessTitle(mJson);
                                Map<String,String> inMap = getFIDAndFNAME(mJson);
                                JSONObject pJson = new JSONObject();
                                pJson.put("excutorFID", inMap.get("SFID"));
                                pJson.put("excutorFName", inMap.get("SFNAME"));
                                pJson.put("processTitle", processTitle);
                                toStartProcessMap.put(mainUUID, pJson);
                        }
                        // 执行批量启动流程
                        Iterator<Entry<String, JSONObject>> iterator = toStartProcessMap.entrySet().iterator();
                        while (iterator.hasNext()) {
                                Entry<String, JSONObject> entry = iterator.next();
                                JSONObject vJson = entry.getValue();
                                String excutorFID = vJson.getString("excutorFID");
                                String excutorFName = vJson.getString("excutorFName");
                                String processTitle = vJson.getString("processTitle");
                                startProcess(entry.getKey(), excutorFID, excutorFName, processTitle);
                        }
                        // ================提交事务================
                        tx.commit();
                } catch (Exception e) {
                        // ================回滚事务================
                        tx.rollback();
                        throw new RuntimeException(e);
                } finally {
                        try {
                                if (ps != null) {
                                        ps.close();
                                }
                                if (conn != null) {
                                        conn.close();
                                }
                        } catch (SQLException e) {
                                System.out.println("##close.SQLException");
                        }
                }


启动流程:
        private static void startProcess(String sData1, String excutorFID, String excutorFName,String processTitle) throws Exception {
                try {
                        List<Map<String, String>> list = ProcessUtils.startProcess(processFullName, processTitle, sData1, creatorFID, creatorFID);
                        for (Map<String, String> map : list) {
                                String task = map.get("task");
                                ProcessControl control = ProcessUtils.advanceProcessQuery(task);
                                for (ProcessControlItem to : control.getFlowTos()) {
                                        Task t = to.getTask();
                                        t.setCreatorFID(creatorFID);
                                        t.setCreatorFName(creatorFName);
                                        //修改默认执行者
                                        to.clearExecutors();
                                        to.addExecutor(new OrgUnit(excutorFID, excutorFName));
                                }
                                ProcessUtils.advanceProcess(task, control);
                        }
                } catch (Exception e) {
                        throw new Exception("启动流程异常!", e);
                }
        }

回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
35910
发表于 2020-6-18 11:49:00 | 显示全部楼层
在插入数据后,需要启动多个流程在新增后事件中操作的?
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

368

主题

793

帖子

2378

积分

金牌会员

Rank: 6Rank: 6

积分
2378
QQ
 楼主| 发表于 2020-6-18 14:21:02 | 显示全部楼层
jishuang 发表于 2020-6-18 11:49
在插入数据后,需要启动多个流程在新增后事件中操作的?

嗯,新增后操作的,不过还没有提交事务
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
35910
发表于 2020-6-18 15:11:55 | 显示全部楼层
放到保存事件中操作
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-4-19 04:55 , Processed in 0.090631 second(s), 25 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表