WebAPI对接分步式调入单BOM版本问题处理案例
一、【业务问题】
第三方系统通过星空系统WebAPI对接分步式调出单、分步式调入单,保存分步式调出单,物料启用了BOM且系统配置有该物料清单,默认会携带一个最新的bom版本赋值到分步式调出单的BOM版本字段。通过接口保存生成的分步式调入单如何自动调用最新的bom版本号,当前写入分步式调入单保存提示"调出物料启用BOM管理,BOM不允许为空"
二、【分析解决】
系统的设计中分步式调入单不允许手工新增,均是由分步式调出单下推生成,由于上游分步式调出单针对调入调出的数据都已填写完整,下推分步式调出,通过单据转换的字段映射携带,BOM相关赋值没有问题。客户直接对接写入分步式调入单,按理说数据包中调出调入BOM都有值,调用保存依然提示"调出BOM为空"。
分步式调出单插件赋值逻辑:物料 --值更新触发--> 加载,赋值调出BOM, 物料 --值更新触发--> 同步赋值调入物料 --值更新触发--> 加载,赋值调入BOM
参考分步式调出单的赋值逻辑,分析定位问题,查看分步式调入单的表单插件,要满足BOM的赋值,几个地方需要做修改
反编译组件Kingdee.K3.SCM.Stock.Business.PlugIn.dll,定位分步式调入单表单插件
调试分析定位问题,查看分步式调入单的表单插件,要满足BOM的赋值,几个地方需要做修改。
1、物料赋值时,默认会触发对BOM版本的赋值,在BOM版本添加值更新,触发调出BOM的赋值
调用报错,未解决问题。定位调入物料配置有值更新,导致调出BOM被清空,将值更新服务修改为"引入和WEB API禁用"
调用报错,未解决问题。发现DataChanged事件中,this.View.Model.SetValue("FBOMID")操作没有触发"BOM版本"字段的值更新,二开表单插件,通过this.View.InvokeFieldUpdateService("FBOMID", e.Row)强制触发字段更新服务
import clr clr.AddReference("System") clr.AddReference("System.Core") clr.AddReference("Kingdee.BOS") clr.AddReference("Kingdee.BOS.Core") clr.AddReference("Kingdee.K3.SCM.Business") from System import * from System import StringComparison from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import * from Kingdee.K3.SCM.Business import * def DataChanged(e): if e.Field.Key.Equals("FMATERIALID", StringComparison.OrdinalIgnoreCase): bomOrgId = 0 bomOrgIdObj = this.View.Model.GetValue("FStockOrgId") if bomOrgIdObj != None: bomOrgId = Convert.ToInt64(bomOrgIdObj["Id"]) materialObj = this.View.Model.GetValue("FMATERIALID", e.Row) this.View.Model.SetValue("FBOMID", SCMCommon.GetBomDefaultValueByMaterial(this.Context, materialObj, 0, False, bomOrgId), e.Row) this.View.InvokeFieldUpdateService("FBOMID", e.Row)
说明:
1、系统的设计中分步式调入单不允许手工新增,必须有源单信息,对接API时FSTKTSTKRANSFERINENTRY_Link需要对应赋值
WebAPI对接分步式调入单BOM版本问题处理案例
本文2024-09-16 19:05:10发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-26301.html