Crear y editar sinópticos con API Javascript

INTRODUCCIÓN

Nos apoyamos en el api Javascript de los dashboards, en el siguiente enlace vemos como usarla, por lo que aqui describiremos los mensajes necesarios para dar el contenido a los elementos del sinóptico

https://onesaitplatform.atlassian.net/l/c/cAMRAsgJ

 

ABRIR SINÓPTICO

Al abrir el sinóptico en modo edición, nos aparecerá el editor del sinóptico donde podremos añadir elementos y modificar sus propiedades.

OCULTAR EDITOR

En primer lugar veremos el mensaje para mostrar y ocultar el editor.

var message = ' {"command":"hideShowSynopticEditor", "authorization":"' + token + '", "information":{"dashboard":"' + ide + '"}}'; iframeEl.contentWindow.postMessage(message, "*");

donde ide es el identificador del dashboard, token el token de seguridad

TIPOS DE ELEMENTOS

Podemos crear tres tipos de elementos:

Label: texto que será remplazado por el valor del campo del datasource que se indique, se puede indicar los colores para el valor de corte, el texto inicial y las unidades.

Progress bar: barra de progreso le podemos asignar los colores para el valor de corte, y los valores max , min y el tipo para indicar como debe crecer

Indicator: a un elemento circulo, rectángulo, … le indicamos los colores para el valor de corte así cambiará de color dependiendo del valor.

El tipo se indica en esta propiedad "classType":

Pueden ser "label", "progress_bar" o "indicator"           

Para añadir funcionalidad a los elementos, como indicar que muestre el valor de un parámetro de un datasource lo que tenemos que hacer es clicar un elemento.

Esto nos envía los siguientes mensajes:

 

//Ejemplo datos devueltos al seleccionar un elemento con datos //dashboardMessageHandler getSynopticElementDataSource{ "command": "getSynopticElementDataSource", "information": { "refresh": 20, "ontology": "HelsinkiPopulation", "dataSource": "synopticdatasource_administrator_1568885107792", "synopticElement": { "id": "svg_2", "aggregationType": "MAX", "aggregationField": "Helsinki.year", "projectionField": "Helsinki.year", "where": null, "classType": "label", "color": { "colorOn": "#006400", "colorOff": "#DC143C", "cutValue": "2000" }, "condition": { "maxValue": "100", "minValue": "20", "orgSize": null, "type": "vertical" }, "typeElement": "text", "classTypeList": ["indicator", "label"], "aggregationList": ["NONE", "COUNT", "SUM", "MIN", "MAX", "AVG", "LASTVALUE"] } } } //Ejemplo datos devueltos al seleccionar un elemento sin datos //dashboardMessageHandler getSynopticElementDataSource { "command": "getSynopticElementDataSource", "information": { "synopticElement": { "id": "svg_1", "typeElement": "rect", "classTypeList": ["indicator", "progress_bar"], "aggregationList": ["NONE", "COUNT", "SUM", "MIN", "MAX", "AVG", "LASTVALUE"] } } }

Con esta información podremos confeccionar los mensajes devuelta con la funcionalidad que precisemos.

Podemos asignar datos a un elemento seleccionado enviando este mensaje ejemplo tipo label:

 

var message = `{ "command": "setSynopticElementDataSource", "authorization": "${token}", "information": { "dashboard": "identificationDashboard", "ontology": "HelsinkiPopulation", "refresh": 20, "synopticElement": { "aggregationType":"MAX", "aggregationField":"Helsinki.year", "projectionField":"Helsinki.year", "classType":"label", "color":{ "colorOn":"#006400", "colorOff":"#DC143C", "cutValue":"2000" }, "unitsOfMeasure":"MW" } } }`; iframeEl.contentWindow.postMessage(message, "*");

Aqui cabe destacar :

aggregationType, que puede ser “MAX”, “MIN”, “NONE”, “SUM”, “AVG”, ”COUNT”, ”LASTVALUE”

aggregationField campo por el que se realiza la agregación

projectionField campo que devolverá los datos

color en este objeto ponemos los colores y el valor de corte

unitsOfMeasure si añadimos una unidad de medida como kg lo añadirá detrás del valor

Podemos asignar datos a un elemento seleccionado si es un progress bar enviando este mensaje:

 

la diferencia principal con el mensaje anterior es el classType y que se añade esta propiedad

condition aquí pondremos los valores min, max y el tipo de crecimiento en vertical o en horizontal.

 

Podemos definir que código se lanzará para un evento definido de un elemento:

 

Podemos dar un límite y un orden a los datos devueltos por el datasource para el elemento: