WebApi业务关闭销售订单报'未将对象引用设置到对象的实例'的解决方案

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

WebApi业务关闭销售订单报'未将对象引用设置到对象的实例'的解决方案

    在星空版本 PT-148001 [8.1.0.20230420] (不含此补丁)之前,如果通过WebApi去业务关闭销售订单(通常的WebApi业务关闭销售订单的JSON格式为:

{    "CreateOrgId": 0,    "Numbers": [],    "Ids": "121252",    "PkEntryIds": [{"Id": "121252", "EntryIds": "122231,122232"}],    "NetworkCtrl": "",    "IgnoreInterationFlag": "" }

其中尤其要注意PKEntryIds字段的格式,如果此字段格式不对,则会有其它错误的返回),则可能会报'未将对象引用设置到对象的实例'的错。如果查询服务器日志文件会发现有更详细堆栈信息,WebApi业务关闭操作的返回在星空高版本可能不会有详细堆栈报错,低版本才可能会有详细调用堆栈报错(可以在星空Web Api菜单操作下业务关闭,低版本会直接返回堆栈信息),如下图1-1所示:

图1-1


    从上图1-1可以看到是SORowCloseValidator校验器抛出来的错误,目前这个校验器仅用于处理一些预计可发量的校验逻辑。此bug在补丁 PT-148001 [8.1.0.20230420] (包含此补丁) 后已经修复了,这个地方主要是用WebApi去业务关闭销售订单比较少。如果客户的星空版本比较低且不想升级,则可以在'业务关闭'操作上挂一个Python插件去移除此校验器,配置如下图1-2所示:

图1-2


    Python脚本如下(不要直接复制以下文本,建议使用右侧附件中的代码):PythonCode.zip

# -*- coding: utf-8 -*-
#WebApi业务关闭销售订单报错
import clr
clr.AddReference("System")
clr.AddReference("System.Core")
clr.AddReference("Kingdee.BOS")
clr.AddReference("Kingdee.BOS.Core")
from System import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import *
def OnAddValidators(e):
if Convert.ToString(this.Context.ClientType) == "WebApi":
for validator in e.Validators:
if (validator.GetType().ToString().Contains("SORowCloseValidator")):
e.Validators.Remove(validator);
break;

写在最后:

    由于目前此校验器逻辑仅有预计可发量的一些校验,因此在WebApi操作下删除这个校验器是没有问题的(上面的Python代码是判断了客户端类型为WebApi时才移除校验器),但这里还是建议后续升级到 PT-148001 [8.1.0.20230420] 版本后,把这个Python插件删除,因为可能后续版本会在这个校验器里添加其它逻辑,如果升级后不及时删除此Python插件就可能存在一些校验逻辑与通版存在异常的可能。

WebApi业务关闭销售订单报'未将对象引用设置到对象的实例'的解决方案

在星空版本 PT-148001 [8.1.0.20230420] (不含此补丁)之前,如果通过WebApi去业务关闭销售订单(通常的WebApi业务关闭销售订单的JSO...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息