业务背景:
本人是一个甲方的财务,最近自行上线了一个金蝶云和吉客云对接的二开功能,具体内容大致如下:
1)集团内的工厂(独立法人)负责生产,同时销售给集团内的销售总公司,工厂的所有业务流程都在金蝶云上实现,但是销售主体的业务全部使用的吉客云。
2)于是便有了工厂在金蝶云做产成品的销售出库,然后把货品拉到销售主体的仓库进行送货验收的场景,同时销售主体的采购需要在吉客云做采购订单,然后按照工厂的出货下推采购入库申请,销售主体的仓库在按照入库申请做入库验收,由于是两边都是独立的人员在操作,会出现错单漏单的情况,导致两边的财务核算对账工作繁杂且不高效。
3)最初的设想是在金蝶云的销售出库单上加一个同步吉客云的按钮,然后利用二开实现底层逻辑,点击按钮后获取整单的数据包明细,按照吉客云的入库申请接口的入参形成数据包,在点击后传给吉客云一个入库申请,然后工厂送货的时候带上打印出来的销售出库单,和销售仓库的仓管点验入库,吉客云里就按照销售出库单的单号信息按照比照核对做系统的入库。
4)在销售出库单的单据头添加的一个送货状态的自定义字段,单据创建后是默认未同步状态,点击同步后,状态会变成送货在途,本来是准备写一个执行计划,查吉客云对应入库申请的状态 然后修改吉客云入库后对应金蝶云销售单的状态为送货完成的,但是这样效率并不是很高。发现吉客云有一个入库确认(回调)的接口,在金蝶云社区也没有找到完整的关于如何实现回调的具体资料,但是发现了一个用自定义接口实现对接钉钉审批状态变化的介绍,按照理解,这实际上就是一个回调函数的逻辑,经过研究,最终实现了利用吉客云的回调接口即时同步修改金蝶云销售单状态的业务需求。
实现方式:
1)新增一个独立的二开项目,继承AbstractWebApiBusinessService这个自定义类;
2)在类里面新增一个方法,比如我的项目用的是SynStockInNoticeStatusConfirm,入参根据吉客云的回调接口的参数来设置;
3)在方法里,就可以实现利用吉客云回调传过来的参数信息,调用金蝶云的通过修改数据库字段的方法来修改单据头自定义字段的值,来实现即时修改状态。
4)这里继承使用了AuthService方法,构造了一个登录上下文。
5)到此,这个方法已经可以使用了,将这个方法生成后,丢到服务端的bin目录下,重启IIS,就可以调用测试。
6)在POSTMAN中就可以使用这个地址来调用这个回调函数,这个地址也是需要放到吉客云回调地址栏里的地址:http://host/K3cloud/****.****.BOS.WebApi.ServicePlugIn.KingdeeCallBacks.SynStockInNoticeStatusConfirm,****.****.BOS.WebApi.ServicePlugIn.common.kdsvc
6)后续有其他的可以通过回调实现的业务需求,都可以在这个插件内,在新增新的方法。
使用注意:
由于接口是可以直接访问的,并且里面写了服务器相关的登录信息,所以请不要随意公开这个接口,最好通过白名单或者网络控制方式来避免接口被随意访问,而增加服务器的压力。
这是我个人在项目过程中得出的一点经验,就总结一下,和大家共享,也感谢社区,让我可以找到各种有效的学习资源来实现我的需求并取得个人的进步!
推荐阅读