阅读:2607
回复:7
|
工作流的事务控制问题
单据驳回后,在数据库里做一些update操作(如果操作失败,能否将单据驳回一起回滚?)
重载的方法好像也没用,除非连驳回的数据库操作一起重新写了。对不? public override void Reject(WorkSheet.MvcPostValue MvcPostValue, WorkSheet.MvcResult MvcResult) { //您发起的XX流程[流程号], 在[审批节点名称]节点被驳回 if (true) { base.Reject(MvcPostValue, MvcResult); } } |
1楼#
发布于:2017-07-27 16:24
MvcResult.Successful = false;
return掉应该可以,试试. |
|
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,单据驳回后不会自己关闭,但是单据还是驳回了 |
|
3楼#
发布于:2017-07-28 08:32
实名用户_a37428dc:MvcResult.Successful = false;不行。你不应该先调用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掉. 你都说要在同一个事务处理,应该是不存在先后执行的问题. |
|
4楼#
发布于:2017-07-28 09:10
那如果前面做了操作数据库的操作。驳回失败了,前面做的数据库操作还的手工全部做一遍,让数据恢复原样。
要实现的内容是这样: 想在单据【驳回】以后,通过在后台写数据库,自动将这个单据【关闭】。有没有啥好办法? 其他业务系统发起的多级审批例如:订单A,只有【提交】【驳回到开始】2个操作,驳回到开始既意味着审批失败,想让单据自动关闭,把审批结果返回到业务系统。如果不自动关闭,业务系统修改了订单A后,因为存在未关闭的审批流,将无法再生成新的审批流(如果让同时生成针对一张订单A的多个审批流,就出大问题了) |
|
6楼#
发布于:2017-07-28 09:19
实名用户_a37428dc:应该是取消流程,不是关闭好像回到原帖你直接给它一个取消流程按钮不就搞定了,什么都不用管. 针对你说驳回失败的问题,这个是不需要考虑的. 正常是会成功的,如果失败了,你就不应该回滚,而是应该把这个失败暴露出来. 可能是系统出BUG了,管理员需要去检查问题所在. |
|
7楼#
发布于:2017-07-28 15:11
谢谢
1、取消按钮需要人去点一下,有方法或者接口能取消的吗?(要把操作人员当小孩子看的,最好让他们少做) |
|