之前没有考虑过从报表取数,昨天看到这个思路,就尝试测试一下,期间请教了一个同事(非常感谢!),磕磕绊绊的取到数了,整理出来。
1.新建集成对象
路径:集成服务云--》数据集成--集成对象
(路径可能不一样就在集成服务云下面)
集成对象的字段就是对应报表的字段,包括报表查询条件,当前例子是手工添加的字段,没有"同步"。
2.创建服务流程
路径:集成服务云--》服务流程--服务流程
服务流程的流程属性,当前例子引入刚才的集成对象,定义了一个中间参数,接收报表查询条件。
流程图,定义了个简单的,用脚本取数,调试脚本的时候建议现在"脚本执行工具"中调试通,取到数据再粘贴过来。
取数脚本,期间一些取数是直接赋值的,可以根据真是情况赋值或者作为接口参数获取到。
//在定义的时间段内有数据,并且报表上日期是必输的 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;
在脚本执行工具中发现添加的查询条件,在查询出来的时候是空的,所以想把查询结果和条件做一个拼接,就先输出查询结果和查询条件。
3.查看执行结果
将流程图设置好,保存发布并执行之后,就可以在"流程实例"的"变量"中查看到查询结果和查询条件。
4.自定义API
路径:集成管理--》API集成--》自定义API
填写Api编码名称,当前例子设置了一个结构,引用了一个同步执行流程的微服务作为依赖资源,设置了默认值,但是在测试的时候发现设置的默认值没有起作用,可不设置。
Api的脚本:
var data = { //结构作为参数传给服务流程 "REQ":itme }; //executeFlowService同步执行服务流程的微服务,前面设置的服务流程test_003 var resp = executeFlowService("test_003",data); if(resp is Not Empty){ return RES="S"; }
5.修改服务流程
设置完API测试的时候报错,想起来服务流程没有定义输入参数,前面输入参数都是直接赋值的,需要修改。
增加了流程的输入参数。
修改取数脚本,可以先将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",测试成功,可查看服务流程的调用情况。
可在服务流程"流程实例"中查看变量的值。
通过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
选择对应的服务流程,设置参数之后保存了就可以测试了,能取到服务流程的返回数据,数据格式可以调整。
(3)服务流程转API测试结果
当前实例仅设计测试了查询传递一条数据,多条数据或者更复杂的逻辑需要继续修改完善。
注意:
此处 queryReportByFront 是一个二开的微服务,实现报表数据查询。完毕!