客户端报表编程

要在客户端打印报表,请使用 print 方法。

调用此函数的结果是,客户端会调用 create_param_form 方法,基于 index.html 文件中定义的 html 模板,创建一个用于编辑报表参数的表单 (参见 表单窗体 )。

此方法在创建表单后,会触发以下事件:

默认代码中有一个为任务定义的 on_param_form_created 事件处理程序。 在此事件中,点击 打印(Print) 按钮会调用报表的 process_report 方法。

function on_param_form_created(item) {
    item.create_param_inputs(item.param_form.find(".edit-body"));
    item.param_form.find("#ok-btn").on('click.task', function() {
        item.process_report()
    });
    item.param_form.find("#cancel-btn").on('click.task', function() {
        item.close_param_form()
    });
}

接着,会触发 process_report 方法:

在这些事件处理程序中,开发人员可以定义报表的一些通用(报表组事件处理程序) 或特定(报表事件处理程序)属性。

例如,在默认代码中,有一个报表组的 on_before_print_report 事件处理程序, 其中定义了报表的 extension 属性:

function on_before_print_report(report) {
    var select;
    report.extension = 'pdf';
    if (report.param_form) {
        select = report.param_form.find('select');
        if (select && select.val()) {
            report.extension = select.val();
        }
    }
}

在以下事件处理程序中,在演示应用程序的 发票(invoice) 报表的客户端模块中定义的处理程序,设置了报表 id 参数的值:

function on_before_print_report(report) {
    report.id.value = report.task.invoices.id.value;
}

之后, process_report 方法会向服务器发送异步请求以生成报表(参见 服务器端编程 )。

服务器会向该方法返回一个指向已生成的报表文件的 url 。

然后,该方法检查是否定义了报表组的 on_open_report 事件处理程序。 如果定义了此事件处理程序,则调用它; 否则检查报表的 on_open_report。 如果已定义,则调用它。

如果这些事件都未定义,则根据报表的 extension 属性,在浏览器中打开报表或将其保存到磁盘。