Programação de relatórios no cliente¶
Para imprimir um relatório no cliente, use o método print.
Como resultado da chamada dessa função, o cliente chama o método create_param_form para criar um formulário de edição dos parâmetros do relatório, com base no template HTML definido no arquivo index.html (consulte Formulários).
Esse método, após criar o formulário, dispara os seguintes eventos:
on_param_form_created da tarefa.
on_param_form_created do grupo de relatórios ao qual o relatório pertence, se definido.
on_param_form_created do relatório, se definido.
O código padrão possui o manipulador de evento on_param_form_created definido para a tarefa. Nesse evento, o clique no botão Imprimir é conectado ao método process_report do relatório.
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()
});
}
Por sua vez, o método process_report dispara os seguintes manipuladores de evento:
on_before_print_report do grupo de relatórios
on_before_print_report do relatório
Nesses manipuladores de evento, o desenvolvedor pode definir alguns atributos comuns (no manipulador de evento do grupo de relatórios) ou específicos (no manipulador de evento do relatório) do relatório.
Por exemplo, no código padrão, há um manipulador de evento on_before_print_report do grupo de relatórios, no qual o atributo extension do relatório é definido:
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();
}
}
}
No manipulador de evento a seguir, definido no módulo do cliente do relatório invoice da aplicação Demo, o valor do parâmetro id do relatório é definido:
function on_before_print_report(report) {
report.id.value = report.task.invoices.id.value;
}
Após isso, o método process_report envia uma solicitação assíncrona ao servidor para gerar o relatório (consulte Programação do lado do servidor).
O servidor retorna ao método uma URL para um arquivo com o relatório gerado.
Em seguida, o método verifica se o manipulador de evento on_open_report do grupo de relatórios está definido. Se esse manipulador estiver definido, ele é chamado; caso contrário, verifica o on_open_report do relatório. Se estiver definido, ele é chamado.
Se nenhum desses eventos estiver definido, o relatório é aberto no navegador ou salvo em disco, dependendo do atributo extension do relatório.