Linguagem de fórmulas de Relatórios eletrónicos
Os Relatórios eletrónicos (ER) proporcionam uma experiência avançada de transformação de dados. A linguagem utilizada para expressar as manipulações de dados obrigatórias no Estruturador de fórmulas de ER assemelha-se à linguagem de fórmulas no Microsoft Excel.
Sintaxe básica
As expressões de ER podem conter qualquer um ou todos os elementos seguintes:
Constantes
Quando estrutura expressões, pode utilizar constantes textuais e numéricas (isto é, valores que não são calculados). Por exemplo, a expressão VALUE ("100") + 20
utiliza a constante numérica 20 e a constante de cadeia "100" e devolve o valor numérico 120.
O estruturador de fórmulas de ER suporta sequências de escape. Portanto, pode especificar uma cadeia de expressão que deve ser processada de forma diferente. Por exemplo, a expressão "Leo Tolstoy ""War and Peace"" Volume 1"
devolve a cadeia de texto Lev Tolstoi "Guerra e Paz" Volume 1.
Operadores
A tabela seguinte mostra os operadores aritméticos que pode utilizar para efetuar operações matemáticas básicas, tais como adição, subtração, multiplicação e divisão.
Operador | Significado | Exemplo |
---|---|---|
+ | Adição | 1+2 |
- | Subtração, negação | 5-2 , -1 |
* | Multiplicação | 7\*8 |
/ | Divisão | 9/3 |
A tabela seguinte mostra os operadores de comparação suportados. Pode utilizar estes operadores para comparar dois valores.
Operador | Significado | Exemplo |
---|---|---|
= | Equal | X=Y |
> | Greater than | X>Y |
< | Less than | X<Y |
>= | Maior ou igual a | X>=Y |
<= | Menor ou igual a | X<=Y |
<> | Não igual a | X<>Y |
Além disso, pode utilizar um E comercial (&) como um operador de concatenação de texto. Desta forma, pode associar, ou concatenar, uma ou mais cadeias de texto num único texto.
Operador | Significado | Exemplo |
---|---|---|
& | Concatenar | "Nothing to print:" & " " & "no records found" |
Precedência do operador
A ordem pela qual as partes de uma expressão composta são avaliadas é importante. Por exemplo, o resultado da expressão 1 + 4 / 2
varia, consoante a operação de adição ou divisão seja efetuada primeiro. Pode utilizar parênteses para definir explicitamente como uma expressão é avaliada. Por exemplo, para indicar que a operação de adição deve ser efetuada primeiro, pode alterar a expressão anterior para (1 + 4) / 2
. Se não indicar explicitamente a ordem de operações numa expressão, a ordem baseia-se na precedência predefinida que é atribuída aos operadores suportados. A tabela seguinte mostra a precedência atribuída a cada operador. Os operadores com uma precedência superior (por exemplo, 7) são avaliados antes dos operadores com uma precedência inferior (por exemplo, 1).
Precedência | Operadores | Sintaxe |
---|---|---|
7 | Agrupamento | ( … ) |
6 | Acesso de membro | … . … |
5 | Chamada de função | … ( … ) |
4 | Multiplicador | … * … … / … |
3 | Aditivo | … + … … - … |
2 | Comparação | … < … … <= … … => … … > … … = … … <> … |
1 | Separação | … , … |
Se uma expressão incluir vários operadores consecutivos com a mesma precedência, essas operações são avaliadas da esquerda para a direita. Por exemplo, a expressão 1 + 6 / 2 \* 3 > 5
devolve verdadeiro. Recomendamos que utilize parênteses para indicar explicitamente a ordem pretendida de operações em expressões, para que as expressões sejam mais fáceis de ler e manter.
Referências
Todas as origens de dados do componente de ER atual que estão disponíveis durante a estruturação de uma expressão podem ser utilizadas como referências com nome. O componente de ER atual pode ser um mapeamento de modelos ou um formato. Por exemplo, o atual mapeamento de modelos de ER contém a origem de dados ReportingDate, que devolve um valor do tipo de dados DateTime. Para formatar corretamente esse valor no documento de origem, pode referenciar a origem de dados na expressão como DATETIMEFORMAT (ReportingDate, "dd-MM-yyyy")
.
Todos os carateres no nome de uma origem de dados de referência que não representem uma letra do alfabeto têm de ser precedidos por uma aspa simples ('). Se o nome de uma origem de dados de referência contiver pelo menos um símbolo que não represente uma letra do alfabeto, o nome tem de ser incluído em aspas simples. Por exemplo, estes símbolos não alfabéticos podem ser marcas de pontuação ou outros símbolos escritos. Aqui estão alguns exemplos:
- A origem de dados Data e hora de hoje tem de ser referida numa expressão de ER como
'Today''s date & time'
. - O método nome() da origem de dados Clientes tem de ser referido numa expressão de ER como
Customers.'name()'
.
Se os métodos de origens de dados da aplicação tiverem parâmetros, a sintaxe seguinte é utilizada para chamar esses métodos:
- Se o método isLanguageRTL da origem de dados Sistema tiver um parâmetro EN-US do tipo de dados Cadeia, este método tem de ser referido numa expressão de ER como
System.isLanguageRTL("EN-US")
. - As aspas não são necessárias quando um nome do método contém apenas símbolos alfanuméricos. Contudo, são necessários para um método de uma tabela se o nome incluir parênteses.
Quando a origem de dados Sistema é adicionada a um mapeamento de ER que se refere à classe de aplicação Global, a expressão System.isLanguageRTL("EN-US ")
devolve o valor Booleano FALSO. A expressão System.isLanguageRTL("AR")
modificada devolve o valor Booleano VERDADEIRO.
Pode limitar a forma como os valores são transmitidos para os parâmetros deste tipo de método:
- Apenas as constantes podem ser transmitidas para métodos deste tipo. Os valores das constantes são definidos durante a estruturação.
- Apenas os tipos de dados primitivos (básicos) são suportados para parâmetros deste tipo. Os tipos de dados primitivos incluem Número inteiro, Real, Booleano e Cadeia.
Caminhos
Quando uma expressão referencia uma origem de dados estruturados, pode utilizar a definição de caminho para selecionar um elemento primitivo específico dessa origem de dados. Um caráter de ponto (.) é utilizado para separar elementos individuais de uma origem de dados estruturados. Por exemplo, o atual mapeamento de modelos de ER contém a origem de dados InvoiceTransactions e esta origem de dados devolve uma lista de registos. A estrutura do registo InvoiceTransactions contém os campos AmountDebit e AmountCredit e ambos os campos devolvem valores numéricos. Portanto, pode estruturar a seguinte expressão para calcular o valor faturado: InvoiceTransactions.AmountDebit - InvoiceTransactions.AmountCredit
. A construção InvoiceTransactions.AmountDebit
nesta expressão é o caminho utilizado para aceder ao campo AmountDebit da origem de dados InvoiceTransactions do tipo Lista de registos.
Caminho relativo
Se o caminho de uma origem de dados estruturados começar com um sinal de "arroba" (@), é um caminho relativo. O sinal "arroba" é mostrado em vez da restante parte do caminho absoluto da estrutura de árvore hierárquica utilizada. A ilustração seguinte mostra um exemplo. Aqui, o caminho absoluto Ledger.'accountingCurrency()'
indica que o valor da moeda contabilística da origem de dados Livro-razão é introduzido no campo AccountingCurrency do modelo de dados.
O exemplo na ilustração seguinte mostra como um caminho relativo é utilizado. O caminho relativo @.AccountNum
indica que o campo AccountNum da origem de dados Intrastat (que aparece um nível acima do campo AccountNum na árvore hierárquica do modelo de dados) é utilizado para introduzir o número de conta do cliente ou fornecedor no campo AccountNum do modelo de dados.
A restante parte do caminho absoluto também é mostrada no editor de fórmulas de ER.
Para obter mais informações, consulte Utilizar um caminho relativo nos enlaces de dados dos modelos e formatos de ER.
Funções
As funções de ER incorporadas podem ser utilizadas em expressões de ER. Todas as origens de dados do contexto de expressão (isto é, o atual mapeamento de modelos de ER ou formato de ER) podem ser utilizadas como parâmetros de funções de chamada, de acordo com a lista de argumentos para funções de chamada. As constantes também podem ser utilizadas como parâmetros das funções de chamada. Por exemplo, o atual mapeamento de modelos de ER contém a origem de dados InvoiceTransactions e esta origem de dados devolve uma lista de registos. A estrutura do registo InvoiceTransactions contém os campos AmountDebit e AmountCredit e ambos os campos devolvem valores numéricos. Portanto, para calcular o montante faturado, pode estruturar a expressão seguinte que utiliza a função de arredondamento de ER incorporada: ROUND (InvoiceTransactions.AmountDebit - InvoiceTransactions.AmountCredit, 2)
.
Quando estrutura mapeamentos de modelos de ER e relatórios de ER, pode utilizar funções de ER a partir das seguintes categorias:
- Funções de data e hora
- Funções de lista
- Funções de lógica
- Funções de matemática
- Funções de registo
- Funções de texto
- Funções de recolha de dados
- Outras funções (específicas do domínio empresarial)
- Funções de conversão de tipo
Extensão da lista de funções
Os ER permitem expandir a lista de funções utilizadas nas expressões de ER. É necessário algum esforço de engenharia. Para obter informações detalhadas, consulte Expandir a lista de funções de Relatórios eletrónicos (ER).
Expressões compostas
Pode criar expressões compostas que utilizem funções de diferentes categorias, desde que os tipos de dados correspondam. Quando utiliza funções em conjunto, efetue a correspondência do tipo de dados do resultado de uma função com o tipo de dados de entrada exigido por outra função. Por exemplo, para evitar um possível erro "a lista está vazia" num enlace de um campo a um elemento de formato de ER, combine funções da categoria Lista com uma função da categoria Lógica, conforme mostrado no exemplo seguinte. Aqui, a fórmula utiliza a função IF para testar se a lista IntrastatTotals está vazia antes de devolver o valor da agregação obrigatória dessa lista. Se a lista IntrastatTotals estiver vazia, a fórmula devolve 0 (zero).
IF(ISEMPTY(IntrastatTotals), 0.0, IntrastatTotals.aggregated.'$AmountMSTRounded')
Várias soluções
Muitas vezes, pode obter o mesmo resultado de transformação de dados de várias formas, utilizando funções de diferentes categorias ou funções diferentes da mesma categoria. Por exemplo, a expressão anterior também pode ser configurada utilizando a função COUNT da categoria Lista.
IF(COUNT (IntrastatTotals)=0, 0.0, IntrastatTotals.aggregated.'$AmountMSTRounded')
Recursos adicionais
Descrição geral dos Relatórios eletrónicos
Estruturador de fórmulas em Relatórios eletrónicos
Expandir a lista de funções de Relatórios eletrónicos (ER)