Saltar para o conteúdo principal

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])
Envelope de um só elemento

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

ChaveTipoObrigatórioOmissãoDescriçãoReferência
layoutModeenumerationnão"rows"Como os widgets se arrumam: em faixas horizontais (rows) ou numa grelha de colunas e linhas (grid).-
rowslist de mapnão[]As faixas do modo rows; fica vazia no modo grid (o DashboardLayout nem as lê).-
gridColumnsintegernão12Quantas colunas tem a grelha; só lido no modo grid.-
gridRowsintegernão6Quantas linhas tem a grelha; só lido no modo grid.-
widgetslist de mapnão[]Os widgets do painel. Cada um traz a sua feature, os seus filtros e a sua config de dados.-
globalFilterDefinitionsmapnão{}Os filtros globais do painel, por id: o que a barra de cima mostra e a que os widgets se ligam.-
globalFilterValuesjsonnã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.-
globalFilterMappingsjsonnã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).-
titlestringnão"Dashboard"Título do painel, mostrado no cabeçalho.-
showHeaderbooleannãotrueMostra o cabeçalho do painel (título e acções).-
showGlobalPeriodBarbooleannãofalseMostra a barra de período (granularidade e navegação), que alimenta os filtros __period.from/__period.to.-

rows[]

Cada elemento de rows é um objeto:

ChaveTipoObrigatórioOmissãoDescriçãoReferência
idstringsim-Identificador da faixa, gerado pela app. Opaco: transporta dados do utilizador e nenhum resolvedor entra aqui.-
slotsintegernão8Em quantas casas a faixa se divide na horizontal; é o limite do span dos widgets que lá vivem.-
heightintegernão1Altura em unidades de 120 px (1, 2 ou 3), ou o sentinela fillRemaining na última faixa.-
titlestringnão-Título da faixa, mostrado acima dos widgets. Só sai no JSON quando não é nulo.-

widgets[]

Cada elemento de widgets é um objeto:

ChaveTipoObrigatórioOmissãoDescriçãoReferência
idstringsim-Identificador do widget, gerado pela app. Opaco: transporta dados do utilizador e nenhum resolvedor entra aqui.-
categoryenumerationsim-Família do widget. É ela que diz como ler o dataConfig e o displayConfig.-
subtypestringsim-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.-
titlestringnão-Título mostrado no cabeçalho do widget. Só sai no JSON quando não é nulo.-
subtitlestringnão-Subtítulo mostrado sob o título. Só sai no JSON quando não é nulo.-
swatchColorstringnão-Cor de realce do cartão do widget, escolhida no editor; hoje só guardada.-
hideHeaderbooleannãofalseEsconde o cabeçalho do widget (título e acções).-
featureIduuidnã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)
filterBindingslist de stringnão[]Variáveis de filtro a que o widget se liga: colunas da feature do widget, POR NOME.-
localFiltersmapnão-Filtro próprio do widget, aplicado às linhas da feature dele.-
globalFiltersmapnã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.-
rowIdstringnão-Faixa onde o widget está, pelo rows[].id; só lido no modo rows. Opaco: transporta dados do utilizador e nenhum resolvedor entra aqui.-
slotStartintegernão-Casa da faixa onde o widget começa, de 0 a slots - span; modo rows.-
spanintegernão-Quantas casas da faixa o widget ocupa, de 1 a slots; modo rows.-
colStartintegernão-Coluna da grelha onde o widget começa, de 0 a gridColumns - 1; modo grid.-
rowStartintegernão-Linha da grelha onde o widget começa, de 0 a gridRows - 1; modo grid.-
colSpanintegernão-Quantas colunas da grelha o widget ocupa; modo grid.-
rowSpanintegernão-Quantas linhas da grelha o widget ocupa; modo grid.-
dataConfigjsonnã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.-
displayConfigjsonnão{}Config de aparência do widget, de forma livre por category/subtype. Opaco: transporta dados do utilizador e nenhum resolvedor entra aqui.-
sourceTemplateIdstringnã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

ChaveTipoObrigatórioOmissãoDescriçãoReferência
combinatorenumerationnão"and"Como se combinam as regras do grupo: and exige todas, or basta uma.-
ruleslist de mapnão-As regras do grupo.-
groupslist de mapnão-Subgrupos aninhados, com a mesma forma.-

widgets[].localFilters.rules[]

Cada elemento de widgets[].localFilters.rules é um objeto:

ChaveTipoObrigatórioOmissãoDescriçãoReferência
idstringnão-Identificador da regra, gerado pela app. Opaco: transporta dados do utilizador e nenhum resolvedor entra aqui.-
columnNamestringnão-Coluna da feature do widget, POR NOME.coluna de featureId (nome)
operatorstringnão-Operador da comparação.-
valuestringnão-Valor da comparação: dado de utilizador. Opaco: transporta dados do utilizador e nenhum resolvedor entra aqui.-
secondValuestringnã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:

ChaveTipoObrigatórioOmissãoDescriçãoReferência
combinatorenumerationnão"and"Como se combinam as regras do subgrupo.-
ruleslist de mapnão-As regras do grupo.-
groupslistnã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:

ChaveTipoObrigatórioOmissãoDescriçãoReferência
idstringnão-Identificador da regra, gerado pela app. Opaco: transporta dados do utilizador e nenhum resolvedor entra aqui.-
columnNamestringnão-Coluna da feature do widget, POR NOME.coluna de featureId (nome)
operatorstringnão-Operador da comparação.-
valuestringnão-Valor da comparação: dado de utilizador. Opaco: transporta dados do utilizador e nenhum resolvedor entra aqui.-
secondValuestringnã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

ChaveTipoObrigatórioOmissãoDescriçãoReferência
combinatorenumerationnão"and"Como se combinam as regras do grupo: and exige todas, or basta uma.-
ruleslist de mapnão-As regras do grupo.-
groupslist de mapnão-Subgrupos aninhados, com a mesma forma.-

widgets[].globalFilters.rules[]

Cada elemento de widgets[].globalFilters.rules é um objeto:

ChaveTipoObrigatórioOmissãoDescriçãoReferência
idstringnão-Identificador da regra, gerado pela app. Opaco: transporta dados do utilizador e nenhum resolvedor entra aqui.-
columnNamestringnão-Coluna da feature do widget, POR NOME.coluna de featureId (nome)
operatorstringnão-Operador da comparação.-
valuestringnão-Valor da comparação: dado de utilizador. Opaco: transporta dados do utilizador e nenhum resolvedor entra aqui.-
secondValuestringnã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:

ChaveTipoObrigatórioOmissãoDescriçãoReferência
combinatorenumerationnão"and"Como se combinam as regras do subgrupo.-
ruleslist de mapnão-As regras do grupo.-
groupslistnã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:

ChaveTipoObrigatórioOmissãoDescriçãoReferência
idstringnão-Identificador da regra, gerado pela app. Opaco: transporta dados do utilizador e nenhum resolvedor entra aqui.-
columnNamestringnão-Coluna da feature do widget, POR NOME.coluna de featureId (nome)
operatorstringnão-Operador da comparação.-
valuestringnão-Valor da comparação: dado de utilizador. Opaco: transporta dados do utilizador e nenhum resolvedor entra aqui.-
secondValuestringnã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:

ChaveTipoObrigatórioOmissãoDescriçãoReferência
idstringsim-Identificador do filtro, escrito pelo administrador; é o que os widgets citam no sentinela ${id}.-
labelstringsim-Nome do filtro na barra de cima.-
descriptionstringnão""Ajuda mostrada a par do campo do filtro.-
dataTypeenumerationnão"string"Tipo do valor, que escolhe o campo desenhado na barra de filtros.-
defaultValuejsonnão-Valor inicial do filtro: dado de utilizador (pode ser uma DateReference relativa). Opaco: transporta dados do utilizador e nenhum resolvedor entra aqui.-
showInFrontendbooleannãotrueMostra 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.