Índice
Índice |
---|
outline | true |
---|
style | none |
---|
exclude | .*ndice |
---|
style | none |
---|
|
Objetivo
El propósito de esta guía es describir el desarrollo, la publicación y la visualización de informes en TOTVS Fluig Plataforma,y para facilitar su comprensión se detallará un ejemplo de informe de usuario.
Entorno de desarrollo
Para el desarrollo de informes es necesario tener Java™ JDK/JRE superior a 1.6. Dirección para download: http://java.sun.com/javase/downloads/index.jsp.
TOTVS Fluig Plataforma utilizar BIRT como motor de ejecución de informes, por eso para el desarrollo de informes se debe utilizar el estándar y la metodología de BIRT.
...
BIRT Report Designer cuenta con varias funcionalidades que ayudan en el desarrollo de informes. Entre ellas se destacan: el ajuste de layout, la configuración de acceso a datos y el formateo de informe.
Seguridad Entorno SaaS
En caso de ejecución de Fluig en entorno SaaS, no se recomienda el uso de informes, ya que se pueden crear informes que devuelvan información de otras empresas a través de la consulta JPQL o Dataset. Para garantizar la no ejecución, se debe definir el valor true para la variable SaaS ubicada en: %JBOSS_HOME%\jboss-as-7.2.0.Final\standalone\configuration\standalone.xml. Ej:
Bloco de código |
---|
<simple name="java:global/webdesk/SaaS" value="true"/> |
...
Conexión directa a la base de datos
...
Utilice en su informe las siguientes configuraciones prestando atención a los valores de las propiedades 'odaDriveClass' y 'odaURL'.
Para realizar una conexión directa con la base de datos SQLServer es necesario utilizar el siguiente estándar:
Bloco de código |
---|
language | html/xml |
---|
title | SQLServer |
---|
|
<property name="odaDriverClass">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
<property name="odaURL">jdbc:sqlserver://IP:1433;databaseName=DATABASE</property> |
Para realizar una conexión directa con la base de datosMySQL es necesario utilizar el siguiente estándar:
Bloco de código |
---|
language | html/xml |
---|
title | MySQL |
---|
|
<property name="odaDriverClass">com.mysql.jdbc.Driver</property>
<property name="odaURL">jdbc:mysql://IP:3306/databaseName=DATABASE</property> |
...
Desarrollo de un informe de Usuarios
...
Figura 1 - Creación de informe en el proyecto Fluig.
...
Configuración de acceso a los datos
...
Deck of Cards |
---|
effectDuration | 0.5 |
---|
history | false |
---|
id | samples | history | false |
---|
effectType | fade |
---|
|
Card |
---|
default | true |
---|
id | 1 |
---|
label | Paso 1 |
---|
| |
- Al crear el nuevo informe, seleccione la perspectiva Report Design y luego la pestaña Data Explorer, haga clic con el botón derecho del mouse sobre el ítem Data Source a continuación, seleccione la opción New Data Source.
Figura 5 - Nuevo Data Source.
|
Card |
---|
|
- Al abrir la ventana New Data Source, seleccione la opción Scripted Data Source y defina el nombre dsColleague como Data Source Name a continuación haga clic en el botón Finalizar.
Figura 6 - Tipo de Data Source.
|
Card |
---|
|
Figura 7 - Nuevo Data Set.
|
Card |
---|
| |
Column Name | Data Type | Column Alias | Display Name | colleagueId | String | Vacío | Vacío | Login | String | Vacío | Vacío | colleagueName | String | Vacío | Vacío | E-mail | String | Vacío | Vacío | active | String | Vacío | Vacío | adminuser | String | Vacío | Vacío |
Figura 8 - Columnas del Data Set.
|
|
Inclusión de parámetros en el informe
...
Deck of Cards |
---|
effectDuration | 0.5 |
---|
history | false |
---|
id | samples |
---|
history | false |
---|
effectType | fade |
---|
|
Card |
---|
default | true |
---|
id | 1 |
---|
label | Paso 1 |
---|
| |
- Selecione la pestaña Data Explorer, a continuación haga clic con el botón derecho del mouse en el ítem Report Parameters, seleccione la opción New Parameter.
Figura 9 - Parámetros del Informe.
|
Card |
---|
| |
Figura 10 - Configuración de parámetros.
Al abrir la ventana New Parameter incluya los siguientes parámetros:
Matrícula | |
---|
Name | Matrícula | Prompt text | Matrícula del Usuario o "*" para mostrar todos | Data type | String | Display type | Text Box | Is Required | true |
Muestra Usuarios | |
---|
Name | paramEnable | Prompt text | Mostrar usuarios | Data type | String | Display type | List Box | Is Required | true |
Selection Values | |
---|
* | Todos | true | Activos | false | Inactivos |
Ordenar Por | |
---|
Name | paramSort | Prompt text | Ordenar por | Data type | String | Display type | List Box |
Selection Values | |
---|
c.colleaguePK.colleagueId | Matrícula | c.collegueName | Nombre | c.login | Login |
|
|
TAG's
TOTVS Fluig Plataforma ofrece TAG’s de reemplazo que ayudan al desarrollo y la seguridad de la generación de información del informe, estas son:
• ${WKCompany}: sustituye a la variable por el código de la empresa autenticada en TOTVS Fluig Plataforma.
• ${WKUser}: sustituye a la variable por el código del usuario autenticado en TOTVS Fluig Plataforma.
Las TAG’s son útiles en los casos de información que sólo deben generarse sobre la empresa en la cual el usuario está autenticado, o en informes que muestran sólo información sobre el usuario autenticado en TOTVS Fluig Plataforma.
Completar el Data Set
En el ejemplo que se presenta en este documento se completará el informe a través de datos proporcionados por consultas JPA ingresando a la base de TOTVS Fluig Plataforma, pero se pueden utilizar otros recursos para completar el Data Set: XML, Web Service y JDBC.
...
A través de los eventos se puede desarrollar la lógica de consulta y generación de datos a través del lenguaje de programación JavaScript, también es posible utilizar varios recursos y bibliotecas del lenguaje Java ™.
Deck of Cards |
---|
effectDuration | 0.5 |
---|
history | false |
---|
id | samples |
---|
history | false |
---|
effectType | fade |
---|
|
Card |
---|
default | true |
---|
id | 1 |
---|
label | Initialize |
---|
| |
- Seleccione la pestaña Script en la página del informe y a continuación seleccione el evento initialize, incluya el siguiente código como muestra la figura 11:
Bloco de código |
---|
| importPackage(Packages.com.datasul.technology.webdesk.dataset.service);
importPackage(Packages.com.datasul.technology.webdesk.dataset);
importPackage(Packages.com.datasul.technology.webdesk.search.controller);
importPackage(Packages.java.util);
var count = 0;
var dataset = null;
|
Figura 11 - Evento initialize.
El código anterior importa las bibliotecas Java ™ y la biblioteca proporcionada por Fluig para consultar los datos de productos, y además realizar la inicialización de las variables utilizadas en el informe. Detalles sobre el código: - importPackage: comando responsable de la importación de bibliotecas Java™.
- Package.java.util: biblioteca responsable de las Clases utils de Java™.
- Packages.com.datasul.technology.webdesk.dataset.service: biblioteca ofrecida por Fluig para consultar la base de datos del producto.
|
Card |
---|
| |
- Seleccione la pestaña Data Explorer, abra el ítem Data Sets y haga clic en colleagueDataSet, a continuación haga clic en la pestaña Script y luego seleccione el evento beforeOpen e incluya el siguiente código, como se muestra en la figura 12.
Bloco de código |
---|
| try{
var factory = DatasetFactory.getInstance(${WKCompany});
var constraints = new Array();
var sortingFields = new Array();
var i = 0;
//Filtra sólo por la matrícula del colaborador informado
if(params["Matricula"].value != null && params["Matricula"].value != "*") {
constraints[i] = factory.createConstraint("colleaguePK.colleagueId", params["Matricula"].value, params["Matricula"].value, ConstraintType.MUST);
i++;
}
//Filtra activos si está seleccionada
if(params["paramEnable"].value != null && params["paramEnable"].value != "*"){
constraints[i] = factory.createConstraint("active", params["paramEnable"].value, params["paramEnable"].value, ConstraintType.MUST);
i++;
}
//Ordena según la selección
if(params["paramSort"].value != null && params["paramSort"].value != "*"){
sortingFields[0] = params["paramSort"].value;
}
//Dataset
dataset = factory.getDataset("colleague", null, constraints, sortingFields);
}catch (e) {
}finally {
}
|
Figura 12 - Evento BeforeOpen.
El código anterior presenta la consulta del informe a través de la consulta por dataset e incluye los filtros de la solicitud de acuerdo con los parámetros definidos por el usuario. Detalles sobre el código: - ${WKCompany}: TAG ofrecida por Fluig, devuelve el código de la empresa en la cual el usuario está autenticado;
- params["Matricula"]: parámetro de informe, devuelve el código de la matrícula definido por el usuario;
- params["paramEnable "]: parámetro de informe, devuelve el tipo de usuario;
- params["paramSort "]: parámetro de informe, devuelve el modo de ordenar;
|
Card |
---|
| - Para incluir el resultado de la consulta en el Data Set y formatear los datos del informe, seleccione el evento fetch en el área de Script e incluya el siguiente códigocomo se muestra en la figura 13.
Bloco de código |
---|
| if (dataset != null) {
if (count < dataset.rowsCount){
//instala el objeto de la línea
row["colleagueId"] = dataset.getValue(count, "colleaguePK.colleagueId");
row["login"] = dataset.getValue(count, "login");
row["colleagueName"] = dataset.getValue(count, "colleagueName");
row["mail"] = dataset.getValue(count, "mail");
if(dataset.getValue(count, "active") == true){
row["active"] = "Sí";
}else{
row["active"] = "No";
}
//Actualiza el contador
count++;
return true;
}
return false;
} |
Figura 13 - Evento fetch. |
|
Obtención de datos por conexión JDBC
...
Deck of Cards |
---|
effectDuration | 0.5 |
---|
history | false |
---|
id | samples | history | false |
---|
effectType | fade |
---|
|
Card |
---|
default | true |
---|
id | 1 |
---|
label | Paso 1 |
---|
| |
Seleccione la pestaña Data Explorer, haga clic con el botón derecho del mouse en el ítem Data Source y a continuación, seleccione la opción New Data Source como se muestra en la figura 14.
Figura 14 – Nuevo Data Source
|
Card |
---|
| |
Al abrir la ventana New Data Source, seleccione la opción JDBC DataSource y defina el nombre JDBC-DataSource como Data Source Name a continuación, haga clic en el botón Next, como muestra la figura 15.
Figura 15 – Tipo Data Source
|
Card |
---|
|
En la siguiente ventana se debe configurar la conexión a la base de datos. En el campo Driver Class seleccione el driver de conexión a la base de datos, en este caso, la conexión se realizará a la base MySQL®. Si el driver necesario no está en la lista, simplemente debe agregarlo haciendo clic en Managed Drivers... Informe también los valores de Database URL, User Name y Password de acuerdo a la base de datos elegida, como muestra la figura 16.
Figura 16 – Configuración de la conexión con base de datos.
|
Card |
---|
|
En la pestaña Data Explorer haga clic con el botón derecho del mouse sobre el ítem Data Sets a continuación, haga clic en la opción New Data Set.
Figura 17 – Creación del Nuevo Data Set.
|
Card |
---|
|
- Seleccione DataSource creado (JDBC-DataSource), en el campo Data Set Type seleccione SQL Select Query, informe un nombre para el Data Set y haga clic en next, como muestra la figura 18.
Figura 18 – Configuración del Data Set.
|
Card |
---|
|
- En la siguiente pantalla informe a SQL que busca los datos en la base de datos, en este ejemplo, se buscarán los volúmenes de la empresa autenticada en TOTVS Fluig Plataforma.
Figura 19 – Creación de Query SQL
Bloco de código |
---|
| SELECT vol_fisic.CD_VOL_FISIC,
vol_fisic.COD_EMPRESA,
vol_fisic.NOM_DIR_FISIC,
vol_fisic.ID_TIP_VOL_FISIC
FROM vol_fisic
WHERE vol_fisic.COD_EMPRESA = ${WKCompany} |
Informações |
---|
| Puede ocurrir algún error al finalizar la creación del Data Set ya que la TAG ${WKCompany} no existe en el contexto de BIRT. La siguiente figura muestra el error debido al uso de la TAG, se trata de un error de sintaxis en SQL e indica que ${WKCompany} no es un comando SQL. Pero cuando el informe se ejecuta en Fluig, devuelve el código de la empresa normalmente, así la TAG se reemplazará por el código de la empresa del usuario autenticado en TOTVS Fluig Plataforma, corrigiendo el error de sintaxis..
Figura 20 – Error de Birt por el uso de la TAG ${WKCompany} |
|
|
Nota |
---|
|
La creación de informe en Birt usando conexión JDBC exige atención con respecto a la seguridad de la publicación del informe en Fluig, ya que el archivo .rptdesign (XML de informe Birt) deja expuestos los parámetros de conexión a la base de datos, pero el campo contraseña queda oculto con base64. Por este motivo y por la facilidad de búsqueda de información de Fluig, siempre recomendamos crear informes con fuentes de datos a través de Dataset de Fluig o Query JPA. Si la creación de informes utilizando JDBC es necesaria, se recomienda que cuando se publica un informe en Fluig la configuración de permisos se defina como sólo lectura. Los usuarios que poseen permiso de mantenimiento pueden realizar el download de los adjuntos y por lo tanto tendrán acceso a los datos de conexión a la base de datos. |
Formatear la visualización del informe
...
Deck of Cards |
---|
effectDuration | 0.5 |
---|
history | false |
---|
id | samples | history |
---|
false | effectType | fade |
---|
|
Card |
---|
default | true |
---|
id | 1 |
---|
label | Componente Image |
---|
| |
Es posible incluir imágenes de internet, incluir imágenes de archivo o incluso integrar la imagen en XML del informe. En este ejemplo, se utilizará una imagen adjunta para posteriormente mostrar cómo publicar informes con adjuntos. Arraste un componente Image en el informe, al abrir la ventana Edit Image Ítem, seleccione la opción Image file in shared resources, seleccione el archivo de imagen en la opción Enter resource file e a continuación, haga clic en el botón Insert.
Figura 22 – Componente Image.
|
Card |
---|
| |
Bloco de código |
---|
| <br>
<a href="http://www.fluig.com/">http://www.fluig.com/</a>
<br><b>E-mail:</b> <a href="mailto:[email protected]">[email protected]</a>
<br><b>Telefone:</b> 0800 882 9191
<br> |
Figura 23 - Componente Text.
|
Card |
---|
|
- Arraste un componente Label en el informe, haga doble clic sobre el componente incluido e ingrese Informe de Usuarios, en la pestaña Property Editor - Label -> General defina el formato de label, como muestra la figura 24.
Figura 24 - Título del informe.
|
Card |
---|
| |
- Arraste un componente Table, al abrir la ventana Insert Table defina 6 columnas y 1 detalle y, haga clic en el botón OK como muestra la figura 25.
Figura 25 - Configuración de la Tabla.
|
Card |
---|
id | 5 |
---|
label | Lables para Table |
---|
|
En la tabla agregada al informe incluya un componente Label para cada columna de la línea Header Row defina los siguientes valores: - Matrícula.
- Nombre.
- Login.
- E-mail.
- Activo.
- Administrador.
Formatee las labels incluidas definiendo el color de la fuente y el color del fondo como muestra la figura 26.
Figura 26 - Título de las Columnas. |
|
Renderización de datos del Data Set
Seleccione la pestaña Data Explorer y abra colleagueDataSet creado anteriormente y, a continuación arrastre cada ítem del Data Set a la columna Detail Row de la tabla creada anteriormente, como muestra la figura 27.
Figura 27 - Data Set.
Publicación de Informes
Publicación
Al completar el desarrollo del informe, es necesario realizar la exportación del mismo para la navegación de documentos TOTVS Fluig Plataforma.
Deck of Cards |
---|
effectDuration | 0.5 |
---|
history | false |
---|
id | samples | history | false |
---|
effectType | fade |
---|
|
Card |
---|
default | true |
---|
id | 1 |
---|
label | Paso 1 |
---|
|
Para ello, haga clic sobre la carpeta del informe con el botón derecho del mouse y presione Exportar.
Figura 28 – Exportación de Informe.
Informações |
---|
| Los adjuntos se exportan junto con el informe. En la exportación, el archivo .rptdesign se identifica automáticamente como archivo principal, y los otros archivos se clasifican como adjunto. |
|
Card |
---|
| |
En la pantalla de Exportación, haga clic sobre Expotar al servidor Fluig y a continuación, presione Avanzar.
Figura 29 – Exportación de informe.
|
Card |
---|
| |
En la pantalla Exportar Informe, es necesario informar el nombre del Servidor, identificar si será la publicación de un Nuevo Informe, definir el nombre del informe, la Carpeta de Destino (como en la imagen se informó el código de la carpeta de destino) y, a continuación, mencionar el tipo de Versión (como se está realizando una nueva publicación, se debe seleccionar Mantener Actual).
Figura 29 – Exportación de informe.
|
Card |
---|
| |
- En la carpeta Informe de la Navegación de Documentos se podrá observar que el informe se publicó con éxito.
Figura 29 – Publicación de informe. |
|
Visualizador de Informes
Después de completar la publicación, para poder verla, haga clic en el informe en la carpeta en el cual se hizo la publicación en TOTVS Fluig Plataforma.
Una nueva ventana se abrirá, para iniciar la ejecución del informe de colaboradores desarrollado previamente, se necesita la inclusión de parámetros, defina sus valores y a continuación haga clic en el botón OK .
...
Figura 33 – Informe de Usuarios– Resultado.
El informe deberá mostrar todos los usuarios registrados en TOTVS Fluig Plataforma para la empresa en la cual el usuario está autenticado.
...
Figura 33 – Relatório de Usuários– Resultado.
...
Opciones del visualizador
...
Fluig soporta a través de consultas JPA y su base de datos, el uso de las funciones de agregación, como por ejemplo: AVG, SUM, COUNT, MAX y MIN. Permite también utilizar agrupaciones: GROUP BY y HAVING
Tabla de entidades
La siguiente tabla hace referencia a la relación entre el código de dataset, la entidad de persistencia JPA usada en las consultas, y la tabla correspondiente a la base de datos. Las columnas de las entidades de persistencia son las mismas presentadas en dataset.
Código dataset | Entidad JPA | Tabla base de datos |
AccessLog | AccessLog | HISTOR_ACES |
ActivityDim | ActivityDim | ACTIVITY_DIM_CAP |
advancedProcessProperties | AdvancedProcessProperties | PROPRIED_AVANCAD_PROCES |
businessPeriod | BusinessPeriod | PERIOD_EXPED |
destinationArea | DestinationArea | AREA_DEST |
document | Document | DOCUMENTO |
documentSecurityConfig | DocumentSecurityConfig | CONFIGUR_SEGUR_DOCTO |
FactActivityCost | FactActivityCost | FACT_ACTIVITY_COST_CAP |
FactFlowVolume | FactFlowVolume | FACT_FLOW_VOLUME_CAP |
FactProcesCost | FactProcesCost | FACT_PROCES_COST_CAP |
FactProcesVolume | FactProcesVolume | FACT_PROCES_VOLUME_CAP |
FlowDim | FlowDim | FLOW_DIM_CAP |
globalCalendar | GlobalCalendar | CALEND_GLOBAL |
knowledge | Knowledge | CONOCIMIENTO |
processAttachment | ProcessAttachment | ANEXO_PROCES |
processDefinition | ProcessDefinition | DEF_PROCES |
processDefinitionVersion | ProcessDefinitionVersion | VERS_DEF_PROCES |
processHistory | ProcessHistory | HISTOR_PROCES |
processState | ProcessState | ESTADO_PROCES |
processTask | ProcessTask | TAR_PROCES |
ProcesVersionDim | ProcesVersionDim | PROCES_VERSION_DIM_CAP |
TimeDim | TimeDim | TIME_DIM_CAP |
topic | Topic | ASUNTO |
UserDim | UserDim | USER_DIM_CAP |
workflowProcess | WorkflowProcess | PROCES_WORKFLOW |
Exemplo de Utilização
Bloco de código |
---|
|
importPackage(Packages.com.datasul.technology.webdesk.dataset.service);
importPackage(Packages.java.util);
var qd = null;
var rs = null;
var rowMap = null;
var sqlJpa = "";
qd = new QueryDelegate();
sqlJpa = "SELECT count(d.documentPK.documentId), d.publisherId from Document d WHERE
d.documentPK.companyId = ${WKCompany} GROUP BY d.publisherId";
rs = qd.getResultQuery(sqlJpa);
var rowMap = rs.get(0);
//Busca el valor de Count
rowMap.get("d.publisherId");
//Busca el Código del documento
rowMap.get("count(d.documentPK.documentId)"); |
...
A partir de la clase DatasetFactory se puede accede a los datos de formularios publicados en Fluig.
Para llenar un informe a través de datos del fichero es necesario importar las siguientes bibliotecas:
Bloco de código |
---|
|
importPackage(Packages.com.datasul.technology.webdesk.dataset.service);
importPackage(Packages.com.datasul.technology.webdesk.dataset);
importPackage(Packages.com.datasul.technology.webdesk.search.controller); |
Devolución de datos del formulario
...
Bloco de código |
---|
|
//Instala las constraints para consulta
var factory = DatasetFactory.getInstance(${WKCompany});
//Filtra Clientes de 1 a 5
var c1 = factory.createConstraint("cod_cli", "1", "5",ConstraintType.MUST);
var constraints = new Array(c1);
//Ordena el resultado por el nombre del Cliente
var sortingFields = new Array("name_cli");
dataset = factory.getDataset("cad_cli", null, constraints, sortingFields); |
...
El ejemplo anterior invoca el método getDataSet pasando algunos argumentos adicionales como parámetros:
...