#实践案例#Python插件变通实现自定义WebAPI接口查询报表原创
金蝶云社区-CQ周玉立
CQ周玉立
139人赞赏了该文章 783次浏览 未经作者许可,禁止转载编辑于2024年04月22日 17:04:50

一、业务背景

    小伙伴们实践了Python插件开发后,觉得很方便,很多小伙伴就问我,Python能不能做自定义WebAPI接口?

    大家知道,Python插件是在BOS平台进行注册使用的,而自定义WebAPI接口本质上还是继承特殊的基类AbstractWebApiBusinessService来开发插件发布到应用服务器,进行调用的,但目前是无法通过Python来开发这种插件,所以Python插件是不能用这种方式来开发自定义WebAPI接口的!

    C#自定义WebAPI接口可以参考:


    标准的WebAPI接口对应单据的各种操作已经很全面了,但是有很多集成需求,是需要读取系统已有报表的数据,版本新一点的系统已经提供了平台公共报表查询接口,但是这个接口有的报表可能不支持,或者用起来不是那么顺畅。

    于是,就会想到开发自定义WebAPI接口来查询报表数据,前面讲了,自定义接口实质还是基于插件开发的,那么首先可以参考的思路就是:插件中如何获取报表数据?有下面一些案例可以参考:

以上案例已经可以通过C#实现自定义WebAPI接口来实现查询报表数据,但大部分情况可能都是查询某一个报表的,如果要查询多个报表,那是不是得开发多个接口呢?

那么,就很想实现一个通用的报表查询接口?或者用Python实现?就可以快速的进行迭代修改,以满足对各种报表的需求


结合以上思考, 本次案例基于Python插件,变通实现自定义WebAPI接口查询报表数据!

二、解决方案

  •     如何实现通用方法获取报表数据?

    有了插件获取报表数据的方法案例,插件获取报表数据当然不是问题,经过验证,Python插件也能实现。

    经过分析就发现,报表查询其实是相同的模式,都是:过滤参数->执行报表取数逻辑->返回查询结果(DataTable)

    差异点主要在于过滤参数的不同。

  •     Python插件如何转换成接口调用?

           对于WebAPI接口调用,要实现的目标是:

                 接口能传递自定义参数->Python插件解析干预->返回自定义数据给接口调用方

           由于不能自定义接口服务插件,那么就只能往标准接口上面去靠,而目前标准WebAPI接口能传自定义参数的接口就 只有单据保存接口和单据下推接口。所以Python插件干预接口参数,就要基于这2种操作触发来实现。

           而要实现自定义的返回数据,很简单,可以通过抛异常的方式返回出来,然后接口调用方解析异常信息。以上两种操作都是可以支持的。但是,下推接口,要建立在单据转换的基础上,显然不是太方便,所以最佳的选择就是保存接口了。

           对于保存接口,还有一种方式可以返回数据给接口,那就是增加操作结果信息

          √ 用操作服务插件刚好可以满足以上条件:Python能实现+保存接口能触发+增加操作结果信息

  •    具体实现思路?

    ①开发一个查询方案基础资料,来配置接口请求JSON参数与过滤参数的对应关系,不同报表配置不同的方案。

    image.png

    ②用Python开发插件,可以基于此查询方案,可以获取报表数据。

     image.png

image.png

    ③将获取报表数据的功能,通过Python服务插件做注册到保存操作下面,并通过增加结果信息的方式返回。

    image.png

注意:I. WebAPI调用该方案保存接口,会自动取消保存,不会真正保存数据,只是借用了这个接口而已,所以都会返回保存失败!只要返回的参数结构是正确的,那就说明调用是成功的。

                 II.由于是调用方案的保存接口,要考虑并发问题,所以实际不会执行保存动作,Python操作服务插件中直接取消操作,并且不能启用网控管理。


    ④可查看该方案的接口调用指南,并生成当前方案WebAPI请求参数的测试JSON数据,

        复制到WebAPI在线测试平台可以直接验证效果。

        外部系统就可以通过此参数结构,调用该方案的保存接口来获取数据啦!

      image.png

image.png

image.png


三、实现效果演示

WebAPI报表查询方案演示2-2 (2).gif

四、总结几点

  • 经过验证,有些标准报表需要先建立一个过滤方案,然后基于过滤方案再修改过滤字段的值,来实现查询更佳。

  • 基于此案例,可直接实现通用的报表查询接口,复用性很高,全部用Python插件实现,可以快速迭代优化。

  • 有了这个案例开发的经验,用Python插件变通实现自定义WebAPI接口就不是问题了。

  • 案例中用Python插件实现了获取报表数据,在其他功能插件或者报表开发需获取报表数据,也可复用这部分代码。

==============================正文结束=====================================

感谢大家的关注与评阅,希望能为大家的实际问题带来参考和启发。

此方案全部用Python插件实现,如果需要此方案的二开补丁或者源码,可私信作者!


发布于 金蝶云星空BOS开发交流圈 社群

赞 139