dashboard
Dashboard
Painel de widgets - KPIs, gráficos, listas e tabelas -, cada um com a sua feature e os seus filtros.
- Kind:
view - Key:
dashboard - Categoria:
painel - Envelope: lista de um só elemento (a config vive em
config[0])
View.config é uma lista com um único elemento: a configuração vive em
config[0], não em config. Uma config escrita como mapa cru é lida de qualquer
maneira, mas entra nos relatórios como desvio de envelope.
Campos
| Chave | Tipo | Obrigatório | Omissão | Descrição | Referência |
|---|---|---|---|---|---|
layoutMode | enumeration | não | "rows" | Como os widgets se arrumam: em faixas horizontais (rows) ou numa grelha de colunas e linhas (grid). | - |
rows | list de map | não | [] | As faixas do modo rows; fica vazia no modo grid (o DashboardLayout nem as lê). | - |
gridColumns | integer | não | 12 | Quantas colunas tem a grelha; só lido no modo grid. | - |
gridRows | integer | não | 6 | Quantas linhas tem a grelha; só lido no modo grid. | - |
widgets | list de map | não | [] | Os widgets do painel. Cada um traz a sua feature, os seus filtros e a sua config de dados. | - |
globalFilterDefinitions | map | não | {} | Os filtros globais do painel, por id: o que a barra de cima mostra e a que os widgets se ligam. | - |
globalFilterValues | json | não | {} | Valores que o administrador fixou para os filtros globais, por id: dado de utilizador. Opaco: transporta dados do utilizador e nenhum resolvedor entra aqui. | - |
globalFilterMappings | json | não | {} | Ligação de cada filtro global à variável dos widgets: na chave o id do filtro, no valor o nome da variável (em regra o nome da coluna filtrada). | - |
title | string | não | "Dashboard" | Título do painel, mostrado no cabeçalho. | - |
showHeader | boolean | não | true | Mostra o cabeçalho do painel (título e acções). | - |
showGlobalPeriodBar | boolean | não | false | Mostra a barra de período (granularidade e navegação), que alimenta os filtros __period.from/__period.to. | - |
rows[]
Cada elemento de rows é um objeto:
| Chave | Tipo | Obrigatório | Omissão | Descrição | Referência |
|---|---|---|---|---|---|
id | string | sim | - | Identificador da faixa, gerado pela app. Opaco: transporta dados do utilizador e nenhum resolvedor entra aqui. | - |
slots | integer | não | 8 | Em quantas casas a faixa se divide na horizontal; é o limite do span dos widgets que lá vivem. | - |
height | integer | não | 1 | Altura em unidades de 120 px (1, 2 ou 3), ou o sentinela fillRemaining na última faixa. | - |
title | string | não | - | Título da faixa, mostrado acima dos widgets. Só sai no JSON quando não é nulo. | - |
widgets[]
Cada elemento de widgets é um objeto:
| Chave | Tipo | Obrigatório | Omissão | Descrição | Referência |
|---|---|---|---|---|---|
id | string | sim | - | Identificador do widget, gerado pela app. Opaco: transporta dados do utilizador e nenhum resolvedor entra aqui. | - |
category | enumeration | sim | - | Família do widget. É ela que diz como ler o dataConfig e o displayConfig. | - |
subtype | string | sim | - | Variante dentro da categoria: kpi tem single, comparison, sparkline, progress e gauge; chart tem bar, column, line, area, pie, scatter e combo; list tem simple, top e leaderboard; table tem aggregated, raw e pivot; actionGroup tem buttons; linkedView usa a string vazia. | - |
title | string | não | - | Título mostrado no cabeçalho do widget. Só sai no JSON quando não é nulo. | - |
subtitle | string | não | - | Subtítulo mostrado sob o título. Só sai no JSON quando não é nulo. | - |
swatchColor | string | não | - | Cor de realce do cartão do widget, escolhida no editor; hoje só guardada. | - |
hideHeader | boolean | não | false | Esconde o cabeçalho do widget (título e acções). | - |
featureId | uuid | não | - | A feature de onde este widget tira as linhas. É o alvo de todas as colunas do widget; fica nulo nos actionGroup, que não leem dados. | feature (uuid) |
filterBindings | list de string | não | [] | Variáveis de filtro a que o widget se liga: colunas da feature do widget, POR NOME. | - |
localFilters | map | não | - | Filtro próprio do widget, aplicado às linhas da feature dele. | - |
globalFilters | map | não | - | Grupo paralelo em que cada regra liga uma coluna do widget a um filtro global: o valor é sempre o sentinela ${id do filtro global}, não uma constante. | - |
rowId | string | não | - | Faixa onde o widget está, pelo rows[].id; só lido no modo rows. Opaco: transporta dados do utilizador e nenhum resolvedor entra aqui. | - |
slotStart | integer | não | - | Casa da faixa onde o widget começa, de 0 a slots - span; modo rows. | - |
span | integer | não | - | Quantas casas da faixa o widget ocupa, de 1 a slots; modo rows. | - |
colStart | integer | não | - | Coluna da grelha onde o widget começa, de 0 a gridColumns - 1; modo grid. | - |
rowStart | integer | não | - | Linha da grelha onde o widget começa, de 0 a gridRows - 1; modo grid. | - |
colSpan | integer | não | - | Quantas colunas da grelha o widget ocupa; modo grid. | - |
rowSpan | integer | não | - | Quantas linhas da grelha o widget ocupa; modo grid. | - |
dataConfig | json | não | {} | Config de dados do widget, de forma livre por category/subtype: a medida (measureColumn, aggregation), as dimensões (dimensionColumn, seriesColumn) e os alvos - colunas POR NOME da feature do widget. O linkedView guarda aqui o viewId da vista embebida e o actionGroup os buttons[], cujo target é um workflow ou um URL. | - |
displayConfig | json | não | {} | Config de aparência do widget, de forma livre por category/subtype. Opaco: transporta dados do utilizador e nenhum resolvedor entra aqui. | - |
sourceTemplateId | string | não | - | Modelo da biblioteca de que este widget foi criado: proveniência, não dependência. Opaco: transporta dados do utilizador e nenhum resolvedor entra aqui. | - |
widgets[].localFilters
| Chave | Tipo | Obrigatório | Omissão | Descrição | Referência |
|---|---|---|---|---|---|
combinator | enumeration | não | "and" | Como se combinam as regras do grupo: and exige todas, or basta uma. | - |
rules | list de map | não | - | As regras do grupo. | - |
groups | list de map | não | - | Subgrupos aninhados, com a mesma forma. | - |
widgets[].localFilters.rules[]
Cada elemento de widgets[].localFilters.rules é um objeto:
| Chave | Tipo | Obrigatório | Omissão | Descrição | Referência |
|---|---|---|---|---|---|
id | string | não | - | Identificador da regra, gerado pela app. Opaco: transporta dados do utilizador e nenhum resolvedor entra aqui. | - |
columnName | string | não | - | Coluna da feature do widget, POR NOME. | coluna de featureId (nome) |
operator | string | não | - | Operador da comparação. | - |
value | string | não | - | Valor da comparação: dado de utilizador. Opaco: transporta dados do utilizador e nenhum resolvedor entra aqui. | - |
secondValue | string | não | - | Segundo valor, usado pelos operadores de intervalo. Só aparece no JSON quando não é nulo. Opaco: transporta dados do utilizador e nenhum resolvedor entra aqui. | - |
widgets[].localFilters.groups[]
Cada elemento de widgets[].localFilters.groups é um objeto:
| Chave | Tipo | Obrigatório | Omissão | Descrição | Referência |
|---|---|---|---|---|---|
combinator | enumeration | não | "and" | Como se combinam as regras do subgrupo. | - |
rules | list de map | não | - | As regras do grupo. | - |
groups | list | não | - | Subgrupos de terceiro nível: varrem-se às cegas (uma FieldDecl const não se pode referir a si própria). | - |
widgets[].localFilters.groups[].rules[]
Cada elemento de widgets[].localFilters.groups[].rules é um objeto:
| Chave | Tipo | Obrigatório | Omissão | Descrição | Referência |
|---|---|---|---|---|---|
id | string | não | - | Identificador da regra, gerado pela app. Opaco: transporta dados do utilizador e nenhum resolvedor entra aqui. | - |
columnName | string | não | - | Coluna da feature do widget, POR NOME. | coluna de featureId (nome) |
operator | string | não | - | Operador da comparação. | - |
value | string | não | - | Valor da comparação: dado de utilizador. Opaco: transporta dados do utilizador e nenhum resolvedor entra aqui. | - |
secondValue | string | não | - | Segundo valor, usado pelos operadores de intervalo. Só aparece no JSON quando não é nulo. Opaco: transporta dados do utilizador e nenhum resolvedor entra aqui. | - |
widgets[].globalFilters
| Chave | Tipo | Obrigatório | Omissão | Descrição | Referência |
|---|---|---|---|---|---|
combinator | enumeration | não | "and" | Como se combinam as regras do grupo: and exige todas, or basta uma. | - |
rules | list de map | não | - | As regras do grupo. | - |
groups | list de map | não | - | Subgrupos aninhados, com a mesma forma. | - |
widgets[].globalFilters.rules[]
Cada elemento de widgets[].globalFilters.rules é um objeto:
| Chave | Tipo | Obrigatório | Omissão | Descrição | Referência |
|---|---|---|---|---|---|
id | string | não | - | Identificador da regra, gerado pela app. Opaco: transporta dados do utilizador e nenhum resolvedor entra aqui. | - |
columnName | string | não | - | Coluna da feature do widget, POR NOME. | coluna de featureId (nome) |
operator | string | não | - | Operador da comparação. | - |
value | string | não | - | Valor da comparação: dado de utilizador. Opaco: transporta dados do utilizador e nenhum resolvedor entra aqui. | - |
secondValue | string | não | - | Segundo valor, usado pelos operadores de intervalo. Só aparece no JSON quando não é nulo. Opaco: transporta dados do utilizador e nenhum resolvedor entra aqui. | - |
widgets[].globalFilters.groups[]
Cada elemento de widgets[].globalFilters.groups é um objeto:
| Chave | Tipo | Obrigatório | Omissão | Descrição | Referência |
|---|---|---|---|---|---|
combinator | enumeration | não | "and" | Como se combinam as regras do subgrupo. | - |
rules | list de map | não | - | As regras do grupo. | - |
groups | list | não | - | Subgrupos de terceiro nível: varrem-se às cegas (uma FieldDecl const não se pode referir a si própria). | - |
widgets[].globalFilters.groups[].rules[]
Cada elemento de widgets[].globalFilters.groups[].rules é um objeto:
| Chave | Tipo | Obrigatório | Omissão | Descrição | Referência |
|---|---|---|---|---|---|
id | string | não | - | Identificador da regra, gerado pela app. Opaco: transporta dados do utilizador e nenhum resolvedor entra aqui. | - |
columnName | string | não | - | Coluna da feature do widget, POR NOME. | coluna de featureId (nome) |
operator | string | não | - | Operador da comparação. | - |
value | string | não | - | Valor da comparação: dado de utilizador. Opaco: transporta dados do utilizador e nenhum resolvedor entra aqui. | - |
secondValue | string | não | - | Segundo valor, usado pelos operadores de intervalo. Só aparece no JSON quando não é nulo. Opaco: transporta dados do utilizador e nenhum resolvedor entra aqui. | - |
globalFilterDefinitions{}
Cada entrada de globalFilterDefinitions é um objeto:
| Chave | Tipo | Obrigatório | Omissão | Descrição | Referência |
|---|---|---|---|---|---|
id | string | sim | - | Identificador do filtro, escrito pelo administrador; é o que os widgets citam no sentinela ${id}. | - |
label | string | sim | - | Nome do filtro na barra de cima. | - |
description | string | não | "" | Ajuda mostrada a par do campo do filtro. | - |
dataType | enumeration | não | "string" | Tipo do valor, que escolhe o campo desenhado na barra de filtros. | - |
defaultValue | json | não | - | Valor inicial do filtro: dado de utilizador (pode ser uma DateReference relativa). Opaco: transporta dados do utilizador e nenhum resolvedor entra aqui. | - |
showInFrontend | boolean | não | true | Mostra o filtro na barra de cima; a falso fica só como valor fixo do administrador. | - |
Exemplo JSON
[
{
"layoutMode": "rows",
"rows": [],
"gridColumns": 12,
"gridRows": 6,
"widgets": [],
"globalFilterDefinitions": {},
"globalFilterValues": {},
"globalFilterMappings": {},
"title": "Dashboard",
"showHeader": true,
"showGlobalPeriodBar": false
}
]
Gerado de definitions.json versão 17f3e0bc59d9. Esta página nasce no build: não se edita à mão.