浅谈通过WebAPI实现金蝶云单据对接的那些事[持续更新完善]

随着金蝶云的客户群体越来越多样化,特别是电商系统和零售系统客户群体的日益增多,通过WebAPI实现第三方系统与金蝶云系统的对接的应用越来越多,本文以(常用:销售订单、销售出库单)的系统对接为例,系统说明下对接过程中的注意事项。[持续更新完善]


本文从以下几个方面重点阐述:


1.WebAPI的工作原理(简述,核心看BOS的系统对接帖子和WebAPI的文档)
2.WebAPI的Demo示例和功能自测Json。
3.WebAPI的几个特殊参数和可能遇到的常见问题。
4.WebAPI的对接对于性能的影响点和优化方案
5.未完待续--多线程并行调用

6.WebAPI 自定义接口 通过SQL脚本查询数据


闲话不多说,开始正题


1.WebAPI的工作原理(简述,核心看BOS的系统对接帖子和WebAPI的文档)


WebAPI的工作原理通俗来说,就是模拟录单的过程,根据传入的Json数据包构造的每个字段值,按顺序逐一模拟录单填充(录入)对应字段的值,触发此字段的相关值更新事件、实体服务和插件逻辑。构造完成整个单据的数据包之后,调用Save保存接口(Submit提交、Audit接口),并对应触发保存(提交、审核)的操作校验、操作逻辑、操作单据插件逻辑等整个过程。


细节参考帖子链接:
1.1.K/3 Cloud系统集成【汇总贴】
https://vip.kingdee.com/article/9185

1.2.K3 Cloud WebAPI接口说明书

https://vip.kingdee.com/questions/8874/answers/12403

1.3金蝶云星空日志管理-WebAPI日志

https://vip.kingdee.com/article/8744

1.4.【精华合辑】金蝶云BOS资料合辑

https://vip.kingdee.com/article/9186


2.WebAPI的Demo示例和功能自测Json。


登录Cloud系统--菜单:基础管理-动态服务定义-WebAPI    或者直接搜索菜单关键字WebAPI

 

WebAPI001.jpg


3.WebAPI的几个特殊参数和可能遇到的常见问题及解决。


3.1 特殊参数如上图上面做了简单解释,下面常见问题会涉及到一些。


3.2 常见问题示例及解决方案(持续完善更新)


常见问题1:明明Json里面给了某个字段值,保存结果却并没有此字段值

原因分析:

1.1.字段值不合法,赋值不成功,测试:到单据录单界面尝试录入Json的值,看是否可以录入成功。
2.1.字段合法,赋值成功后被其他字段逻辑重新赋值覆盖清空掉了,此问题是Json构造数据包字段的顺序不正确,可以调整Json数据包里面的字段前后顺序:常见如: 单价-》数量-数量触发取价服务,覆盖了前面单价。 调整Json构造的顺序:单价字段调整到数量字段后面去。
3.1单据插件其他服务、插件逻辑影响了字段值。可以使用插件调试DataChange事件和保存事件分析数据包字段值在不同时机是否有值


常见问题2:套件业务,构造Json分录里面有多行套件父项物料,实际却只有第一行成功

原因分析:上图2.7参数 IsEntryBatchFill 需设置为False,因为套件父项物料需依赖前置字段 产品类型,不适用与批量填充。


常见问题3:系统里面仓库设置了允许负库存,系统界面操作交互没问题,WebAPI审核出库单却不成功,提示负库存
原因分析:由于WebAPI是服务端处理业务,无法支持交互弹出界面,因此需要设置 上图2.10参数:InterationFlags:"STK_InvCheckResult"


常见问题4:WebAPI保存单据希望自动建立上下游关联关系
解决参考:参考:http://club.kingdee.com/forum.php?mod=viewthread&tid=1394265)


4.WebAPI的对接对于性能的影响点和优化方案


WebAPI对接系统单据过程中,根据其原理,需要逐行逐字段触发字段值更新、实体服务规则,触发单据的保存、提交、审核 操作上所挂的服务,以及单据的校验逻辑和插件操作处理逻辑。为了保证数据的正确性,注定这个过程是一个耗时的过程。但是,我们却可以从不同的点入手结合业务实际应用对一些逻辑和操作服务进行优化,以下以销售订单和出库单为例进行优化说明。同时可以开启WebAPI日志管理,详细判断WebAPI的时间花费在哪里


优化点1:精简Json构造的字段数量,保留必须的字段,去掉非必须的,比如:单位、计价单位、税率等等都是物料自动携带的,无需构造。


优化点2:销售订单和销售出库单大概有10几个字段值更新事件上都挂有取价服务、取折扣服务,取价服务、取折扣服务相对来说是比较耗时的,特别是优先级取价时。如果Json字段里面已经填了价格,就无需让取价服务触发避免浪费性能。
分两种场景:

1.销售订单、销售出库完全来自于第三方对接,不存在界面进行手工录单的情况下,直接更改调整配置,取消取价服务、取折扣
2.系统可能存在WebAPI对接和界面手工录单两种方式,最近新补丁可调整BOS服务配置分场景禁用服务。

取价服务001.jpg


销售出库单审核操作的相关服务优化说明:(反审核类似)

出库单审核优化1.jpg

出库审核插件优化.jpg

销售出库单审核自动生成应收单 的相关参数配置调整

(系统默认审核自动生成应收 影响对接性能,作为WebAPI对接性能要求比较高时,可取消参数,分两步进行,先对接出库单单据过来,再用其他另外的对接服务或执行计划单独处理下推应收单以及审核应收单过程)

出库单优化3.jpg


未完待续......

--超高性能要求时,还可采用多线程并行调用WebAPI生成对接单据


追加:

6:WebAPI 自定义接口 通过SQL脚本查询数据

具体参考上面的连接1.2:K3Cloud WebAPI接口说明书 里面的5.1.10

https://vip.kingdee.com/questions/8874/answers/12403


关于文档里面示例用的是QueryService进行了查询币别过程,做过开发的同学都知道,其实完全可以把这个QueryService替换为自己写的查询脚本(Select * from t_BD_Currency),这里定义的接口试下方法,其实已经可以完全看做是客户端插件( 此处是客户端调用组件)的方法一样:

  1. 可以用脚本执行任何查询、更新等动作,QueryServiceHelper----》DBServiceHelper.Execute(SQL)

  2. 或者是自己定义自己业务ServiceHelper通过接口Contracts调用的APP.Core服务端现有方法。

  




所属分类
推荐知识