客户端报表编程
要在客户端打印报表,请使用 print 方法。
调用此函数的结果是,客户端会调用 create_param_form 方法,基于 index.html 文件中定义的 html 模板,创建一个用于编辑报表参数的表单 (参见 表单窗体 )。
此方法在创建表单后,会触发以下事件:
拥有该报表的报表组的 on_param_form_created (如果已定义)
报表的 on_param_form_created (如果已定义)
默认代码中有一个为任务定义的 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 事件处理程序
报表的 on_before_print_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 属性,在浏览器中打开报表或将其保存到磁盘。