.tpl em texto simples. O Reporter o renderiza com um motor Pongo2, que lê tags no estilo Django e filtros com pipe.
Referência de template lista todas as tags e filtros. Formatos de template mostra um arquivo pronto para cada formato de saída.
O mapa de campos
Quando você envia um template, o Reporter analisa o texto e deriva um mapa de campos: cada fonte de dados, cada tabela e cada campo que o template nomeia.
O contexto de dados
A extração monta um contexto para a renderização. O primeiro nível é o nome de configuração da fonte de dados. O segundo nível é a tabela. Cada valor é uma lista de linhas.
schema__table, com underscore duplo, tanto no mapa de campos quanto no contexto de renderização. Os filtros de linha são mais flexíveis e aceitam tanto schema.table quanto schema__table.
Variáveis
Um template lê o contexto por meio de variáveis. Um alias de loop vincula uma linha por vez, e{% with %} nomeia parte do contexto para o bloco abaixo dele. Os dois aliases são locais ao bloco que os declara.
O analisador rastreia um alias de volta até a tabela por trás dele. Um campo que você lê como order.total dentro de um loop sobre external_db.orders chega ao mapa de campos como total sob essa tabela, então a extração o retorna.
Fontes de dados multi-schema
Uma fonte de dados normalmente vive no registro persistente do Reporter e é gerenciada pela API de fontes de dados. Um bloco de ambiente pode semear uma entrada no registro na inicialização do Manager apenas quando nenhuma entrada ativa ou com exclusão lógica já usa esse nome de configuração.
CONFIG_NAME define o nome que os seus templates usam, e SCHEMAS lista os esquemas que o Reporter descobre nela. Use o mesmo nome para o segmento de nome de ambiente e para CONFIG_NAME, deixando esse nome em maiúsculas nas chaves de variável de ambiente, como no bloco abaixo:
SCHEMAS, o Reporter descobre apenas o esquema public. A chave de esquema é DATASOURCE_{CONFIG_NAME}_SCHEMAS, enquanto as outras chaves de ambiente usam o segmento {NAME}. Veja Variáveis de ambiente para o bloco de bootstrap completo.
O motor resolve um nome de tabela sem qualificação em relação a cada esquema descoberto:
Qualifique a referência para remover a ambiguidade. A forma qualificada nomeia a fonte, o esquema e a tabela:
Blocos
Um bloco é a unidade com que o construtor visual de templates trabalha. Existem treze tipos, em seis categorias:
O valor entre parênteses é o que o catálogo de blocos retorna como string de categoria. Um cliente que faz correspondência na resposta da API usa essa chave, não o rótulo.
Quatro deles contêm filhos:
loop, conditional, section e with. Um conditional também carrega ramos alternativos. Os blocos se aninham até cinquenta níveis de profundidade.
Os blocos nunca são armazenados. O construtor os envia ao Reporter, e o Reporter retorna o código-fonte Pongo2. O template que você envia é sempre o texto.
Três operações dão suporte a esse fluxo:
- Validar blocos de template confere a estrutura e reporta cada problema em relação ao bloco que o causou.
- Gerar código de template retorna o código-fonte finalizado para um formato de saída.
- Listar definições de bloco retorna o catálogo, para que um cliente permaneça alinhado com o motor.
Dois tipos de filtro
O Reporter usa a palavra filtro para duas coisas diferentes, que rodam em momentos diferentes. Filtros de linha rodam durante a extração. Eles vivem na requisição de relatório, não no template, e restringem as linhas que o banco de dados retorna. O payload os aninha em três níveis: fonte de dados, depois tabela, depois campo.
isNull e notNull recebem true. Todos os outros operadores recebem um array. Vários operadores em um mesmo campo se combinam, como o intervalo de datas acima mostra. isNull fica sozinho no seu campo.
Filtros de template rodam durante a renderização, depois que as linhas chegam. Eles moldam um valor dentro do documento e usam sintaxe de pipe: {{ value|percent_of:total }}. Listar definições de filtro retorna o catálogo com um exemplo por filtro.
A etapa de renderização
O motor faz o parsing do template preparado uma vez por relatório e o executa contra o contexto. Três comportamentos dessa etapa mudam como você projeta um documento. A saída numérica perde os zeros à direita, então
1200.00 é renderizado como 1200. Use o filtro decimal, como em {{ total|decimal:2 }}, quando uma coluna precisar de casas decimais fixas. Valores com vários pontos permanecem intactos, o que mantém um código contábil como 1.1.2.00.000 inalterado.
Um template XML pode declarar a codificação do arquivo armazenado. Coloque o marcador na mesma linha da declaração XML:
Parâmetros de geração
Um template pode declarar os parâmetros que uma requisição de relatório responde. Cada declaração é um comentário de template:
name, type, required, default, allowedValues, description e appliesTo. O tipo é string, integer, decimal, boolean, date (YYYY-MM-DD) ou month (YYYY-MM). Uma declaração malformada faz o upload falhar.
A requisição de relatório envia os valores em parameters, e o template mostra um deles como {{ system.dataBase }}. Quando o template declara parâmetros, o Reporter recusa uma requisição que envia um parâmetro não declarado. Ele também recusa uma requisição que omite um parâmetro obrigatório sem valor padrão.
appliesTo vincula um parâmetro date ou month a um campo de data, escrito como <dataSource>.<table>.<field>. O Reporter então adiciona o fim desse período como um filtro lte no campo. Ele recusa uma requisição que também define um limite superior nesse campo.
Limites que o motor aplica
O Reporter bloqueia as tags do Pongo2 que carregam ou estendem outro arquivo:
include, extends, import, block e ssi. Um template é um documento autocontido. O Reporter também bloqueia filter, que aplica um filtro a um bloco inteiro de saída.Próximos passos
Como funciona a geração de relatórios
O caminho de uma requisição de relatório até um arquivo que você pode baixar.
Referência de template
Toda tag, filtro e operador que a sintaxe aceita.
Formatos de template
Um template pronto para cada formato de saída.
Conceitos essenciais do Reporter
Templates, fontes de dados, relatórios e prazos em um só lugar.

