2

重要な JavaScript (スクリプト化されたデータ ソース) を含む BIRT のレポートがあります。JavaScript は少し不安定で、リグレッションの疑いがあります。そのため、およびその他の理由から、データを入力し、レポートcreateRunAndRenderTaskを実行し (そしてそのタスクを実行し)、結果のレポートに対していくつかの検証を行う JUnit テストを作成しました。

BIRT エンジンが何らかの例外をスローすると、明らかにこのテストは失敗します。ただし、レポートで JavaScript エラーが発生しても、例外はスローされません。そして、それは気分が良くありません。これを何らかの方法で変更して、BIRT エンジンが JavaScript エラー時に例外をスローするようにすることはできますか?

レポートの作成中に多数の JavaScript エラーが発生したため、これを試しました。スクリプト化されたデータ ソースのタイプミスを考えてみてください。それらはコンソールに吐き出されますが、例外はありません。

例えば:

<method name="open"><![CDATA[count = 0;
this should break]]></method>

これはコンソールに表示されます。

... Fail to execute script in function __bm_OPEN(). Source:
------
" + count = 0;

this should break + "
-----
A BIRT exception occurred. See next exception for more information.
ReferenceError: "this should break" is not defined. (/report/data-sets/script-data-set[@id="9"]/method[@name="open"]#3)

ご提案ありがとうございます。

4

2 に答える 2

4

私はこれをやってしまい、それでかなり大丈夫です:

IRunAndRenderTask task = ...
...

task.setErrorHandlingOption(IEngineTask.CANCEL_ON_ERROR);
...

task.run();
evaluateStatus(task, reportName);
task.close();

と:

private void evaluateStatus(IRunAndRenderTask task, String reportName) {
    if (task.getStatus() == IEngineTask.STATUS_CANCELLED) {
        String message = "report failed: " + reportName;
        List<Throwable> errors = task.getErrors();
        if (!errors.isEmpty()) {
            throw new RuntimeException(message, errors.get(errors.size() - 1));
        }
        throw new RuntimeException(message);
    }
}
于 2013-06-28T03:55:07.907 に答える