The main objective of the Graph Viewer is to allow other applications to display customized graph within Fluig. In order to do that, the application just has to register your graph service in Fluig and provide two rest methods. One that will provide the configuration parameters of the graph, and another that will provide the data.

The Graph Viewer allows to display in the following formats: table, column chart and pie chart.


1. Register the data service in Fluig.

To register the graph data service, just send an asynchronous message to Fluig.

The developer must use the event "REGISTER_CHART_SERVICE". You need to pass an object type ChartServiceVO with the data of the data service in question.

The object ChartServiceVO, available in package com.totvs.technology.wcm.common.chart, is composed by the following elements:
String id: graph service code
String description: graph service description
String ParametersRest: URL of the rest service that will return the parameters
String dataRest: URL of the rest service that will return the graph data

Example:

ChartServiceVO ecm1 = new ChartServiceVO("ECM1", "ECM - Volumes: Space Used (Per Volume in %)");
ecm1.setDataRest(“http://localhost:8080/portal/ecm/api/rest/ecm/volume/chartDataByVolume");
ecm1.setParametersRest(“http://localhost:8080/portal/ecm/api/rest/ecm/volume/chartParametersByVolume");
IntegrationUtil.sendAsyncMessage(WCMAsyncEvents.REGISTER_CHART_SERVICE.getEvent(), ecm1);

This record must be run each time the application is deployed, that is, every time Fluig is up. In order to do that, we suggest that a servlet is created in your application with the option loadOnStartup = 1, which will perform this task.

2. Parameter Services 

This rest service must return a list of ChartParameterVO, which will contain the parameters that your data service will need to supply the graph data. Based on this service, Fluig will build the configuration screen.

ChartParameterVO (com.totvs.technology.wcm.common.chart package) is composed by the following elements:
int code id: sequential numeric code that will be used for subsequent data search
String title: field name as it will appear on the screen
String type: field type (ChartParameterVO.TYPE_STRING, ChartParameterVO.TYPE_NUMBER, ChartParameterVO.TYPE_DATA or ChartParameterVO.TYPE_BOOLEAN)
String AllowedList:iIf the field is of the string type, options can be provided for the user to select from a list. These options are separated by ";"
boolean multipleSelection - > true/false, if it allows multiple selection or not, if AllowedList is in use
String value - > Initial value, if any

Example:
List<ChartParameterVO> params = new ArrayList<>();
ChartParameterVO param1 = new ChartParameterVO();
param1.setCode(1);
param1.setTitle("Código do Item");
param1.setType(ChartParameterVO.TYPE_STRING);
param1.setAllowedList(“Item 1;Item 2;Item 3”);
param1.setMultipleSelection(ChartParameterVO.SELECTION_UNIQUE);
params.add(param1);

ChartParameterVO param2 = new ChartParameterVO();
param2.setCode(2);
param2.setTitle("Display only active items");
param2.setType(ChartParameterVO.TYPE_BOOLEAN);
params.add(param2);
return params;


3. Data Service

The REST service must return a
ChartVO, with the data to display the graph.
ChartVO (com.totvs.technology.wcm.common.chart package) is composed by the following elements:
String title: title that will be displayed in the graph
String description: graph description
String type: graph type (ChartTypes.column.getName(), ChartTypes.pie.getName(), ChartTypes.table.getName()
Map<String, Object>[] source: graph data
ChartCategoryVO category: categories
ChartSerieGroupVO[] seriesGroups: groups of series

Example for a Pie chart:

ChartVO result = new ChartVO("Espaço utilizado", "Volume " + codVolFisic,ChartTypes.pie.getName());
Map<String, Object>[] source = new Map[2];
Map<String, Object> data0 = new HashMap<String, Object>();
data0.put("label","Utilizado");
data0.put("size",80);
source[0] = data0;

Map<String, Object> data1 = new HashMap<String, Object>();
data1.put("label","Livre");
data1.put("size",20);
source[1] = data1;
result.setSource(source);

ChartSerieGroupVO[] seriesGroups = new ChartSerieGroupVO[1];
ChartSerieGroupVO serieGroup = new ChartSerieGroupVO(ChartTypes.pie.getName(),"label");
ChartSerieVO[] series = new ChartSerieVO[1];
ChartSerieVO serie = new ChartSerieVO("size","label");
series[0] = serie;
serieGroup.setSeries(series);
seriesGroups[0] = serieGroup;

result.setSeriesGroups(seriesGroups);
return result;

Example for a Column chart:
ChartVO result = new ChartVO("Espaço utilizado","Todos os volumes",ChartTypes.column.getName());

Map<String, Object>[] source = new Map[2]; 

Map<String, Object> data0 = new HashMap<String, Object>();
data0.put("label",”Item 1”);
data0.put("total",100);
data0.put("used",40);
data0.put("free",60);
source[0] = data0;

Map<String, Object> data0 = new HashMap<String, Object>();
data0.put("label",”Item 2”););
data0.put("total",120);
data0.put("used",60);
data0.put("free",60);
source[1] = data0;

result.setSource(source);

ChartCategoryVO category = new ChartCategoryVO("label");
result.setCategory(category);

ChartSerieGroupVO[] seriesGroups = new ChartSerieGroupVO[1];
ChartSerieGroupVO serieGroup = new ChartSerieGroupVO(ChartTypes.column.getName(),"Espaço(Mb)");

ChartAxiVO axis = new ChartAxiVO(20,true,"Espaço(Mb)");
serieGroup.setValueAxis(axis);

ChartSerieVO[] series = new ChartSerieVO[3];

ChartSerieVO total = new ChartSerieVO("total","Espaço Total");
series[0] = total;

ChartSerieVO used = new ChartSerieVO("used","Espaço Utilizado");
series[1] = used;

ChartSerieVO free = new ChartSerieVO("free","Espaço Livre");
series[i] = free;

serieGroup.setSeries(series);
seriesGroups[0] = serieGroup;

result.setSeriesGroups(seriesGroups);

return this.buildResponse(result);

Example for a Table chart:

ChartVO result = new ChartVO("Espaço utilizado","Todos os volumes",ChartTypes.table.getName());

Map<String, Object>[] source = new Map[2];

Map<String, Object> data0 = new HashMap<String, Object>();
data0.put("label",”Item 1”);
data0.put("total",100);
data0.put("used",40);
data0.put("free",60);
source[0] = data0;

Map<String, Object> data0 = new HashMap<String, Object>();
data0.put("label",”Item 2”););
data0.put("total",120);
data0.put("used",60);
data0.put("free",60);
source[1] = data0;

result.setSource(source);

ChartSerieGroupVO[] seriesGroups = new ChartSerieGroupVO[1];

ChartSerieGroupVO serieGroup = new ChartSerieGroupVO(ChartTypes.table.getName(),"Espaço(Mb)");      

ChartAxiVO axis = new ChartAxiVO(20,true,"Espaço(Mb)");

serieGroup.setValueAxis(axis);

ChartSerieVO[] series = new ChartSerieVO[4];

ChartSerieVO label = new ChartSerieVO("label","Item");
series[0] = label;

ChartSerieVO total = new ChartSerieVO("total","Espaço Total");
series[1] = total;

ChartSerieVO used = new ChartSerieVO("used","Espaço Utilizado");
series[2] = used;

ChartSerieVO free = new ChartSerieVO("free","Espaço Livre");
series[3] = free;

serieGroup.setSeries(series);
seriesGroups[0] = serieGroup;

result.setSeriesGroups(seriesGroups);

return this.buildResponse(result);

  • No labels