【问题标题】:How can I integrate BIRT in GWT?如何将 BIRT 集成到 GWT 中?
【发布时间】:2011-08-25 12:02:04
【问题描述】:

我需要在我的一个应用程序中集成一个 BIRT 图表引擎。 Birt 可以生成图像作为图表输出。我的想法是生成这个图表图像,然后将其发送到客户端进行显示。也许在服务器上的 RemoteServiceServlet 中。这是最好的方法吗?还是有其他方法可以做到这一点?

提前致谢,

【问题讨论】:

    标签: gwt charts reporting birt


    【解决方案1】:

    生成“报告”(无论是图像、PDF 还是任何需要由浏览器下载以响应用户操作的字节序列)的最可靠方法是让客户端的 RPC 调用返回立即使用 URL 或令牌,报告的内容稍后将在该 URL 或令牌处可用。稍后,在这种情况下,仅意味着需要后续请求来检索报告的内容,但该模式可以很好地扩展到可能需要大量时间来创建报告的用例。

    1. 客户端向服务器发送带有报告参数的 RPC 请求。
    2. 服务器将参数添加到报告队列中,并以一些可用于稍后检索报告内容的令牌进行响应。
      • 报告的内容是在单独的线程中生成的,如果报告的计算量很大,也可能在单独的机器上生成。
      • 如果保证报告只需要很短的时间即可完成,则可以立即生成,但无论如何,报告的内容必须写入存储机制以供以后检索。
    3. (可选)客户端轮询某些服务以确定报告是否准备就绪。
    4. 客户端将报告呈现给用户。
      • 在您的情况下,演示文稿将包括创建一个Image 小部件,可能带有一个URL 模式http://example.com/getReportImage/<Generated Token>。这个请求可以简单地阻塞,直到报告完成。

    如果报表标识符的选择是报表参数的函数并且具有稳定的语义,那么您可以毫不费力地获得缓存和重复数据删除。

    至于使用data: URL 的选择,只有当您的用户使用现代浏览器并且图像尺寸很小时才有意义。不适合一般情况。

    【讨论】:

    • 你的想法似乎很棒:我会尝试一下,让你知道我的小实验。
    • 你的想法似乎很棒:我会尝试一下,让你知道我的小实验。实际上,我不需要存储结果图表,因为我即将实现的服务必须从数据库中检索数据来绘制图表。因此,为了确保数据是最新的,恕我直言,让它获取数据并动态生成图表很有趣。我可能遇到的唯一问题是,我正在处理的屏幕必须显示多个图表。实际上,这是一个按“问题类别”分组的测验结果页面...
    • 因此,例如,如果应用程序用户之一响应了 4 个类别,那么我将不得不生成 4 个图表(每个用于该类别)。我可能会有某种循环来执行 ServiceCall :这会是性能瓶颈吗?
    【解决方案2】:

    让客户端发送一个 RPC,让服务端完成所有的 BIRT 渲染。服务器完成后,将生成的 HTML(或图像)流式传输回客户端。见http://www.birt-exchange.org/org/forum/index.php/topic/15515-build-birt-report-engine-with-gwt/

    myServiceImpl.getReport(
        "monthlySales",
        "2013-02-01",
        "includeGST",
        new AsyncCallback<String>() {
            public void onSuccess(String serverGeneratedBirtHtml) {
                myVerticalPanel.add(new HTML(serverGeneratedBirtHtml));
            }
        }
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-30
      • 1970-01-01
      相关资源
      最近更新 更多