我正在为PHP项目开发BIRT报告。通过使用JDBC Datasource直接连接到数据库,我可以轻松地开发报告。但是某些数据来自restful api,我无法从这些api端点创建数据源。
Birt可以选择从Web服务创建数据源,但这似乎只接受SOAP API。我想知道是否有人可以告诉我如何从REST API创建birt数据源。我仔细阅读了谷歌提供的所有搜索结果。有些人建议使用POJO数据源,有些人建议使用脚本化数据源,这需要Java知识,而PHP程序员很难解决这个问题。大多数链接重定向到devshare,现在指向打开文本,内容不再存在。我尝试了以下所有建议。
使用Webservices数据源:它需要wsdl文件的位置,而REST API不存在该位置。它只带有SOAP API。如果有替代方案,那将会很棒。
尝试了POJO数据源和脚本数据源:但是由于没有一步一步的指导,因此PHP开发人员无法获得良好的结果。
因为REST今天很受欢迎,所以我想知道是否有任何直接的方法可以做到这一点,或者是否有人可以帮助Java或Javascript程序为PHP头部编写脚本数据源。我在过去的15天里一直在尝试这个,并且急需一些帮助。
答案 0 :(得分:1)
结束脚本化数据源。
使用open()方法创建脚本化数据源,如下所示:
logger = java.util.logging.Logger.getLogger("birt.report.logger");
importPackage(Packages.java.io);
importPackage(Packages.java.net);
//if you have a parameter
var param= params["industryname"].value;
var inStream = new
URL("http://yourapi/endpoint/" + param).openStream();
var inStreamReader = new InputStreamReader(inStream);
var bufferedReader = new BufferedReader(inStreamReader);
var line;
var result = "";
while ((line = bufferedReader.readLine()) != null)
result += line;
inStream.close();
var json = JSON.parse(result);
vars["HTMLJSON"] = json;
logger.warning (result);
//logger.warning (json);
然后使用以下方法创建数据集:
开()
recNum=0;
取()
len = vars["HTMLJSON"].length;
if (recNum >= len)
return false;
row["name"] = vars["HTMLJSON"][recNum].name;
row["id"] = vars["HTMLJSON"][recNum].id;
row["active"] = vars["HTMLJSON"][recNum].active;
recNum++;
return true;
您可能需要在scriptlib文件夹中包含Apache Commons IO。