新版销售订单新变更单WebApi返回'请先登录系统!'的解决方案

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

新版销售订单新变更单WebApi返回'请先登录系统!'的解决方案

    在云星空补丁7.6.0.202101之前如果想通过WebApi生成销售订单新变更单,则必须在销售订单新变更单的JSON里录入原始销售订单上的几乎所有的字段信息,加外大部分单据头和单据体上的'原始主键PKIDX',比如变更单上的单据头基本信息JSON中要额外追加 FPKIDX_H : 100234(其中100234代表销售订单的内码),在单据体JSON中要追加FPKIDX:111000(其中111000代表销售订单明细信息的分录内码),其它单据头单据体类似,这种方式是非常繁琐且必须知道单据和明细信息的内码。补丁7.6.0.202101之后发布了新版本的销售订单新变更单WebApi接口Kingdee.K3.SCM.WebApi.ServicesStub.SaveXSaleOrderWebApi.SaveXSaleOrder, 此接口方便了WebApi生成销售订单新变更单,只需要在JSON里转入SaleOrderBillNo(要变更的销售订单号),SaleOrderBillId(要变更的销售订单内码)和SOEntryIds(要变更的销售订单明细内码)即可,其它字段值系统自动通过这三个参数计算得到,相关介绍可参阅论坛:  https://vip.kingdee.com/article/455070438842866176?productLineId=1&isKnowledge=2。

    如果客户二开对接星空时是按上面论坛中介绍的通过Http接口转入JSON值,则一般没有问题,但如果是通过SDK的方式,则有可能会返回'请先登录系统!'的报错,如果通过SDK的方式调用其它单据上的标准保存操作则不会有这报错。这是因为标准单据的保存操作是BOS平台提供的,它会读取配置信息自动登录,而销售订单新变更单的新版WebApi是供应链领域添加的,它不会自动登录,需要先登录一次再调用SaveXSaleOrder接口,下面以Python SDK为例演示下伪代码:

from k3cloud_webapi_sdk.main import K3CloudApiSdk
api_sdk = K3CloudApiSdk()
res = api_sdk.Execute("Kingdee.BOS.WebApi.ServicesStub.AuthService.LoginByAppSecret",
    {"acctid": "630","username": "demo","appid":"225649_7Z","AppSecret":"2bb1d97","lcid": 2052})
print(res)
api_sdk.Execute("Kingdee.K3.SCM.WebApi.ServicesStub.SaveXSaleOrderWebApi.SaveXSaleOrder", {saveXSaleOrderArgs: {"SaleOrderBillNo": "XSDD000688", "SaleOrderBillId": 100827, "SOEntryIds": [102803,102804]}})

上文是通过应用id登录,如果是通过用户名或密码登录则可以调用:

res = api_sdk.Execute("Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser",
    {"acctid": "64", "username": "ZZL", "password": "", "lcid": 2052})

当然如果先调用其它标准单据上的保存接口(或者任意一个BOS标准接口),也是可以不用先调用LoginByAppSecret 或 ValidateUser接口,可以直接调用 SaveXSaleOrder 接口。


写在最后:

    很多业务领域的自定义WebApi都是非BOS标准的,这样的WebApi都很容易返回请先登录的报错,如果反编译组件 Kingdee.K3.SCM.WebApi.ServicesStub.dll 中的类 SaveXSaleOrderWebApi ,可以看到它从基类KDBaseService中继承(KDBaseService类不会自动登录),由于补丁历史原因它没有从基类Kingdee.BOS.WebApi.ServicesStub.AbstractWebApiBusinessService继承(AbstractWebApiBusinessService类会自动登录)。如下图1-1所示:

图1-1

新版销售订单新变更单WebApi返回'请先登录系统!'的解决方案

在云星空补丁7.6.0.202101之前如果想通过WebApi生成销售订单新变更单,则必须在销售订单新变更单的JSON里录入原始销售订单上的几乎所有...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息