WebAPI的工作原理通俗来说,就是模拟录单的过程,根据传入的Json数据包构造的每个字段值,按顺序逐一模拟录单填充(录入)对应字段的值,触发此字段的相关值更新事件、实体服务和插件逻辑。构造完成整个单据的数据包之后,调用Save保存接口(Submit提交、Audit接口),并对应触发保存(提交、审核)的操作校验、操作逻辑、操作单据插件逻辑等整个过程。
细节参考帖子链接:
1.1.K/3 Cloud系统集成【汇总贴】
https://vip.kingdee.com/article/9185
1.2.K3 Cloud WebAPI接口说明书5.0
https://vip.kingdee.com/article/188291213903611648
1.3金蝶云星空日志管理-WebAPI日志
https://vip.kingdee.com/article/8744
1.4.【精华合辑】金蝶云BOS资料合辑
https://vip.kingdee.com/article/9186
登录Cloud系统–菜单:基础管理-动态服务定义-WebAPI 或者直接搜索菜单关键字WebAPI
3.1 特殊参数如上图上面做了简单解释,下面常见问题会涉及到一些。
3.2 更多对接问题请查看:销售管理常见WEBAPI问题及其他常见问题汇总指导
原因分析:
1.1.字段值不合法,赋值不成功,测试:到单据录单界面尝试录入Json的值,看是否可以录入成功。
2.1.字段合法,赋值成功后被其他字段逻辑重新赋值覆盖清空掉了,此问题是Json构造数据包字段的顺序不正确,可以调整Json数据包里面的字段前后顺序:常见如: 单价-》数量-数量触发取价服务,覆盖了前面单价。 调整Json构造的顺序:单价字段调整到数量字段后面去。
3.1单据插件其他服务、插件逻辑影响了字段值。可以使用插件调试DataChange事件和保存事件分析数据包字段值在不同时机是否有值
原因分析:上图2.7参数 IsEntryBatchFill 需设置为False,因为套件父项物料需依赖前置字段 产品类型,不适用批量填充。
原因分析:由于WebAPI是服务端处理业务,无法支持交互弹出界面,因此需要设置 上图2.10参数:InterationFlags:“STK_InvCheckResult”
其他相关可能的交互校验忽略标识,一般都是交互校验的弹出交互界面的唯一标识即可(可在BOS查询)
如:
预计可发量检查的交互标识:Sal_ExpectQtyCheckDetail
最低限价检查的交互标识:SAL_DOWNPRICECHECK
允许负库存交互标识:STK_InvCheckResult
价格来源检查的交互标识:SAL_CHECKPRICESOURCEFB
解决参考:参考:WebAPI保存接口实现上下游关联https://vip.kingdee.com/article/171055
提示未购买XXX模块的问题
原因分析:系统某些单据(如销售合同【属于CRM-销售过程管理,同时属于供应链-销售管理】、销售出库单【属于供应链-销售管理,同时属于供应链-库存管理】)是只要购买两个里面其中任一模块即可使用。由于WebAPI默认会取单据本身所属的功能模块子系统校验加密,如果本身所属这个子系统未购买,则会提示。
解决方案:根据参数说明里面的2.5参数 SubSystemId 主动给已购买的子系统即可。如:SubSystemId:“23”
常用子系统值:销售管理:23 库存管理:21 采购管理:20
解决参考:保存单据json传入的分录行,某个物料不合法(未分配、反审核、作废、以及单据对物料的其他条件限制)导致此物料行不能正确对接成功,但是实际单据却保存成功(缺少丢失此行),没有任何提示。
不能校验问题:WebApi保存接口参数:2.5.IsVerifyBaseDataField:是否验证所有的基础资料有效性,布尔类,默认false(非必录)。因此此参数未指定,就导致不会校验基础资料合法性。开启参数后会校验单据所有的基础资料字段值的合法性(会对性能有一定影响,根据业务需要酌情启用)
自动删除【不合法物料】分录行:由于我们目前大部分单据的BOS设置分录的属性【关键字段】:指定的都是物料字段。因此物料没有录入,系统保存时候就认为此行是无效行,自动删除了。【关键字段】还有另外一个作用,就是录入(关键字段:物料)值后,会自动新增一行空行,省去了手工点击新增行菜单,是对易用性的一个优化。可酌情考虑是否设置关键字段。
修改保存单据传入的json与新增保存单据不同,无需构造复杂的单据字段:如
只需要构造单据FID和FEntryId和需要修改的字段即可:
{
"NeedUpDateFields": [],
"NeedReturnFields": [],
//注意IsDeleteEntry参数,如为True,则原分录行的FEntryId未在分录json出现的行,将会被删除 (如无需删除分录行,可改为fasle)
"IsDeleteEntry": "True",
"IsVerifyBaseDataField": "false",
"IsEntryBatchFill": "True",
"Model": {
"FID": "188888",
"FSaleOrderEntry": [ { "FEntryId":"255555", "FQty":"3" } ] }
}
优化点1:精简Json构造的字段数量,保留必须的字段,去掉非必须的,比如:单位、计价单位、税率等等都是物料自动携带的,无需构造。
优化点2:销售订单和销售出库单大概有10几个字段值更新事件上都挂有取价服务、取折扣服务,取价服务、取折扣服务相对来说是比较耗时的,特别是优先级取价时。如果Json字段里面已经填了价格,就无需让取价服务触发避免浪费性能。
多线程并行的调用使用,需根据业务数据量评估,酌情使用,多线程并行调用对系统服务器资源(CPU、内存)耗费较高,不可并发太多调用,以免影响系统的正常使用。一般根据数据情况和服务器资源情况建议并行调用2-10个以内。(不建议使用多线程的并发请求来进行并行处理,优先使用下面5的推荐内部并行模式调用)
如果使用执行计划调用WebAPI,尽量使用WebAPI批量接口BatchSave调用,但一次批量不宜过多,建议20左右,尽量遵循少量多次的调用原则:如:一次执行计划的调用执行100单,分5批次调用,每次批量保存20单。尽量避免执行计划执行超时出错,一般系统默认5分钟超时。一次执行计划的执行可控制5分钟时间内。
多线程并行执行时,对并行执行过程中数据要特别注意,禁止共用线程外的共用变量,以免数据相互污染干扰。
登录连接最好放在并行外部,一次登录即可。
推荐使用的并行调用模式:(WebAPI内部底层自动并行处理)
推荐使用BatchSave接口,建议开启BatchCount并行处理参数,参数值建议不超过10。
作者:程晓峰
来源:金蝶云社区
原文链接:https://vip.kingdee.com/article/11179?productLineId=1
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
2021-10-11 16:24:14 | |
2022-06-13 09:06:02 | |
2022-04-05 21:12:10 | |
2022-12-11 08:25:49 | |
2022-12-13 19:27:35 | |
2023-10-09 10:19:24 | |
2023-03-12 22:43:07 | |
2022-01-20 06:51:41 | |
2022-02-26 01:36:43 | |
2023-07-22 02:48:20 | |
2021-10-30 20:53:26 | |
2024-06-05 22:50:16 | |
2024-12-07 01:43:39 | |
2024-12-15 09:21:19 | |
2024-12-15 17:24:49 | |
2024-11-17 04:02:42 | |
2024-11-04 22:06:50 | |
2024-12-16 18:52:12 | |
2024-12-06 20:54:50 | |
2024-12-19 11:26:26 | |
2023-01-26 10:11:29 | |
2023-01-26 10:11:28 | |
2023-01-26 10:11:27 | |
2023-01-26 10:11:26 | |
2023-01-26 10:11:25 |
何海波 18175716035
数据集成顾问 轻易云的技术专家,拥有丰富的数据集成规划经验。他能够为客户提供专业、全面的数据集成规划方案,熟练掌握多种集成技术和工具,帮助企业在数据集成领域得到长远发展。
卢剑航 13760755942
数据集成专家 拥有十多年丰富的经验,擅长ERP、MES、数据中台、营销云中台等集成。他能够根据客户需求,为其提供一站式集成解决方案,帮助企业快速实现各类系统数据集成服务。
黄宏棵 13286997615
数据集成顾问 资深系统集成顾问,专长于ERP、电商OMS、钉钉及CRM系统。他能提供高效的集成方案,优化企业运营流程,提升业务效率和决策智能化。
胡秀丛 15813570600
数据集成顾问 项目总监 她以卓越的数据集成专长,精通ERP、MES系统,以及数据中台的构建与优化。通过创新的一站式解决方案,她助力企业实现数据的无缝对接,提升业务流程效率,确保信息流通无障碍,为企业的数字化转型提供强有力的支持。