Источник данных со сценариями, использующий JSON, не работает с BIRT во время работы в классе Java - PullRequest
1 голос
/ 12 ноября 2011

Я буду говорить строку кода с несколькими словами. В 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 недели на это без решения ...

...