Gráficos
A visualização em gráfico se comporta de maneira semelhante à visualização em relatório.
No entanto, devido ao dinamismo da construção de um gráfico, é utilizado um método implementado pelo desenvolvedor para se montar parte de suas definições. O método se chama onGetOptions e sua implementação na definição da visualização é obrigatória. Esse método recebe o objeto de visualização sendo construído e deve retornar um objeto JSON com as opções para a construção de um gráfico.
As opções que o objeto pode conter estão documentadas em http://www.highcharts.com/ref. É obrigatória a passagem das opções ‘chart’ e ‘title’.
Segue um exemplo da definição de um DataSourceVisualization do tipo ‘highcharts’:
{
type: 'highcharts',
dataSourceQuery: -1891504223, /* Usuários habilitados.idsq */
filters: [
{name: "begin", label: "Data inicial", required: true},
{name: "end", label: "Data final", required: true}
],
onGetOptions: function (dsv, ds) {
const countByStatus = {};
ds.iterate(function (record) {
const status = record.u_istatus_iname;
const count = countByStatus[status] || 0;
countByStatus[status] = count + 1;
});
const categories = [];
const data = [];
for (const key in countByStatus) {
categories.push(key);
data.push(countByStatus[key]);
};
return {
chart: {
defaultSeriesType: 'column'
},
title: {
text: dsv.title
},
xAxis: {
title: 'Usuários por status',
categories: categories
},
yAxis: {
title: {
text: 'Quantidade'
}
},
series: [
{
name: 'Usuários',
data: data
}
]
};
}
}
Caso o usuário queira customizar o tooltip (dica que aparece quando o mouse é posicionado sobre um ponto do gráfico) basta adicionar a propriedade “hints” às séries. Por exemplo:
{
type: 'highcharts',
dataSourceQuery: -1891504223, /* Usuários habilitados.idsq */
filters: [
{name: "begin", label: "Data inicial", required: true},
{name: "end", label: "Data final", required: true}
],
onGetOptions: function (dsv, ds) {
var countByStatus = {};
ds.iterate(ds, function (record) {
const status = record.u_istatus_iname;
const count = countByStatus[status] || 0;
countByStatus[status] = count + 1;
});
const categories = [];
const data = [];
for (const key in countByStatus) {
categories.push(key);
data.push(countByStatus[key]);
}
return {
chart: {
defaultSeriesType: 'column'
},
title: {
text: dsv.title
},
xAxis: {
title: 'Usuários por status',
categories: categories
},
yAxis: {
title: {
text: 'Quantidade'
}
},
series: [
{
name: 'Framework',
data: [40, 30, 50],
hints: ["Serie 1 Customização 1", "Serie 1 Customização 2", "Serie 1 Customização 3"]
},
{
name: 'Engine',
data: [1, 20, 40],
hints: ["Serie 2 Customização 1", "Serie 2 Customização 2", "Serie 2 Customização 3"]
}
]
};
}
}
Vale observar que cada valor do array de “hints” será atribuído ao valor presente no array “data” na posição correspondente. Então, se o cursor for posicionado no valor 40 da série “Framework”, o valor mostrado no tooltip será “Serie 1 Customização 1”.
Observações:
- A definição da visualização em gráfico deve declarar o tipo ‘highcharts’.
- Atualmente, não é suportado o uso de funções como parâmetros para eventos ou opções no objeto retornado no método onGetOptions.