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

QQ登录

只需一步,快速开始

查看: 5278|回复: 6

[结贴] 事件处理中如遇错误事件回滚

[复制链接]

100

主题

350

帖子

589

积分

高级会员

Rank: 4

积分
589
QQ
发表于 2017-5-31 11:56:09 | 显示全部楼层 |阅读模式
版本: 小版本号:
数据库: 服务器操作系统: 应用服务器:
客户端操作系统: 浏览器:
版本是BEX5_V3.6

假设我有一个流程,对应表a,流程结束之后onAfterAdvance方法里有三个步骤:
1,更新a的标记位,2,向a的历史表增加一条记录,3,向消息表增加一条消息

假如我在第三步的时候报错了,或者报异常了,前两步更新和新增已经完成了,数据库已经更改了,这个不是我要的结果

怎么设置在一个方法里如果遇到错误或异常,之前做的数据库操作全部回滚?

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36178
发表于 2017-5-31 13:21:54 | 显示全部楼层
同一个批中提交的,抛出异常就都会回滚
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



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

使用道具 举报

100

主题

350

帖子

589

积分

高级会员

Rank: 4

积分
589
QQ
 楼主| 发表于 2017-5-31 14:32:29 | 显示全部楼层
jishuang 发表于 2017-5-31 13:21
同一个批中提交的,抛出异常就都会回滚

我就是一个方法里对三张表进行处理,假设有三块从上到下分别是a,b,c,分别操作不同的表
然后a修改表,b,c新增数据,

c那里报错了,说是ksql语句错误,检查了是ksql我少写了括号报错了,但是我查数据库发现我ab已经把数据库的数据更改了
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36178
发表于 2017-5-31 15:56:18 | 显示全部楼层
把完整的代码发一下看看
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



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

使用道具 举报

100

主题

350

帖子

589

积分

高级会员

Rank: 4

积分
589
QQ
 楼主| 发表于 2017-5-31 16:13:05 | 显示全部楼层
jishuang 发表于 2017-5-31 15:56
把完整的代码发一下看看

public static void businessActivity2AfterAdvance() {
                /**当前ServersApply主键*/
                String key = ProcessUtils.getProcessData1();
               
                /**当前人姓名、单位*/
                Person person = ContextHelper.getPerson();
                String personName = person.getName();
                String personDanweiKey = (String) person.getAttribute("sDanwei");
                String ksqlPerson = "select d.* from T_Danwei d where d = '"+personDanweiKey+"'";
                Table danweiTable = KSQL.select(ksqlPerson, null, "/dzzw/dzzw/model/data", null);
                Iterator<Row> rowDanweis = danweiTable.iterator();
                Row rowDanwei = rowDanweis.next();
               
                /**获取当前任务以获取附言*/
                String taskid=ContextHelper.getActionContext().getParameter("task").toString();//任务id
                String ksqlTask = "select s.* from SA_Task s where s='"+taskid+"'";
                Table tableTask = KSQL.select(ksqlTask,null,"/system/data",null);
                Iterator<Row> rowTasks = tableTask.iterator();
                Row rowTask = rowTasks.next();
               
                // 增加审核历史信息
                String stateBefore = "托管申请技术科未审核";
                String stateAfter = "托管申请技术科已审核";
               
                /**保存审核记录*/
                String ksqlInsertHis = "insert into T_TainApplyHistory th (th , th.tainApplyHistory_tainApply , th.tainApplyHistory_dwmingchen ,"
                                +"th.tainApplyHistory_drawer , th.tainApplyHistory_drawDate , th.tainApplyHistory_describe , th.tainApplyHistory_stateBefore , "
                                +"th.tainApplyHistory_stateAfter , th.tainApplyHistory_deleteFlag , th.version) values "
                                +"('"+createUUID()+"' , '"+key+"' , '"+rowDanwei.getString("dwmingchen")+"' , '"+personName+"' , '"+formatDate(new Date())+"' , '"+rowTask.getString("sContent")+"' , '"+stateBefore+"' , '"+stateAfter+"' ,0,0)";
                KSQL.executeUpdate(ksqlInsertHis, null, "/dzzw/dzzw/model/data", null);
               
                /**产生随即码以及短信信息*/
                //产生验证码
                String str = "0,1,2,3,4,5,6,7,8,9";
                String str2[] = str.split(",");
                Random rand = new Random();
                int index = 0;
                String randStr = "";
                for (int i = 0; i < 4; ++i) {
                        index = rand.nextInt(str2.length - 1);
                        randStr += str2[index];
                }
                /**生成一条短信验证信息*/               
                String describe = "测试设备维护申请技术科短信验证审核!";
                String ksqlInsertNote = "insert into T_Note th (th , th.note_authCode , th.note_sendDate ,"
                                +"th.note_describe , th.note_sendlag , th.note_tainApply , th.note_drawer , "
                                +"th.note_drawDate , th.note_deleteFlag , th.version) values "
                                +"('"+createUUID()+"' , '"+randStr+"' , '"+formatDate(new Date())+"' , '"+describe+"' , -1 , '"+key+"' , '"+personName+"' , '"+formatDate(new Date())+"' ,0,0)";
                KSQL.executeUpdate(ksqlInsertNote, null, "/dzzw/dzzw/model/data", null);
               
                /**更新审核状态并生成最后的验证码*/
                String ksqlUpdate = "update T_TainApply t set t.tainApply_skillFlag = -1 , t.tainApply_skiller = '"+personName+"' , " +
                                "t.tainApply_skillDate = '"+(formatDate(new Date()))+"' , t.tainApply_authCode = '"+randStr+"' where t = '"+key+"'";
                KSQL.executeUpdate(ksqlUpdate, null, "/dzzw/dzzw/model/data", null);
        }

回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36178
发表于 2017-5-31 16:54:40 | 显示全部楼层
这样是没问题的,后面一个不成功前面的肯定都会回滚
ksql.png
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



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

使用道具 举报

100

主题

350

帖子

589

积分

高级会员

Rank: 4

积分
589
QQ
 楼主| 发表于 2017-6-1 08:23:03 | 显示全部楼层
jishuang 发表于 2017-5-31 16:54
这样是没问题的,后面一个不成功前面的肯定都会回滚

好吧,我检查一下是不是在其他地方做了操作影响了,可以结贴了
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-16 16:57 , Processed in 0.060018 second(s), 29 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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