【问题标题】:Want an exception upon BIRT JavaScript errors想要 BIRT JavaScript 错误时出现异常
【发布时间】:2013-06-07 07:12:20
【问题描述】:

我在 BIRT 中有一份报告,其中包含非平凡的 JavaScript(脚本数据源)。 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)

感谢您的建议!

【问题讨论】:

    标签: javascript birt


    【解决方案1】:

    我最终做到了这一点并且很好:

    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);
        }
    }
    

    【讨论】:

      【解决方案2】:

      根据 javascript 错误,BIRT 引擎将捕获它们并仍然尝试显示报告。

      我认为您可以通过将 javascript 代码(Rhino 脚本)包装在 try...catch 表达式中来覆盖它,并在发生错误时明确抛出 BirtException:

      try{
         //your javascript stuff
         var test=null;
         test.toString();
      }catch(e){
         var exception=new org.eclipse.birt.core.exception.BirtException("Custom exception:"+e);
         throw exception;
      }
      

      【讨论】:

      • 这本身不起作用。但这让我思考,使用异常来获取堆栈跟踪,了解去哪里看,所以绝对有用。我会发布我自己的答案:)
      猜你喜欢
      • 1970-01-01
      • 2010-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-21
      • 2017-12-10
      • 2021-10-04
      相关资源
      最近更新 更多