阅读:2202 回复:7
实名用户_a37428dc
11

帖子

42

跟帖

1155

积分

高级榴莲
高级榴莲

工作流的事务控制问题

楼主#
更多 发布于:2017-07-27 15:52
单据驳回后,在数据库里做一些update操作(如果操作失败,能否将单据驳回一起回滚?)
重载的方法好像也没用,除非连驳回的数据库操作一起重新写了。对不?
public override void Reject(WorkSheet.MvcPostValue MvcPostValue, WorkSheet.MvcResult MvcResult)
        {
            //您发起的XX流程[流程号], 在[审批节点名称]节点被驳回
            if (true)
            {
                base.Reject(MvcPostValue, MvcResult);
            }
        }
t156965365
46

帖子

688

跟帖

4536

积分

H3 BPM互助团队
H3 BPM互助团队
  • 社区居民
1楼#
发布于:2017-07-27 16:24
MvcResult.Successful = false;
return掉应该可以,试试.
实名用户_a37428dc
11

帖子

42

跟帖

1155

积分

高级榴莲
高级榴莲
2楼#
发布于:2017-07-28 08:15
MvcResult.Successful = false;不行。
因为是驳回后做操作,所以代码其实应该是这样
public override void Reject(WorkSheet.MvcPostValue MvcPostValue, WorkSheet.MvcResult MvcResult)
        {
                           base.Reject(MvcPostValue, MvcResult);
                           //先驳回,然后做其他数据库操作
                           if (MvcResult.Successful == true)
                            {
                                              //数据库操作
                                }

MvcResult.Successful = false把这个设为false,单据驳回后不会自己关闭,但是单据还是驳回了
t156965365
46

帖子

688

跟帖

4536

积分

H3 BPM互助团队
H3 BPM互助团队
  • 社区居民
3楼#
发布于:2017-07-28 08:32
实名用户_a37428dc:MvcResult.Successful = false;不行。
因为是驳回后做操作,所以代码其实应该是这样
public override void Reject(WorkSheet.MvcPostValue MvcPostValue, ...
回到原帖
你不应该先调用base.Reject,这样都做了驳回,已经没办法再操作了.
public virtual void Reject(MvcPostValue MvcPostValue, MvcResult MvcResult)
{
    this.SaveDataFields(MvcPostValue, MvcResult);
    MvcResult.Url = string.Empty;
    MvcResult.MobileReturnUrl = string.Empty;
    this.MvcController.DoReject(MvcPostValue, MvcResult);
}

这是reject的代码.
你应该重载掉,先执行你的处理方法,成功了就执行this.MvcController.DoReject(MvcPostValue, MvcResult);
不成功就false,在return掉.

你都说要在同一个事务处理,应该是不存在先后执行的问题.
实名用户_a37428dc
11

帖子

42

跟帖

1155

积分

高级榴莲
高级榴莲
4楼#
发布于:2017-07-28 09:10
那如果前面做了操作数据库的操作。驳回失败了,前面做的数据库操作还的手工全部做一遍,让数据恢复原样。
要实现的内容是这样:
想在单据【驳回】以后,通过在后台写数据库,自动将这个单据【关闭】。有没有啥好办法?
其他业务系统发起的多级审批例如:订单A,只有【提交】【驳回到开始】2个操作,驳回到开始既意味着审批失败,想让单据自动关闭,把审批结果返回到业务系统。如果不自动关闭,业务系统修改了订单A后,因为存在未关闭的审批流,将无法再生成新的审批流(如果让同时生成针对一张订单A的多个审批流,就出大问题了)
实名用户_a37428dc
11

帖子

42

跟帖

1155

积分

高级榴莲
高级榴莲
5楼#
发布于:2017-07-28 09:14
应该是取消流程,不是关闭好像
t156965365
46

帖子

688

跟帖

4536

积分

H3 BPM互助团队
H3 BPM互助团队
  • 社区居民
6楼#
发布于:2017-07-28 09:19
实名用户_a37428dc:应该是取消流程,不是关闭好像回到原帖
你直接给它一个取消流程按钮不就搞定了,什么都不用管.
针对你说驳回失败的问题,这个是不需要考虑的.
正常是会成功的,如果失败了,你就不应该回滚,而是应该把这个失败暴露出来.
可能是系统出BUG了,管理员需要去检查问题所在.
实名用户_a37428dc
11

帖子

42

跟帖

1155

积分

高级榴莲
高级榴莲
7楼#
发布于:2017-07-28 15:11
谢谢
1、取消按钮需要人去点一下,有方法或者接口能取消的吗?(要把操作人员当小孩子看的,最好让他们少做)
游客

返回顶部