本文介绍了供应链领域销售模块查询物流详细信息的三种方式,并重点讨论了星空调用快递100物流接口的实现方法。该接口封装在组件中,允许外部二开调用。文中详细说明了接口方法、参数定义及返回格式,并提示二开客户在解析返回JSON数据时需特别注意成功与失败情况的数据包格式差异。
供应链领域销售模块查询物流详细信息是有三个地方。1,在销售物流信息列表中通过手工查询;2,执行计划'销售物流更新'自动更新物流详情;3,通过回调函数,这个回调逻辑包含了快递管家物流订阅和快递100物流订阅推送; 第1和第2种方式都可以认为是星空主动查询快递100的物流接口,第3种方式为快递100或快递管家通过星空的回调地址主动推送到星空系统中。本文只讨论星空调用快递100的物流接口,此接口调用封装在组件 Kingdee.K3.SCM.App.Core.dll 中,且可供外部二开调用,客户可参阅此文二开到其它单据上。接口实现类为:Kingdee.K3.SCM.App.Core.KuaidiBillService ,方法签名为 public string QueryLogisticsTraceInfo(Context ctx, Kuadi100LogisticsQueryParameter parameter),参数Kuadi100LogisticsQueryParameter (定义在组件 Kingdee.K3.SCM.Core.dll 中)的定义如下图1-1所示:
图1-1
上图1-1是反编译组件 Kingdee.K3.SCM.Sal.Business.PlugIn.dll 中的类 Kingdee.K3.SCM.Sal.Business.PlugIn.SalLogistInfoEdit 的截图,二开客户可以类似地反编译此组件并查看通版是如何获取其中的相关参数(比如授权码,KEY等),这里解释下图中的Kuadi100LogisticsQueryParameter 定义:
1,customer:授权码,必录,对应快递100参数配置中的公司编号
2,key:key,必录,对应快递100参数配置中的授权密钥
3,EnableLog:是否启用日志,如果为true,则日志文件中会详细记录相关请求及返回信息,二开客户可传false,详情参阅:https://vip.kingdee.com/article/261534670876342272?productLineId=1
4,param.com:必录,物流公司编码
5,param.num:必录,物流单号
6,param.phone:非必录,手机号(可以是寄件人或收件人手机号),顺丰物流自2023年3月起查询物流时必录此参数
7,param.from:非必录,起始点
8,param.to:非必录,终止点,起始和终止点只是用来精确返回物流状态的,在同城件中,如果不输入这两个参数,可能返回错误的物流状态。
当在单据插件中想二开实现物流查询功能时,可通过方法:KuaidiBillServiceHelper.QueryLogisticsTraceInfo(base.Context, parameter); 调用实现,当在服务端插件中二开实现此功能时,可通过方法:
IKuaidiBillService kdService = Kingdee.K3.SCM.Contracts.ServiceFactory.GetService<IKuaidiBillService>(ctx);
kdService.QueryLogisticsTraceInfo(ctx, kdLogisticParam); 调用实现。
QueryLogisticsTraceInfo 方法返回的格式有:
1,{"result":null,"returnCode":"601", "message":"没该功能权限"}
2,{"result": false,"returnCode": "500","message": "查询无结果,请隔段时间再查"}
3,{
"message": "ok",
"state": "0",
"status": "200",
"condition": "F00",
"ischeck": "0",
"com": "yuantong",
"nu": "V030344422",
"data":[
{
"context": "上海分拨中心/装件入车扫描 ",
"time": "2012-08-28 16:33:19",
"ftime": "2012-08-28 16:33:19"
},
{
"context": "上海分拨中心/下车扫描 ",
"time": "2012-08-27 23:22:42",
"ftime": "2012-08-27 23:22:42"
}
]
}
注意:前两种返回都是失败的情况(可以看到result字段一个是返回null,一个是false),第三种是返回成功的情况(它没有result字段返回),估计是由于快递100历史原因失败和成功返回的数据包格式是不一样,客户二开解析返回的JSON数据是要特别注意。
推荐阅读