Я буду говорить строку кода с несколькими словами. В Alfresco мне нужно создать отчеты, используя API-интерфейсы Workflows, которые отвечают как JSON. В этой ссылке я нашел решение для использования JSON в качестве источника данных (это будет хорошо ссылка на полное понимание моей проблемы):
http://www.birt -exchange.org / орг / devshare / проектирование-BIRT-отчеты / 1053 скриптовых-данных источника с использованием-JSON /
Я скачал исходный код и понял, как он работает, и, наконец, у меня возникла проблема «проблема аутентификации», и я решил ее, отредактировав исходный файл «JSONParser.java». В любом случае, у меня теперь другая проблема, у меня есть следующий код в Java это работает:
package com.actuate.json.test;
import java.io.IOException;
import com.actuate.json.JSONParser;
public class TestJSONParse_OutBound {
public static void main(String[] args) {
try{
JSONParser theParser = new JSONParser();
theParser.loadData("http://localhost:8080/alfresco/service/api/workflow-definitions/activiti$CS-Outbound-WFPD:5:403/workflow-instances?state=active&format=json","admin","admin");
System.out.println("Number of jobs found: " + theParser.getChildCount("data") + "\n");
for(int i = 0; i < theParser.getChildCount("data"); i++){
System.out.println(String.valueOf(i + 1) + ") " + theParser.getValue("data", "description", i));
System.out.println("\tID: " + theParser.getValue("data", "id", i));
System.out.println("\tURL: " + theParser.getValue("data", "url", i));
System.out.println("\tUsername: " + theParser.getValue("data", "initiator/firstName", i));
}
}catch (IOException ioe) {
// TODO: handle exception
}catch(Exception ex){
}
}
}
Результат:
Number of jobs found: 2
1) CS-Outbound-WFPD
ID: activiti$499
URL: api/workflow-instances/activiti$499
Username: Administrator
2) CS-Outbound-WFPD
ID: activiti$404
URL: api/workflow-instances/activiti$404
Username: Administrator
НО В отчете BIRT в IDE затмения не повезло 1, в Источник данных в сценариях я положил:
count = 0;
controller = new Packages.com.actuate.json.JSONParser();
controller.loadData(params["JSONURL"],params["USERNAME"],params["PASSWORD"]);
totalCount = controller.getChildCount("data");
и выборка строк в таблице набора данных, например:
if(count < totalCount){
row["id"] = controller.getValue("data", "id", count);
row["url"] = controller.getValue("data", "url", count);
count++;
return true;
}
return false
Но все равно даю мне белую страницу только с заголовками, пустые ячейки !!.
Чтобы получить исключение, я загрузил его в Alfresco, интегрированный с BIRT, и получил:
WARNING: Fail to execute script in function __bm_OPEN(). Source:
------
" + count = 0;
controller = new Packages.com.actuate.json.JSONParser();
controller.loadData(params["JSONURL"],params["USERNAME"],params["PASSWORD"]);
totalCount = controller.getChildCount("data"); + "
-----
A BIRT exception occurred. See next exception for more information.
Error evaluating Javascript expression. Script engine error: TypeError: [JavaPackage com.actuate.json.JSONParser] is not a function, it is object. (/report/data-sources/script-data-source[@id="8"]/method[@name="open"]#2)
Script source: /report/data-sources/script-data-source[@id="8"]/method[@name="open"], line: 0, text:
__bm_OPEN()
org.eclipse.birt.data.engine.core.DataException: Fail to execute script in function __bm_OPEN(). Source:
------
" + count = 0;
controller = new Packages.com.actuate.json.JSONParser();
controller.loadData(params["JSONURL"],params["USERNAME"],params["PASSWORD"]);
totalCount = controller.getChildCount("data"); + "
-----
A BIRT exception occurred. See next exception for more information.
Error evaluating Javascript expression. Script engine error: TypeError: [JavaPackage com.actuate.json.JSONParser] is not a function, it is object. (/report/data-sources/script-data-source[@id="8"]/method[@name="open"]#2)
Script source: /report/data-sources/script-data-source[@id="8"]/method[@name="open"], line: 0, text:
__bm_OPEN()
at org.eclipse.birt.data.engine.script.JSMethodRunner.runScript(JSMethodRunner.java:147)
.
.
.
Caused by: org.mozilla.javascript.EcmaError: TypeError: [JavaPackage com.actuate.json.JSONParser] is not a function, it is object. (/report/data-sources/script-data-source[@id="8"]/method[@name="open"]#2)
.
.
.
На самом деле, я не знаю, в чем проблема и как ее решить, если у кого-то есть идеи на это, я потратил около 1 недели на это без решения ...