最近有小伙伴在做开放API服务开发时遇到一个问题:开放API服务插件的convertPk方法始终进不去(https://vip.kingdee.com/questions/157801633555521792)。so,花了点研究了下这个问题,以下是我排查问题的过程,希望能给各位看官一点点帮助。
首先,我建了个测试单据,对外暴露了一个操作服务(query),写了个测试用的开放API插件,如下图所示(随便用模板建一个测试单据就好了,这里就不截图了)。
然后,用postman测试,始终不进doCustomService方法。至此,我们就已经复现了开发者社区中小伙伴提出的问题。
接下来,各种查开放API服务的资料,调整各种调试的姿势,但始终还是不能解决问题…
无奈之下,只能请教平台的大佬了…
so,踩平了第一个小坑,我们继续。在插件中重写convertPk方法,然后postman重新发起请求测试…
结果是:不仅不进doCustomService方法,而且也不进convertPk方法。此处瀑布汗…【emoji】【emoji】【emoji】
OMG,居然还是不进插件…这个时候,咱要淡定,要淡定…既然平台大佬都已经告诉我们方法的触发时机是在DefaultOperate.execute()方法中调用fireConvertPkEvent(ConvertPkEvent),咱就来跟源码研究探究嘛~~~
eclipse工程里面反编译打开类DefaultOperate,打上断点,postman重发请求,断点依旧没进,简直抓狂额…
坑,无尽的多,可咱还得继续呀~~~
源码DefaultOperate中,可看到该类是继承自OperationApi,顺藤摸瓜,找到其根是AbstractOperateWebApi。找到这里,各位小伙伴可能觉得没发继续了,但我有个点子:看看其他子类是否也有调用fireConvertPkEvent方法的地方。So,ctrl+shit+t,查一下AbstractOperateWebApi的子类。
庆幸的是,其子类并不多,那咱就挨个挨个看嘛。最终,在kd.bos.entity.operate.webapi.Save和kd.bos.entity.operate.webapi.Load都有搜索到fireConvertPkEvent方法。
山重水复疑无路,柳暗花明又一村啊…【emoji】【emoji】【emoji】
看到这两个类名(save和load),不知道大家有没有萌生点什么想法。反正吧,我是想到了开放API服务暴露的操作服务save和query了。
拖拉机摇起来,继续出发啦~~~
先在调用fireConvertPkEvent方法的kd.bos.entity.operate.webapi.Load.execute()方法上打断点。
接下来在开放平台新注册一个load接口。
再在postman发起请求。
这时候,惊喜的发现,进断点啦…哈哈哈哈哈哈哈哈哈哈…
拖拉机开启暴走模式~~~
断点继续往下走进到kd.bos.entity.operate.webapi.OperationApi.fireConvertPkEvent(ConvertPkEvent)方法中,
单步调试我们可以看到变量pluginProxy的值为注册在单据界面上的插件。
满脸的黑人问号脸啊..怎么取的注册在单据界面上的插件啊?为嘛啊?为嘛啊?为嘛啊?
既然取的是注册在单据页面上的插件?那咱就尝试把插件注册到单据界面上嘛~
再重新发起请求测试看看…
意料之中的报错,毕竟基类不一样嘛~~~
可能到这里,已经有高手发觉了问题,然而,我这低端普通玩家反应能力实在太渣,只能再腆着老脸再找平台大佬额,结果大佬一语惊醒梦中人啊~~~
最后冲锋时刻,代码改起来…
重启服务重新发起请求…
哈哈哈哈哈哈哈,可以进断点了并查出数据了,完美解决…
啰啰嗦嗦这么多,不知道各位看官是否都get到点了,最后给大家总结一下吧。
1. 操作服务中注册的插件只会进convertPK这个方法,其他方法是不会进的。
2. 注册在操作服务中的开发API服务插件,在实现接口IBillWebApiPlugin的同时目前还必须继承自AbstractBillPlugIn。
3. 插件目前必须注册在单据界面上!
相信有小伙伴会跟我一样觉得,开放API插件要注册在单据界面上,这简直是个大坑啊。不调试下代码,谁能想得到额。不过,各位看官,放心放心。你们的担心,我已经咨询过大佬啦~~~
至此,文章到这里就结束啦,希望对各位小伙伴有所启发。以下是关于开放API服务的参考资料,大家在开发的时候可以多参考参考。
《金蝶云苍穹平台开发指南》第18节开放平台
《金蝶云苍穹Java插件开发之南》第20节开放API插件
https://vip.kingdee.com/knowledge#tabMain
https://vip.kingdee.com/article/123883327094068480
https://vip.kingdee.com/article/123893364818515200
https://vip.kingdee.com/article/124189496857376512
https://vip.kingdee.com/article/124583053636072448
https://vip.kingdee.com/article/124605921954558976
https://vip.kingdee.com/questions/96970831732907008/answers/97027803266381824
https://club.kdcloud.com/article/96284788335447040
https://club.kdcloud.com/article/62922296562014976
大家如有任何建议和意见,欢迎在评论区留言,我将努力改进。创作不易,如能帮到大家,请动动您的金手指点赞鼓励一下,非常感谢~【emoji】【emoji】【emoji】
推荐阅读