API传输报表数据原创
金蝶云社区-云鳞
云鳞
1人赞赏了该文章 914次浏览 未经作者许可,禁止转载编辑于2023年03月16日 13:17:16

之前没有考虑过从报表取数,昨天看到这个思路,就尝试测试一下,期间请教了一个同事(非常感谢!),磕磕绊绊的取到数了,整理出来。

1.新建集成对象

路径:集成服务云--》数据集成--集成对象

(路径可能不一样就在集成服务云下面)

集成对象的字段就是对应报表的字段,包括报表查询条件,当前例子是手工添加的字段,没有"同步"。


image.png


2.创建服务流程

路径:集成服务云--》服务流程--服务流程

服务流程的流程属性,当前例子引入刚才的集成对象,定义了一个中间参数,接收报表查询条件。


image.png


流程图,定义了个简单的,用脚本取数,调试脚本的时候建议现在"脚本执行工具"中调试通,取到数据再粘贴过来。


image.png


取数脚本,期间一些取数是直接赋值的,可以根据真是情况赋值或者作为接口参数获取到。



//在定义的时间段内有数据,并且报表上日期是必输的
var date3=Date.format(Date.now()-179天,'yyyy-MM-dd')+" 00:00:00";
var date4=Date.format(Date.now()-149天,'yyyy-MM-dd')+" 00:00:00";
//取出的数据类型不对,做个参考
var date1=Date("2022-05-01 10:44:43.365",'yyyy-MM-dd hh:mm:ss');
var date2=Date("2022-12-26 10:44:43.365",'yyyy-MM-dd hh:mm:ss');
//定义了报表查询的一个条件
var data5 = "S01000014";
var a = {
    //查询的报表标识
    "formId":"store_retcheck",
    //报表上的查询条件
    "params":{"start_time":date3,"end_time":date4,"retorderno":data5},
    //查询字段,不写默认是全部
    "fieldsOrderMap":{}
};
//查询方法
var assRes = invokeMicroService("kn.isc.iscb.servicehelper@isv","kniscb","BizDataQueryService","queryReportByFront", a.formId,a.params,a.fieldsOrderMap);
//将查询到的结果赋值给administration
 administration = assRes;
//将查询条件赋值给tmp
tmp = a.params;


在脚本执行工具中发现添加的查询条件,在查询出来的时候是空的,所以想把查询结果和条件做一个拼接,就先输出查询结果和查询条件。


image.png


3.查看执行结果

将流程图设置好,保存发布并执行之后,就可以在"流程实例"的"变量"中查看到查询结果和查询条件。


image.png


4.自定义API

路径:集成管理--》API集成--》自定义API

填写Api编码名称,当前例子设置了一个结构,引用了一个同步执行流程的微服务作为依赖资源,设置了默认值,但是在测试的时候发现设置的默认值没有起作用,可不设置。


image.png


Api的脚本:


var data = {
//结构作为参数传给服务流程
  "REQ":itme
};
//executeFlowService同步执行服务流程的微服务,前面设置的服务流程test_003
var resp = executeFlowService("test_003",data);
if(resp is Not Empty){
   return RES="S";
}


5.修改服务流程

设置完API测试的时候报错,想起来服务流程没有定义输入参数,前面输入参数都是直接赋值的,需要修改。

增加了流程的输入参数。


image.png


修改取数脚本,可以先将APi测试的输入参数结构REQ,拿到"脚本执行工具"中定义为输入参数,再获取其中的值来做调试。

要取到报表中的数据,需要注意报表是否报错,输入参数类型与报表是否一致,可以取简单数据先查询到报表数据再做其它条件调试。



/*
//参数赋值改成从输入结构中获取
var date3=Date.format(Date.now()-179天,'yyyy-MM-dd')+" 00:00:00";
var date4=Date.format(Date.now()-149天,'yyyy-MM-dd')+" 00:00:00";
//取出的数据类型不对
var date1=Date("2022-05-01 10:44:43.365",'yyyy-MM-dd hh:mm:ss');
var date2=Date("2022-12-26 10:44:43.365",'yyyy-MM-dd hh:mm:ss');
var data5 = "S01000014";
*/
//REQ作为输入参数是一个结构,patams取数需要修改
var a = {
    "formId":"store_retcheck_rpt",
    "params":{"start_time":REQ?.item?.start_time,"end_time":REQ?.item?.end_time,
      "retorderno":REQ?.item?.retorderno},
    "fieldsOrderMap":{}
};
var assRes = invokeMicroService("kn.isc.iscb.servicehelper@isv","kniscb","BizDataQueryService","queryReportByFront", a.formId,a.params,a.fieldsOrderMap);
administration = assRes;
tmp = a.params;

6.测试API

将服务流程修改好之后,测试服务流程,输入的是一个REQ的结构,测试成功之后,再测试APi。

{
  "item":{
    "start_time":"2022-07-01 00:00:00.000",
    "retorderno":"S01000014",
    "end_time":"2022-07-30 00:00:00.000"
  }
}


输入测试密码和代理密码,将输入参数补齐,测试返回"S",测试成功,可查看服务流程的调用情况。


image.png



可在服务流程"流程实例"中查看变量的值。


image.png


通过APi调服务流程,传输报表数据的简单实例完成了,服务流程没有做数据拼接,只是简单将数据输出,如果需要传递数据,需要将查询到的数据返回给APi,在服务流程中还需要做数据处理。


7.优化

在创建好服务流程之后,可以直接用"服务流程转API"即可得到,不用自定义API,实例中将服务流程的数据做了个拼接。

(1)修改服务流程脚本,添加了数据拼接,将条件和查询出来的数据写在一起

/*var date3=Date.format(Date.now()-179天,'yyyy-MM-dd')+" 00:00:00";
var date4=Date.format(Date.now()-149天,'yyyy-MM-dd')+" 00:00:00";
//取出的数据类型不对
var date1=Date("2022-05-01 10:44:43.365",'yyyy-MM-dd hh:mm:ss');
var date2=Date("2022-12-26 10:44:43.365",'yyyy-MM-dd hh:mm:ss');
var data5 = "S01000014";
*/
var a = {
    "formId":"store_retcheck_rpt",
    "params":{"start_time":REQ?.item?.start_time,"end_time":REQ?.item?.end_time,
      "retorderno":REQ?.item?.retorderno},
    "fieldsOrderMap":{}
};
var params={
  "start_time":REQ?.item?.start_time,
  "end_time":REQ?.item?.end_time,
  "retorderno":REQ?.item?.retorderno
};
var assRes = invokeMicroService("kn.isc.iscb.servicehelper@isv","kniscb","BizDataQueryService","queryReportByFront", a.formId,a.params,a.fieldsOrderMap);
var RES = assRes=>{
      queryData:{
            "start_time":#.params.start_time,
            "end_time":#.params.end_time,
            "retorderno":#.params.retorderno,
         },
    "store_code":store_code,
    "allbill":allbill,
    "billdate":billdate,
    "store_codes":store_codes,
    "differencesa":differencesa,
    "fseq":fseq   
};
administration = assRes;
tmp = a.params;

其中有些输出是没必要的,但是为了后续调试,就留下了。

(2)服务流程转API

选择对应的服务流程,设置参数之后保存了就可以测试了,能取到服务流程的返回数据,数据格式可以调整。

image.png


(3)服务流程转API测试结果


image.png

当前实例仅设计测试了查询传递一条数据,多条数据或者更复杂的逻辑需要继续修改完善。


注意:

此处 queryReportByFront 是一个二开的微服务,实现报表数据查询。

完毕!

图标赞 1
1人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!

您的鼓励与嘉奖将成为创作者们前进的动力,如果觉得本文还不错,可以给予作者创作打赏哦!

请选择打赏金币数 *

10金币20金币30金币40金币50金币60金币
可用金币: 0