业务流.案例.保存时遇到反写网控异常的最佳实践和变通方案

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

业务流.案例.保存时遇到反写网控异常的最佳实践和变通方案

【场景】经常有客户提单反馈二开调用保存的时候出现以下错误 在其他单据保存时出现反写异常,提示非当前单据异常 "XXX" 使用业务单据:"采购订单"业务操作-“[反写-采购订单-XXX]”冲突 这个错误就是我们系统标准的网控互斥 ![Image_20230112144516.webp](/download/0100a4045e22703d451fb58c920b710e7ae2.webp) 【分析】很多客户很好奇为啥会出现一个问题? <0>逻辑分析:业务流反写 <0.0>一对一关系 ![image.webp](/download/010009aff063eb9945da887f75df4a984f31.webp) 入库单保存时反写逻辑 ![image.webp](/download/010040176214d77949b5b8fa708dc2d03825.webp) 由于需要计算反写、超额控制,因此在保存CGRK001的时候,我们会开启CGSQ001和CGDD001的网控,**保存操作调用完成后释放**; 同样的,在保存CGRK002的时候,我们会开启CGSQ002和CGDD002的网控,**保存操作调用完成后释放**; <0.1>一对多,拆单关系;假定采购申请分别推两个订单 ![1673506763169.webp](/download/010041f05acfd2d44e9d8f962c604241b1bf.webp) 入库单保存时反写逻辑 ![1673506888322.webp](/download/0100c86ae52ca74a4399a4d843e6876655e4.webp) 此时CGRK001和CGRK002都需要开启CGSQ001的网控,如果CGRK001占用了网控,那么CGRK002就会冲突; 只能等待CGRK001保存完了,网控释放了的时候重新保存一次。 通常在界面出现这样的问题的时候,我们就会等另外的业务员操作一下,过个几秒钟、或者1分钟重新保存 <1>时间线分析:单据批量操作、非工作流模式 普通操作模型为串行分批模型,指代的意思是处理完上一批后再处理下一批 ![1673507703524.webp](/download/0100726de70d15aa4fec84bc81b5f48b8424.webp) 不同批次的操作:由于时间不会交叉,每次都是等待上一次完成后才开始下一批,不会冲突 (在一批操作内的反写网控判断:判断网控是否为本次操作调用占用) <2>时间线分析:单据批量操作、工作流模型 工作流消息队列操作模型为异步逐单并行模型,指代的意思是操作时不会真正触发(异步),而后在真正调度的时候会可能存在并发调用 ![1673509208270.webp](/download/0100912fad825ba64993b8f007cf5bd39283.webp) 消息队列调度逻辑:等待上一个任务完成时直接调用,或者到达超时时间还没收到上一个任务反馈,也直接调用 导致单据B和单据C在时间上会一起执行 <3>最终结论:两个下游单据,存在同一上游单据,在工作流并发偶发下,会存在冲突操作; 【最佳实践】 <0>业务流:减少拆单下推的逻辑 <1>界面操作:遇到保存、审核抛出的反写网控,联系对应 <2>代码二开保存:遇到保存、审核抛出的反写网控,可同步等待一个时间后重新发起保存,或者转由执行计划定时重新保存 (建议转由执行计划,因为同步等待不一定会等待多久) ```csharp try { saveResult = saveService.Save(ctxBos, targetInfo, targetBillObjs, copyOption); saveOption = copyOption; } //只对网控冲突做重试 catch (KDNetCtrlConflictException ex) { System.Threading.Thread.Sleep(2000); saveResult = saveService.Save(ctxBos, targetInfo, targetBillObjs, saveOption); } ``` <3>工作流的自动下推,升级到PT-146930 [8.1.0.20221110] BOS--BOS工作流: 2、功能改进:解决流程单据转换时提示反写冲突,导致反写失败的问题 ![image.webp](/download/010022d7780c67504d70b788aacbdc77e43d.webp) 【变通方案】基本都是由于工作流的异步并行模型引起的; 目前可通过把工作流的超时调度时间调大,从而减少冲突的概率, ```config 在Common.config文件的<appSettings>节点中设置 <add key="MQExecuteWaitTime" value ="5"/> ``` 支持补丁:2021年12月后 历史版本这个超时时间为1,新版本升级后默认为2;如果冲突较多建议调整为5-10秒,一般一个操作5秒左右基本都完成了。

业务流.案例.保存时遇到反写网控异常的最佳实践和变通方案

【场景】经常有客户提单反馈二开调用保存的时候出现以下错误在其他单据保存时出现反写异常,提示非当前单据异常"XXX" 使用业务单据:"采购...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息