Histórico da Página
Índice
Índice | ||||||
---|---|---|---|---|---|---|
|
Objetivo
El propósito de esta guía es describir el desarrollo, la publicación y la visualización de informes en Fluig,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.
Fluig 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.
Se recomienda el uso de BIRT Report Designer para el desarrollo de informes para Fluig. BIRT puede integrarse a Studio o Eclipse (ya instalado para utilizar Fluig Studio, según la Guía de Instalación Fluig Studio), sólo debe instalar el plugin de BIRT. P ara ello es necesario acceder a la opción Ayuda -> Instalar Nuevo Software y seguir los siguientes procedimientos:
- Work with: Seleccionar Indigo.
- Búsqueda: Después de enumerar las opciones de BIRT, ingresar Birt en el campo de búsqueda.
- Marcar la casilla de selección de Business Intelligence, Reporting and Charting.
- A continuación, presionar Avanzar.
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
Se pueden publicar informes que se comuniquen directamente con 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 | ||||
---|---|---|---|---|
| ||||
<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 | ||||
---|---|---|---|---|
| ||||
<property name="odaDriverClass">com.mysql.jdbc.Driver</property>
<property name="odaURL">jdbc:mysql://IP:3306/databaseName=DATABASE</property> |
Desarrollo de un informe de Usuarios
A través de BIRT Report Designer se pueden crear varios informes para Fluig, acceder a datos de la base de datos del producto a través de la consulta JPA, JDBC. Es posible acceder a los datos de otros productos por conexión JDBC, Web Service o archivos XML.
Para facilitar la comprensión sobre el desarrollo de informes para Fluig, se mostrará un ejemplo de creación de informes. A continuación se detallan los pasos necesarios para la creación de informe de usuarios, contando con datos proporcionados por Fluig por medio de consultas a través de dataset. La fuente del ejemplo citado se puede descargar desde el siguiente link:
Creación de un nuevo proyecto y un nuevo informe
Abra la herramienta en la que se instaló el plugin de BIRT Report Designer para seguir el paso a paso, en este ejemplo vamos a utilizar Fluig Studio.
- En el proyecto Fluig previamente creado, haga clic en el botón derecho del mouse en la carpeta reports, y a continuación en Nuevo -> Informe Fluig.
- Luego, sólo debe informar el Nombre del informe y hacer clic en Finalizar.
Figura 1 - Creación de informe en el proyecto Fluig.
Configuración de acceso a los datos
Un Data Source es el mecanismo que almacena los datos de conexión con la fuente de datos, por ejemplo, configuraciones JDBC, Web Service, entre otros. En el caso de este informe se utilizará el acceso a los datos a través de Javascript.
Siga los siguientes pasos:
Deck of Cards | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Inclusión de parámetros en el informe
Es posible incluir parámetros en el informe que se solicita al usuario antes de su renderización, ayudando al filtro de consulta de datos generando un informe específico. Siga los siguientes pasos:
Deck of Cards | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
TAG's
Fluig 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 Fluig.
• ${WKUser}: sustituye a la variable por el código del usuario autenticado en Fluig.
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 Fluig.
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 Fluig, pero se pueden utilizar otros recursos para completar el Data Set: XML, Web Service y JDBC.
BIRT renderiza el informe a través de la ejecución de sus eventos, son muchos los eventos proporcionados por BIRT, en este ejemplo se utilizarán:
- initialize: primer evento activado por BIRT, se recomienda utilizar este evento para importar bibliotecas e inicializar variables;
- beforeOpen: evento activado, antes de BIRT abrir la conexión con la fuente de datos (Data Source);
- fetch: evento activado por BIRT después de buscar cada registro en el Data Set y antes de aplicar los filtros y los campos calculados.
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 | ||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||
|
Obtención de datos por conexión JDBC
Una forma alternativa de obtención de datos para crear informes es el uso de JDBC. Es necesario crear un Data Source que se conecte a la base de datos, en él se almacenarán los datos para la conexión, a través de JDBC a la base de datos.
Deck of Cards | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
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
Se requiere la inclusión de los componentes de renderización del informe. Haga clic en la pestaña Layout para visualizar la página del informe que está en blanco y, a continuación, seleccione la pestaña Palette como muestra la figura 21.
Figura 21 – Informe en blanco.
En la pestaña Pallets se pueden incluir varios componentes de visualización y renderización de datos entre ellos se encuentran:
- Label: Texto corto y estático.
- Text: Texto largo se puede formatear con TAG’s HTML.
- Dynamic Text: Texto dinámico proveniente del Data Set.
- Image: Inclusión de imágenes.
- Grid: Formateador de datos en Grid.
- Table: Tabla de datos.
- Chart: Gráficos de torta, línea, tubo, etc.
Deck of Cards | ||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||
|
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 Fluig.
Deck of Cards | |||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||||||||||||||||||||
|
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 Fluig.
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 Fluig para la empresa en la cual el usuario está autenticado.
Figura 33 – Relatório de Usuários– Resultado.
Opciones del visualizador
La herramienta de visualización de informe de Fluig posee varias funcionalidades:
- Verificar Indice: Si el informe desarrollado posee índice es posible ponerlo en la lista.
- Ejecutar informe: Permite que el informe se ejecute nuevamente.
- Exportar datos: Exporta los datos generados del informe en archivo, permitiendo seleccionar las columnas deseadas y el separador de datos.
- Exportar informe: Convierte los datos del informe en diferentes formatos de archivos: Microsoft® Excel®, PostScript®, PDF, Microsoft® Word e Microsoft® Power Point®, permite también la selección de páginas que se exportarán.
- Imprimir informe: Imprime informe seleccionando las impresoras instaladas en el ordenador del usuario autenticado y le permite imprimir en formato DF o HTML.
- Imprimir informe en el servidor: Imprime informe desde las impresoras instaladas en el servidor de Fluig.
- Navegación de páginas: permite navegar entre las páginas del informe.
Figura 34 – Funcionalidades de visualizador de informes.
JPA - Funciones de Agregación
Funciones de Agregación
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)"); |
Acceso a datos de Formularios
Importación de bibliotecas
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
A través de la clase DatasetFactory es posible buscar datos de formularios, incluir filtros y ordenar. Ejemplo de uso:
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:
- Nombre del Dataset: Nombre del servicio de datos del formulario;
- Campos: Devuelve sólo los campos recibidos en el array informado. Si es null, devuelve todos los campos.
- Constraints: Vector con las condiciones de búsqueda de Dataset. En cada condición de búsqueda (constraint) se debe informar el nombre del campo del formulario que se filtrará, el rango de valores inicial y final y el tipo de Constraint. Los tipos pueden ser:
- MUST: Indica que todos los registros del Dataset deben satisfacer esta condición.
- SHOULD: Indica que los registros del Dataset pueden o no satisfacer esta condición. Este tipo es más común cuando se necesita que un mismo campo tenga valores A o B (donde cada uno será una constraint SHOULD).
- MUST_NOT: indica que ninguno de los registros puede satisfacer la condición.
- Orden: Vetor con la lista de campos que se utilizará para ordenar los registros en el Dataset.
La fuente del ejemplo citado anteriormente se puede bajar del siguiente link:
Búsqueda de datos de Formulario con filtro por fecha
Para realizar consultas a través de Dataset con filtros del tipo Fecha, es necesario antes guardar el campo de la ficha en el formato aaaa/mm/dd (año/mes/día) para que se pueda realizar la búsqueda a través de Dataset.
Ejemplo de consulta:
Bloco de código | ||
---|---|---|
| ||
HTML | ||
<div id="main-content" class="wiki-content group"> <h1 id="DesenvolvimentodeRelatórios-Índice">Índice</h1> <p> <style type='text/css'>/*<![CDATA[*/ div.rbtoc1412695710501 { padding: 0px; } div.rbtoc1412695710501 ul { list-style: none; margin-left: 0px; } div.rbtoc1412695710501 li { margin-left: 0px; padding-left: 0px; } /*]]>*/ </style> <div class='toc-macro rbtoc1412695710501'> <ul class='toc-indentation'> <li><span class='TOCOutline'>1</span> <a href='#DesenvolvimentodeRelatórios-Objetivo'>Objetivo</a></li> <li><span class='TOCOutline'>2</span> <a href='#DesenvolvimentodeRelatórios-AmbientedeDesenvolvimento'>Entorno de Desarrollo</a></li> <li><span class='TOCOutline'>3</span> <a href='#DesenvolvimentodeRelatórios-SegurançaAmbienteSaaS'>Seguridad Entorno SaaS</a></li> <li><span class='TOCOutline'>4</span> <a href='#DesenvolvimentodeRelatórios-Conexãodiretacomobancodedados'>Conexión directa a la base de datos</a></li> <li><span class='TOCOutline'>5</span> <a href='#DesenvolvimentodeRelatórios-DesenvolvendoumrelatóriodeUsuários'>Desarrollo de un informe de Usuarios</a> <ul class='toc-indentation'> <li><span class='TOCOutline'>5.1</span> <a href='#DesenvolvimentodeRelatórios-Criandoumnovoprojetoeumnovorelatório'>Creación de un nuevo proyecto y un nuevo informe</a></li> <li><span class='TOCOutline'>5.2</span> <a href='#DesenvolvimentodeRelatórios-Configurandooacessoaosdados'>Configuración de acceso a los datos</a></li> <li><span class='TOCOutline'>5.3</span> <a href='#DesenvolvimentodeRelatórios-IncluindoparâmetrosnoRelatório'>Inclusión de parámetros en el Informe</a></li> <li><span class='TOCOutline'>5.4</span> <a href='#DesenvolvimentodeRelatórios-TAG's'>TAG's</a></li> <li><span class='TOCOutline'>5.5</span> <a href='#DesenvolvimentodeRelatórios-PopulandooDataSet'>Completar el Data Set</a></li> <li><span class='TOCOutline'>5.6</span> <a href='#DesenvolvimentodeRelatórios-ObtendodadosviaconexãoJDBC'>Obtención de datos por conexión JDBC</a></li> <li><span class='TOCOutline'>5.7</span> <a href='#DesenvolvimentodeRelatórios-FormatandoavisualizaçãodoRelatório'>Formatear la visualización del Informe</a></li> <li><span class='TOCOutline'>5.8</span> <a href='#DesenvolvimentodeRelatórios-RenderizandodadosdoDataSet'>Renderización de datos del Data Set</a></li> </ul></li> <li><span class='TOCOutline'>6</span> <a href='#DesenvolvimentodeRelatórios-PublicandoRelatórios'>Publicación de Informes</a> <ul class='toc-indentation'> <li><span class='TOCOutline'>6.1</span> <a href='#DesenvolvimentodeRelatórios-Publicação'>Publicación</a></li> </ul></li> <li><span class='TOCOutline'>7</span> <a href='#DesenvolvimentodeRelatórios-VisualizadordeRelatórios'>Visualizador de Informes</a></li> <li><span class='TOCOutline'>8</span> <a href='#DesenvolvimentodeRelatórios-JPA-FunçõesdeAgregação'>JPA - Funciones de Agregación</a> <ul class='toc-indentation'> <li><span class='TOCOutline'>8.1</span> <a href='#DesenvolvimentodeRelatórios-FunçõesdeAgregação'>Funciones de Agregación</a></li> <li><span class='TOCOutline'>8.2</span> <a href='#DesenvolvimentodeRelatórios-Tabeladeentidades'>Tabla de entidades</a></li> <li><span class='TOCOutline'>8.3</span> <a href='#DesenvolvimentodeRelatórios-ExemplodeUtilização'>Ejemplo de Uso</a></li> </ul></li> <li><span class='TOCOutline'>9</span> <a href='#DesenvolvimentodeRelatórios-AcessandodadosdeFormulários'>Acceso a datos de Formularios</a> <ul class='toc-indentation'> <li><span class='TOCOutline'>9.1</span> <a href='#DesenvolvimentodeRelatórios-Importandobibliotecas'>Importación de bibliotecas</a></li> <li><span class='TOCOutline'>9.2</span> <a href='#DesenvolvimentodeRelatórios-Retornandodadosdoformulário'>Devolución de datos del formulario</a></li> </ul></li> <li><span class='TOCOutline'>10</span> <a href='#DesenvolvimentodeRelatórios-ThirdPartyTrademarks'>Third Party Trademarks</a></li> </ul> </div> </p> <h1 id="DesenvolvimentodeRelatórios-Objetivo">Objetivo</h1> <p>El propósito de esta guía es describir el desarrollo, la publicación y la visualización de informes en Fluig,y para facilitar su comprensión se detallará un ejemplo de informe de usuario.</p> <p> </p> <h1 id="DesenvolvimentodeRelatórios-AmbientedeDesenvolvimento">Entorno de desarrollo</h1> <p> Para el desarrollo de informes es necesario tener Java™ JDK/JRE superior a 1.6. Dirección para download: <a href="http://java.sun.com/javase/downloads/index.jsp" class="external-link" rel="nofollow">http://java.sun.com/javase/downloads/index.jsp</a>. </p> <p>Fluig 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.</p> <p> Se recomienda el uso de BIRT Report Designer para el desarrollo de informes para Fluig. <span style="font-size: 10.0pt; line-height: 13.0pt;">BIRT puede integrarse a Studio o Eclipse (ya instalado para utilizar Fluig Studio, según la <a href="73078179.html">Guía de Instalación Fluig Studio</a>), sólo debe instalar el plugin de BIRT. P </span><span style="font-size: 10.0pt; line-height: 13.0pt;">ara ello es necesario acceder a la opción <em>Ayuda -> Instalar Nuevo Software</em> y seguir los siguientes procedimientos:  </span> </p> <ol> <li><em>Work with:</em> Seleccionar <em>Indigo</em>.</li> <li><span style="font-size: 10.0pt; line-height: 13.0pt;"><em>Búsqueda:</em> Después de enumerar las opciones de BIRT, ingresar <em>Birt</em> en el campo de búsqueda.</span></li> <li>Marcar la casilla de selección de <em>Business Intelligence, Reporting and Charting.</em></li> <li>A continuación, presionar <em>Avanzar</em>. </li> </ol> <p> <img class="confluence-embedded-image image-center" src="http://tdn.totvs.com/download/attachments/181962954/1.png?version=1&modificationDate=1425499190000&api=v2" data-image-src="http://tdn.totvs.com/download/attachments/181962954/1.png?version=1&modificationDate=1425499190000&api=v2"> </p> <p>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.</p> <p> </p> <h1 id="DesenvolvimentodeRelatórios-SegurançaAmbienteSaaS">Seguridad Entorno SaaS</h1> <p> En caso de ejecución de Fluig en entorno SaaS<strong>,</strong> 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 <em>true </em>para la variable <em>SaaS</em> ubicada en: <em>%JBOSS_HOME%</em>\jboss-as-7.2.0.Final\standalone\configuration\standalone.xml. <span style="font-size: 10.0pt; line-height: 13.0pt;">Ej:</span> </p> <div class="code panel pdl" style="border-width: 1px;"> <div class="codeContent panelContent pdl"> <pre class="theme: Confluence; brush: xml; gutter: false" style="font-size: 12px;"><simple name="java:global/webdesk/SaaS" value="true"/></pre> </div> </div> <p> </p> <h1 id="DesenvolvimentodeRelatórios-Conexãodiretacomobancodedados">Conexión directa a la base de datos</h1> <p>Se pueden publicar informes que se comuniquen directamente con la base de datos.</p> <p> Utilice en su informe las siguientes configuraciones prestando atención a los valores de las propiedades <em>'odaDriveClass'</em> y <em>'odaURL'.</em> </p> <p> </p> <p> Para realizar una conexión directa con la base de datos <strong>SQLServe</strong>r es necesario utilizar el siguiente estándar: </p> <div class="code panel pdl" style="border-width: 1px;"> <div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"> <b>SQLServer</b> </div> <div class="codeContent panelContent pdl"> <pre class="theme: Confluence; brush: html/xml; gutter: false" style="font-size: 12px;"><property name="odaDriverClass">com.microsoft.sqlserver.jdbc.SQLServerDriver</property> <property name="odaURL">jdbc:sqlserver://IP:1433;databaseName=DATABASE</property></pre> </div> </div> <p> </p> <p> Para realizar una conexión directa con la base de datos<strong>MySQL</strong> es necesario utilizar el siguiente estándar: </p> <div class="code panel pdl" style="border-width: 1px;"> <div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"> <b>MySQL</b> </div> <div class="codeContent panelContent pdl"> <pre class="theme: Confluence; brush: html/xml; gutter: false" style="font-size: 12px;"><property name="odaDriverClass">com.mysql.jdbc.Driver</property> <property name="odaURL">jdbc:mysql://IP:3306/databaseName=DATABASE</property></pre> </div> </div> <p> </p> <h1 id="DesenvolvimentodeRelatórios-DesenvolvendoumrelatóriodeUsuários">Desarrollo de un informe de Usuarios</h1> <p>A través de BIRT Report Designer se pueden crear varios informes para Fluig, acceder a datos de la base de datos del producto a través de la consulta JPA, JDBC. Es posible acceder a los datos de otros productos por conexión JDBC, Web Service o archivos XML.</p> <p> Para facilitar la comprensión sobre el desarrollo de informes para Fluig, se mostrará un ejemplo de creación de informes. A continuación se detallan los pasos necesarios para la creación de informe de usuarios, contando con datos proporcionados por Fluig por medio de consultas a través de <em>dataset</em>. La fuente del ejemplo citado se puede descargar desde el siguiente link: </p> <p> <a href="attachments/74646056/74613049.zip">Colleague Report.zip</a> </p> <p> <em><br /></em> </p> <h3 id="DesenvolvimentodeRelatórios-Criandoumnovoprojetoeumnovorelatório">Creación de un nuevo proyecto y un nuevo informe</h3> <p>Abra la herramienta en la que se instaló el plugin de BIRT Report Designer para seguir el paso a paso, en este ejemplo vamos a utilizar Fluig Studio.</p> <ul> <li>En el proyecto Fluig previamente creado, haga clic en el botón derecho del mouse en la carpeta <em>reports</em>, y a continuación en <em>Nuevo -> Informe Fluig.</em> </li> <li>Luego, sólo debe informar el <em>Nombre del informe</em> y hacer clic en <em>Finalizar</em>. </li> </ul> <p> <img class="confluence-embedded-image image-center" src="http://tdn.totvs.com/download/attachments/181962954/2.png?version=1&modificationDate=1425499194158&api=v2" data-image-src="http://tdn.totvs.com/download/attachments/181962954/2.png?version=1&modificationDate=1425499194158&api=v2"> </p> <p style="text-align: center;"> <strong>Figura 1 - Creación de informe en el proyecto Fluig.</strong> </p> <p> </p> <h3 id="DesenvolvimentodeRelatórios-Configurandooacessoaosdados">Configuración de acceso a los datos</h3> <p> Un <em>Data Source</em> es el mecanismo que almacena los datos de conexión con la fuente de datos, por ejemplo, configuraciones JDBC, Web Service, entre otros. En el caso de este informe se utilizará el acceso a los datos a través de Javascript. </p> <p>Siga los siguientes pasos:</p> <a name="composition-deck-samples"></a> <div id="samples" class="deck" history="false" loopcards="false" effecttype="fade" effectduration="0.5" nextafter="0.0"> <ul class="tab-navigation"></ul> <!-- // .tab-navigation --> <div class="deck-cards panel" style=""> <div id="1" class="deck-card active-pane" style="" cssclass="" accesskey="" label="Passo1" title="" nextafter="0" effecttype="default" effectduration="-1.0"> <p> </p> <ul> <li>Al crear el nuevo informe, seleccione la perspectiva <em>Report Design</em> y luego la pestaña <em>Data Explorer</em>, haga clic con el botón derecho del mouse sobre el ítem <em>Data Source</em> a continuación, seleccione la opción <em>New Data Source</em>.  </li> </ul> <p> <img class="confluence-embedded-image image-center" src="http://tdn.totvs.com/download/attachments/181962954/5.png?version=1&modificationDate=1425499325000&api=v2" data-image-src="http://tdn.totvs.com/download/attachments/181962954/5.png?version=1&modificationDate=1425499325000&api=v2"> </p> <p style="text-align: center;"> <strong>Figura 5 - Nuevo Data Source.</strong> </p> <p> </p> </div> <div id="2" class="deck-card " style="" cssclass="" accesskey="" label="Passo 2" title="" nextafter="0" effecttype="default" effectduration="-1.0"> <p> </p> <div> <ul> <li>Al abrir la ventana <em>New Data Source,</em> seleccione la opción <em>Scripted Data Source</em> y defina el nombre <em>dsColleague</em> como <em>Data Source Name</em> a continuación haga clic en el botón <em>Finalizar.</em></li> </ul> <p> <img class="confluence-embedded-image image-center" src="http://tdn.totvs.com/download/attachments/181962954/6.png?version=1&modificationDate=1425499386000&api=v2" data-image-src="http://tdn.totvs.com/download/attachments/181962954/6.png?version=1&modificationDate=1425499386000&api=v2"> </p> <p style="text-align: center;"> <strong>Figura 6 - Tipo de Data Source.</strong> </p> <p> <strong><br /></strong> </p> </div> </div> <div id="3" class="deck-card " style="" cssclass="" accesskey="" label="Passo 3" title="" nextafter="0" effecttype="default" effectduration="-1.0"> <p> </p> <ul> <li><p> En la pestaña <em>Data Explorer</em> haga clic con el botón derecho del mouse sobre el ítem <em>Data Sets</em> a continuación haga clic en la opción <em>New Data Set</em> como muestra la figura 7. Data Set es una tabla temporal de BIRT en la que se almacenan los datos de Data Source y se renderizan en el informe. </p></li> </ul> <p> <img class="confluence-embedded-image image-center" src="http://tdn.totvs.com/download/attachments/181962954/7.png?version=1&modificationDate=1425499433857&api=v2" data-image-src="http://tdn.totvs.com/download/attachments/181962954/7.png?version=1&modificationDate=1425499433857&api=v2"> </p> <p style="text-align: center;"> <strong>Figura 7 - Nuevo Data Set.</strong> </p> <p style="text-align: center;"> <strong><br /></strong> </p> </div> <div id="4" class="deck-card " style="" cssclass="" accesskey="" label="Passo 4" title="" nextafter="0" effecttype="default" effectduration="-1.0"> <p> </p> <ul> <li><p> Al abrir la ventana <em>New Data Set</em> defina <em>colleagueDataSet</em> como <em>Data Set Name</em>, haga clic en el botón <em>Next</em> en <em>Output Columns</em> haga clic en el botón <em>Add</em> y agregue todos los registros del DataSet. A continuación haga clic en el botón Finalizar </p></li> </ul> <div> <p> </p> <div class="table-wrap"> <table class="confluenceTable"> <tbody> <tr> <td class="highlight confluenceTd"><p> <strong>Column Name</strong> </p></td> <td class="highlight confluenceTd"><p> <strong>Data Type</strong> </p></td> <td class="highlight confluenceTd"><p> <strong>Column Alias</strong> </p></td> <td class="highlight confluenceTd"><p> <strong>Display Name</strong> </p></td> </tr> <tr> <td class="confluenceTd"><p>colleagueId</p></td> <td class="confluenceTd"><p>String</p></td> <td class="confluenceTd"><p>Vacío</p></td> <td class="confluenceTd"><p>Vacío</p></td> </tr> <tr> <td class="confluenceTd"><p>Login</p></td> <td class="confluenceTd"><p>String</p></td> <td class="confluenceTd"><p>Vacío</p></td> <td class="confluenceTd"><p>Vacío</p></td> </tr> <tr> <td class="confluenceTd"><p>colleagueName</p></td> <td class="confluenceTd"><p>String</p></td> <td class="confluenceTd"><p>Vacío</p></td> <td class="confluenceTd"><p>Vacío</p></td> </tr> <tr> <td class="confluenceTd"><p>E-mail</p></td> <td class="confluenceTd"><p>String</p></td> <td class="confluenceTd"><p>Vacío</p></td> <td class="confluenceTd"><p>Vacío</p></td> </tr> <tr> <td class="confluenceTd"><p>active</p></td> <td class="confluenceTd"><p>String</p></td> <td class="confluenceTd"><p>Vacío</p></td> <td class="confluenceTd"><p>Vacío</p></td> </tr> <tr> <td class="confluenceTd"><p>adminuser</p></td> <td class="confluenceTd"><p>String</p></td> <td class="confluenceTd"><p>Vacío</p></td> <td class="confluenceTd"><p>Vacío</p></td> </tr> </tbody> </table> </div> <p> </p> <p> <img class="confluence-embedded-image image-center" src="http://tdn.totvs.com/download/attachments/181962954/8.png?version=1&modificationDate=1425499506000&api=v2" data-image-src="http://tdn.totvs.com/download/attachments/181962954/8.png?version=1&modificationDate=1425499506000&api=v2"> </p> <p style="text-align: center;"> <strong>Figura 8 - Columnas del Data Set.</strong> </p> <p> </p> </div> </div> </div> </div> <!-- // .deck --> <p> <em><br /></em> </p> <h3 id="DesenvolvimentodeRelatórios-IncluindoparâmetrosnoRelatório">Inclusión de parámetros en el informe</h3> <p>Es posible incluir parámetros en el informe que se solicita al usuario antes de su renderización, ayudando al filtro de consulta de datos generando un informe específico. Siga los siguientes pasos:</p> <a name="composition-deck-samples"></a> <div id="samples" class="deck" history="false" loopcards="false" effecttype="fade" effectduration="0.5" nextafter="0.0"> <ul class="tab-navigation"></ul> <!-- // .tab-navigation --> <div class="deck-cards panel" style=""> <div id="1" class="deck-card active-pane" style="" cssclass="" accesskey="" label="Passo1" title="" nextafter="0" effecttype="default" effectduration="-1.0"> <p> </p> <ul> <li>Selecione la pestaña <em>Data Explorer</em>, a continuación haga clic con el botón derecho del mouse en el ítem <em>Report Parameters</em>, seleccione la opción <em>New Parameter. </em></li> </ul> <p> <img class="confluence-embedded-image image-center" src="http://tdn.totvs.com/download/attachments/181962954/9.png?version=1&modificationDate=1425499547000&api=v2" data-image-src="http://tdn.totvs.com/download/attachments/181962954/9.png?version=1&modificationDate=1425499547000&api=v2"> </p> <p style="text-align: center;"> <strong>Figura 9 - Parámetros del Informe.</strong> </p> <p> </p> </div> <div id="2" class="deck-card " style="" cssclass="" accesskey="" label="Passo 2" title="" nextafter="0" effecttype="default" effectduration="-1.0"> <p> </p> <div> <ul> <li><p>La figura 10 muestra la ventana de inclusión de parámetros.</p></li> </ul> <p> <img class="confluence-embedded-image image-center" src="http://tdn.totvs.com/download/attachments/181962954/10.png?version=1&modificationDate=1425499609000&api=v2" data-image-src="http://tdn.totvs.com/download/attachments/181962954/10.png?version=1&modificationDate=1425499609000&api=v2"> </p> <p style="text-align: center;"> <strong>Figura 10 - Configuración de parámetros.</strong> </p> <p> <strong><br /></strong> </p> <p>Al abrir la ventana New Parameter incluya los siguientes parámetros:</p> <p> </p> <p> <strong>Matrícula</strong> </p> <div class="table-wrap"> <table class="confluenceTable"> <tbody> <tr> <th class="confluenceTh"><span style="color: rgb(0, 51, 102);">Campo</span></th> <th class="confluenceTh"><span style="color: rgb(0, 51, 102);">Valor</span></th> </tr> <tr> <td class="confluenceTd">Name</td> <td class="confluenceTd">Matrícula</td> </tr> <tr> <td class="confluenceTd">Prompt text</td> <td class="confluenceTd">Matrícula del Usuario o "*" para mostrar todos</td> </tr> <tr> <td class="confluenceTd">Data type</td> <td class="confluenceTd">String</td> </tr> <tr> <td colspan="1" class="confluenceTd">Display type</td> <td colspan="1" class="confluenceTd">Text Box</td> </tr> <tr> <td colspan="1" class="confluenceTd">Is Required</td> <td colspan="1" class="confluenceTd">true</td> </tr> </tbody> </table> </div> <p> </p> <p> <strong>Muestra Usuarios</strong> </p> <div class="table-wrap"> <table class="confluenceTable"> <tbody> <tr> <th class="confluenceTh"><span style="color: rgb(0, 51, 102);">Campo</span></th> <th class="confluenceTh"><span style="color: rgb(0, 51, 102);">Valor</span></th> </tr> <tr> <td class="confluenceTd">Name</td> <td class="confluenceTd">paramEnable</td> </tr> <tr> <td class="confluenceTd">Prompt text</td> <td class="confluenceTd">Mostrar usuarios</td> </tr> <tr> <td class="confluenceTd">Data type</td> <td class="confluenceTd">String</td> </tr> <tr> <td colspan="1" class="confluenceTd">Display type</td> <td colspan="1" class="confluenceTd">List Box</td> </tr> <tr> <td colspan="1" class="confluenceTd">Is Required</td> <td colspan="1" class="confluenceTd">true</td> </tr> </tbody> </table> </div> <p> <em>Selection Values</em> </p> <div class="table-wrap"> <table class="confluenceTable"> <tbody> <tr> <th class="confluenceTh"><span style="color: rgb(0, 51, 102);">Value</span></th> <th class="confluenceTh"><span style="color: rgb(0, 51, 102);">Display Text</span></th> </tr> <tr> <td class="confluenceTd">*</td> <td class="confluenceTd">Todos</td> </tr> <tr> <td class="confluenceTd">true</td> <td class="confluenceTd">Activos</td> </tr> <tr> <td class="confluenceTd">false</td> <td class="confluenceTd">Inactivos</td> </tr> </tbody> </table> </div> <p> </p> <p> <strong>Ordenar Por</strong> </p> <div class="table-wrap"> <table class="confluenceTable"> <tbody> <tr> <th class="confluenceTh"><span style="color: rgb(0, 51, 102);">Campo</span></th> <th class="confluenceTh"><span style="color: rgb(0, 51, 102);">Valor</span></th> </tr> <tr> <td class="confluenceTd">Name</td> <td class="confluenceTd">paramSort</td> </tr> <tr> <td class="confluenceTd">Prompt text</td> <td class="confluenceTd">Ordenar por</td> </tr> <tr> <td class="confluenceTd">Data type</td> <td class="confluenceTd">String</td> </tr> <tr> <td colspan="1" class="confluenceTd">Display type</td> <td colspan="1" class="confluenceTd">List Box</td> </tr> </tbody> </table> </div> <p> <em>Selection Values</em> </p> <div class="table-wrap"> <table class="confluenceTable"> <tbody> <tr> <th class="confluenceTh"><span style="color: rgb(0, 51, 102);">Value</span></th> <th class="confluenceTh"><span style="color: rgb(0, 51, 102);">Display Text</span></th> </tr> <tr> <td class="confluenceTd">c.colleaguePK.colleagueId</td> <td class="confluenceTd">Matrícula</td> </tr> <tr> <td class="confluenceTd">c.collegueName</td> <td class="confluenceTd">Nombre</td> </tr> <tr> <td class="confluenceTd">c.login</td> <td class="confluenceTd">Login</td> </tr> </tbody> </table> </div> </div> </div> </div> </div> <!-- // .deck --> <p> </p> <h3 id="DesenvolvimentodeRelatórios-TAG's">TAG's</h3> <p>Fluig ofrece TAG’s de reemplazo que ayudan al desarrollo y la seguridad de la generación de información del informe, estas son:</p> <p> • ${WKCompany}: sustituye a la variable por el código de la empresa autenticada en Fluig.<br />• ${WKUser}: sustituye a la variable por el código del usuario autenticado en Fluig. </p> <p>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 Fluig.</p> <p> </p> <h3 id="DesenvolvimentodeRelatórios-PopulandooDataSet">Completar el Data Set</h3> <p> 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 Fluig, pero se pueden utilizar otros recursos para completar el <em>Data Set</em>: XML, Web Service y JDBC. </p> <p>BIRT renderiza el informe a través de la ejecución de sus eventos, son muchos los eventos proporcionados por BIRT, en este ejemplo se utilizarán:</p> <ul> <li><em> initialize: </em> primer evento activado por BIRT, se recomienda utilizar este evento para importar bibliotecas e inicializar variables;</li> <li><em>beforeOpen</em>: evento activado, antes de BIRT abrir la conexión con la fuente de datos (<em>Data Source</em>);</li> <li><em>fetch</em>: evento activado por BIRT después de buscar cada registro en el Data Set y antes de aplicar los filtros y los campos calculados.</li> </ul> <p>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 ™.</p> <p> </p> <a name="composition-deck-samples"></a> <div id="samples" class="deck" history="false" loopcards="false" effecttype="fade" effectduration="0.5" nextafter="0.0"> <ul class="tab-navigation"></ul> <!-- // .tab-navigation --> <div class="deck-cards panel" style=""> <div id="1" class="deck-card active-pane" style="" cssclass="" accesskey="" label="Initialize" title="" nextafter="0" effecttype="default" effectduration="-1.0"> <p> </p> <ul> <li>Seleccione la pestaña <em>Script</em> en la página del informe y a continuación seleccione el evento <em>initialize</em>, incluya el siguiente código como muestra la figura 11: </li> </ul> <div class="code panel pdl" style="border-width: 1px;"> <div class="codeContent panelContent pdl"> <pre class="theme: Confluence; brush: javascript; gutter: false" style="font-size: 12px;">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; </pre> </div> </div> <p> <img class="confluence-embedded-image image-center" src="http://tdn.totvs.com/download/attachments/181962954/11.png?version=1&modificationDate=1425499688000&api=v2" data-image-src="http://tdn.totvs.com/download/attachments/181962954/11.png?version=1&modificationDate=1425499688000&api=v2"> </p> <p style="text-align: center;"> <strong>Figura 11 - Evento initialize.</strong> </p> <p> </p> <p>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.</p> <p>Detalles sobre el código:</p> <ul> <li style="list-style-type: none;"><ul> <li><em>importPackage</em>: comando responsable de la importación de bibliotecas Java™.</li> <li><em>Package.java.util</em>: biblioteca responsable de las Clases <em>utils</em> de Java™.</li> <li><em>Packages.com.datasul.technology.webdesk.dataset.service</em><span>: biblioteca ofrecida por Fluig para consultar la base de datos del producto.</span><span><br /></span><br /> <span><br /></span></li> </ul></li> </ul> </div> <div id="2" class="deck-card " style="" cssclass="" accesskey="" label="BeforeOpen" title="" nextafter="0" effecttype="default" effectduration="-1.0"> <p> </p> <ul> <li>Seleccione la pestaña <em>Data Explorer</em>, abra el ítem <em>Data Sets</em> y haga clic en <em>colleagueDataSet, a continuación haga clic en la pestaña Script </em> y luego seleccione el evento <em>beforeOpen</em> e incluya el siguiente código, como se muestra en la figura 12. </li> </ul> <div class="code panel pdl" style="border-width: 1px;"> <div class="codeContent panelContent pdl"> <pre class="theme: Confluence; brush: javascript; gutter: false" style="font-size: 12px;">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 &amp;&amp; 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 &amp;&amp; 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 &amp;&amp; params["paramSort"].value != "*"){ sortingFields[0] = params["paramSort"].value; } //Dataset dataset = factory.getDataset("colleague", null, constraints, sortingFields); }catch (e) { }finally { } </pre> </div> </div> <p> <img class="confluence-embedded-image image-center" src="http://tdn.totvs.com/download/attachments/181962954/12.png?version=1&modificationDate=1425499730000&api=v2" data-image-src="http://tdn.totvs.com/download/attachments/181962954/12.png?version=1&modificationDate=1425499730000&api=v2"> </p> <p style="text-align: center;"> <strong>Figura 12 - Evento BeforeOpen.</strong> </p> <p> <strong><br /></strong> </p> <p>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.</p> <p>Detalles sobre el código:</p> <ul> <li>${WKCompany}: TAG ofrecida por Fluig, devuelve el código de la empresa en la cual el usuario está autenticado;</li> <li>params["Matricula"]: parámetro de informe, devuelve el código de la matrícula definido por el usuario;</li> <li>params["paramEnable "]: parámetro de informe, devuelve el tipo de usuario;</li> <li><span style="font-size: 10.0pt; line-height: 13.0pt;">params["paramSort "]: parámetro de informe, devuelve el modo de ordenar;</span><br /> <span style="font-size: 10.0pt; line-height: 13.0pt;"><br /></span></li> </ul> </div> <div id="3" class="deck-card " style="" cssclass="" accesskey="" label="Fetch" title="" nextafter="0" effecttype="default" effectduration="-1.0"> <ul> <li>Para incluir el resultado de la consulta en el <em>Data Set</em> y  formatear los datos del informe, seleccione el evento <em>fetch</em> en el área de <em>Script</em> e incluya el siguiente código<em> </em>como se muestra en la figura 13. </li> </ul> <div class="code panel pdl" style="border-width: 1px;"> <div class="codeContent panelContent pdl"> <pre class="theme: Confluence; brush: javascript; gutter: false" style="font-size: 12px;">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; }</pre> </div> </div> <p> <img class="confluence-embedded-image image-center" src="http://tdn.totvs.com/download/attachments/181962954/13.png?version=1&modificationDate=1425499779000&api=v2" data-image-src="http://tdn.totvs.com/download/attachments/181962954/13.png?version=1&modificationDate=1425499779000&api=v2"> </p> <p style="text-align: center;"> <strong>Figura 13 - Evento fetch<em>.</em></strong> </p> <p style="text-align: center;"> <strong><em><br /></em></strong> </p> </div> </div> </div> <!-- // .deck --> <p> </p> <h3 id="DesenvolvimentodeRelatórios-ObtendodadosviaconexãoJDBC">Obtención de datos por conexión JDBC</h3> <p> Una forma alternativa de obtención de datos para crear informes es el uso de JDBC. Es necesario crear un <em>Data</em> <em>Source</em> que se conecte a la base de datos, en él se almacenarán los datos para la conexión, a través de JDBC a la base de datos. </p> <a name="composition-deck-samples"></a> <div id="samples" class="deck" history="false" loopcards="false" effecttype="fade" effectduration="0.5" nextafter="0.0"> <ul class="tab-navigation"></ul> <!-- // .tab-navigation --> <div class="deck-cards panel" style=""> <div id="1" class="deck-card active-pane" style="" cssclass="" accesskey="" label="Passo 1" title="" nextafter="0" effecttype="default" effectduration="-1.0"> <p> </p> <ul> <li><p> Seleccione la pestaña <em>Data Explorer</em>, haga clic con el botón derecho del mouse en el ítem <em>Data Source</em> y a continuación, seleccione la opción <em>New Data Source</em> como se muestra en la figura 14. </p> <p> <img class="confluence-embedded-image image-center" src="http://tdn.totvs.com/download/attachments/181962954/14.png?version=1&modificationDate=1425499858000&api=v2" data-image-src="http://tdn.totvs.com/download/attachments/181962954/14.png?version=1&modificationDate=1425499858000&api=v2"> </p> <p style="text-align: center;"> <strong>Figura 14 – Nuevo Data Source</strong> </p> <p style="text-align: center;"> <strong><br /></strong> </p></li> </ul> </div> <div id="2" class="deck-card " style="" cssclass="" accesskey="" label="Passo 2" title="" nextafter="0" effecttype="default" effectduration="-1.0"> <p> </p> <ul> <li><p> Al abrir la ventana <em>New Data Source,</em> seleccione la opción <em>JDBC DataSource</em> y defina el nombre <em>JDBC-DataSource</em> como <em>Data Source Name</em> a continuación, haga clic en el botón <em>Next</em>, como muestra la figura 15. </p> <p> <img class="confluence-embedded-image image-center" src="http://tdn.totvs.com/download/attachments/181962954/15.png?version=1&modificationDate=1425499896000&api=v2" data-image-src="http://tdn.totvs.com/download/attachments/181962954/15.png?version=1&modificationDate=1425499896000&api=v2"> </p> <p style="text-align: center;"> <strong>Figura 15 – Tipo Data Source</strong> </p> <p style="text-align: center;"> <strong><br /></strong> </p></li> </ul> </div> <div id="3" class="deck-card " style="" cssclass="" accesskey="" label="Passo 3" title="" nextafter="0" effecttype="default" effectduration="-1.0"> <p> </p> <ul> <li><p>En la siguiente ventana se debe configurar la conexión a la base de datos. </p> <p> En el campo <em>Driver</em> <em>Class</em> 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 <em>Managed</em> <em>Drivers</em>... </p> <p> Informe también los valores de <em>Database URL, User Name </em>y <em>Password </em>de acuerdo a la base de datos elegida, como muestra la figura 16. </p> <p> <img class="confluence-embedded-image image-center" src="http://tdn.totvs.com/download/attachments/181962954/16.png?version=1&modificationDate=1425499939000&api=v2" data-image-src="http://tdn.totvs.com/download/attachments/181962954/16.png?version=1&modificationDate=1425499939000&api=v2"> </p> <p style="text-align: center;"> <strong>Figura 16 – Configuración de la conexión con base de datos.</strong> </p> <p style="text-align: center;"> <strong><br /></strong> </p></li> </ul> </div> <div id="4" class="deck-card " style="" cssclass="" accesskey="" label="Passo 4" title="" nextafter="0" effecttype="default" effectduration="-1.0"> <p> </p> <ul> <li><p> En la pestaña <em>Data Explorer</em> haga clic con el botón derecho del mouse sobre el ítem <em>Data Sets</em> a continuación, haga clic en la opción <em>New Data Set</em>. </p> <p style="text-align: center;"> <img class="confluence-embedded-image" src="http://tdn.totvs.com/download/attachments/181962954/17.png?version=1&modificationDate=1425499997000&api=v2" data-image-src="http://tdn.totvs.com/download/attachments/181962954/17.png?version=1&modificationDate=1425499997000&api=v2"> </p> <p style="text-align: center;"> <strong>Figura 17 – Creación del Nuevo Data Set.</strong> </p> <p style="text-align: center;"> <strong><br /></strong> </p></li> </ul> </div> <div id="5" class="deck-card " style="" cssclass="" accesskey="" label="Passo 5" title="" nextafter="0" effecttype="default" effectduration="-1.0"> <p> </p> <ul> <li>Seleccione  <em>Data</em><em>Source</em> creado (<em>JDBC-DataSource</em>), en el campo <em>Data Set Type</em> seleccione SQL <em>Select Query</em>, informe un nombre para el  <em>Data Set </em>y haga clic en <em>next, como muestra la figura 18.</em></li> </ul> <p> <img class="confluence-embedded-image image-center" src="http://tdn.totvs.com/download/attachments/181962954/18.png?version=1&modificationDate=1425500071000&api=v2" data-image-src="http://tdn.totvs.com/download/attachments/181962954/18.png?version=1&modificationDate=1425500071000&api=v2"> </p> <p style="text-align: center;"> <strong>Figura 18 – Configuración del Data Set.</strong> </p> <p style="text-align: center;"> <strong><br /></strong> </p> </div> <div id="6" class="deck-card " style="" cssclass="" accesskey="" label="Passo 6" title="" nextafter="0" effecttype="default" effectduration="-1.0"> <p> </p> <ul> <li> 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 Fluig.</li> </ul> <p> <img class="confluence-embedded-image image-center" src="http://tdn.totvs.com/download/attachments/181962954/19.png?version=1&modificationDate=1425500115000&api=v2" data-image-src="http://tdn.totvs.com/download/attachments/181962954/19.png?version=1&modificationDate=1425500115000&api=v2"> </p> <p style="text-align: center;"> <strong>Figura 19 – Creación de Query SQL</strong> </p> <p style="text-align: center;"> <strong><br /></strong> </p> <ul> <li><p> El siguiente <em>Query </em> busca en la base de datos todos los volúmenes de la empresa del usuario autenticado en Fluig, este código se obtiene a través de la TAG ${WKCompany}. </p></li> </ul> <div class="code panel pdl" style="border-width: 1px;"> <div class="codeContent panelContent pdl"> <pre class="theme: Confluence; brush: java; gutter: false" style="font-size: 12px;">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}</pre> </div> </div> <div class="aui-message hint shadowed information-macro"> <p class="title">Nota</p> <span class="aui-icon icon-hint">Icon</span> <div class="message-content"> <p> Puede ocurrir algún error al finalizar la creación del <em>Data</em> <em>Set</em> 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 Fluig, corrigiendo el error de sintaxis. </p> <p> <img class="confluence-embedded-image image-center" src="http://tdn.totvs.com/download/attachments/181962954/20.png?version=1&modificationDate=1425500167000&api=v2" data-image-src="http://tdn.totvs.com/download/attachments/181962954/20.png?version=1&modificationDate=1425500167000&api=v2"> </p> <p style="text-align: center;"> <strong>Figura 20 – Error de Birt por el uso de la TAG ${WKCompany}</strong> </p> </div> </div> <p style="text-align: center;"> <strong><br /></strong> </p> </div> </div> </div> <!-- // .deck --> <div class="aui-message warning shadowed information-macro"> <p class="title">Atención</p> <span class="aui-icon icon-warning">Icon</span> <div class="message-content"> <p>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.</p> <p>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.</p> </div> </div> <p> </p> <h3 id="DesenvolvimentodeRelatórios-FormatandoavisualizaçãodoRelatório">Formatear la visualización del informe</h3> <p> Se requiere la inclusión de los componentes de renderización del informe. Haga clic en la pestaña <em>Layout</em> para visualizar la página del informe que está en blanco y, a continuación, seleccione la pestaña <em>Palette</em> como muestra la figura 21. </p> <p> <img class="confluence-embedded-image image-center" src="http://tdn.totvs.com/download/attachments/74646056/image2013-9-16%2017%3A11%3A52.png?version=1&modificationDate=1379362244000&api=v2" data-image-src="http://tdn.totvs.com/download/attachments/74646056/image2013-9-16%2017%3A11%3A52.png?version=1&modificationDate=1379362244000&api=v2"> </p> <p style="text-align: center;"> <strong>Figura 21 – Informe en blanco.</strong> </p> <p>En la pestaña Pallets se pueden incluir varios componentes de visualización y renderización de datos entre ellos se encuentran:</p> <ul> <li>Label: Texto corto y estático.</li> <li>Text: Texto largo se puede formatear con TAG’s HTML.</li> <li>Dynamic Text: Texto dinámico proveniente del Data Set.</li> <li>Image: Inclusión de imágenes.</li> <li>Grid: Formateador de datos en Grid.</li> <li>Table: Tabla de datos.</li> <li>Chart: Gráficos de torta, línea, tubo, etc.</li> </ul> <a name="composition-deck-samples"></a> <div id="samples" class="deck" history="false" loopcards="false" effecttype="fade" effectduration="0.5" nextafter="0.0"> <ul class="tab-navigation"></ul> <!-- // .tab-navigation --> <div class="deck-cards panel" style=""> <div id="1" class="deck-card active-pane" style="" cssclass="" accesskey="" label="Componente Image" title="" nextafter="0" effecttype="default" effectduration="-1.0"> <p> </p> <ul> <li><p>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.</p> <p> Arraste un componente <em>Image</em> en el informe, al abrir la ventana <em>Edit Image </em>Ítem, seleccione la opción <em>Image file in shared resources</em>, seleccione el archivo de imagen en la opción <em>Enter resource file e </em>a continuación, haga clic en el botón <em>Insert</em>. </p> <p> <img class="confluence-embedded-image image-center" src="http://tdn.totvs.com/download/attachments/74646056/image2013-9-16%2017%3A20%3A27.png?version=1&modificationDate=1379362758000&api=v2" data-image-src="http://tdn.totvs.com/download/attachments/74646056/image2013-9-16%2017%3A20%3A27.png?version=1&modificationDate=1379362758000&api=v2"> </p> <p style="text-align: center;"> <strong>Figura 22 – Componente Image.</strong> </p> <p style="text-align: center;"> <strong><br /></strong> </p></li> </ul> </div> <div id="2" class="deck-card " style="" cssclass="" accesskey="" label="Componente Text" title="" nextafter="0" effecttype="default" effectduration="-1.0"> <p> </p> <ul> <li><p> Arraste un componente <em>Text</em> en el informe, al abrir la ventana <em>Edit Text Item</em> seleccione la opción <em>HTML</em> y en el área de texto incluya la siguiente información formateada en HTML: </p></li> </ul> <div class="code panel pdl" style="border-width: 1px;"> <div class="codeContent panelContent pdl"> <pre class="theme: Confluence; brush: html/xml; gutter: false" style="font-size: 12px;"><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>Teléfono:</b> 0800 882 9191 <br></pre> </div> </div> <div> <ul> <li><p> A continuación haga clic en el botón <em>OK</em> como muestra la figura 23. </p></li> </ul> </div> <p> <img class="confluence-embedded-image image-center" src="http://tdn.totvs.com/download/attachments/74646056/image2013-9-16%2017%3A20%3A27.png?version=1&modificationDate=1379362758000&api=v2" data-image-src="http://tdn.totvs.com/download/attachments/74646056/image2013-9-16%2017%3A20%3A27.png?version=1&modificationDate=1379362758000&api=v2"> </p> <p style="text-align: center;"> <strong>Figura 23 - Componente Text.</strong> </p> <p style="text-align: center;"> <strong><br /></strong> </p> </div> <div id="3" class="deck-card " style="" cssclass="" accesskey="" label="Componente Label" title="" nextafter="0" effecttype="default" effectduration="-1.0"> <p> </p> <ul> <li>Arraste un componente <em>Label</em> en el informe, haga doble clic sobre el componente incluido  e ingrese <em>Informe de Usuarios,</em> en la pestaña <em>Property Editor - Label -> G</em><em>eneral</em> defina el formato de label, como muestra la figura 24. </li> </ul> <p>  <img class="confluence-embedded-image image-center" src="http://tdn.totvs.com/download/attachments/74646056/image2013-9-16%2017%3A34%3A9.png?version=1&modificationDate=1379363580000&api=v2" data-image-src="http://tdn.totvs.com/download/attachments/74646056/image2013-9-16%2017%3A34%3A9.png?version=1&modificationDate=1379363580000&api=v2"> </p> <p style="text-align: center;"> <strong>Figura 24 - Título del informe.</strong> </p> <p style="text-align: center;"> <strong><br /></strong> </p> </div> <div id="4" class="deck-card " style="" cssclass="" accesskey="" label="Componente Table" title="" nextafter="0" effecttype="default" effectduration="-1.0"> <p> </p> <ul> <li>Arraste un componente <em>Table</em>, al abrir la ventana <em>Insert Table</em> defina 6 columnas y 1 detalle y, haga clic en el botón <em>OK</em> como muestra la figura 25. </li> </ul> <p> <img class="confluence-embedded-image image-center" src="http://tdn.totvs.com/download/attachments/74646056/image2013-9-16%2017%3A37%3A15.png?version=1&modificationDate=1379363765000&api=v2" data-image-src="http://tdn.totvs.com/download/attachments/74646056/image2013-9-16%2017%3A37%3A15.png?version=1&modificationDate=1379363765000&api=v2"> </p> <p style="text-align: center;"> <strong>Figura 25 - Configuración de la Tabla.</strong> </p> <p style="text-align: left;"> <strong><br /></strong> </p> </div> <div id="5" class="deck-card " style="" cssclass="" accesskey="" label="Lables para Table" title="" nextafter="0" effecttype="default" effectduration="-1.0"> <p> </p> <p> En la tabla agregada al informe incluya un componente <em>Label</em> para cada columna de la línea <em>Header Row</em> defina los siguientes valores<em>:</em> </p> <ul> <li><span style="font-size: 10.0pt; line-height: 13.0pt;">Matrícula.</span></li> <li>Nombre.</li> <li>Login.</li> <li>E-mail.</li> <li>Activo.</li> <li>Administrador.</li> </ul> <p> Formatee las <em>labels</em> incluidas definiendo el color de la fuente y el color del fondo como muestra la figura 26. </p> <p> <img class="confluence-embedded-image image-center" src="http://tdn.totvs.com/download/attachments/74646056/image2013-9-16%2017%3A41%3A48.png?version=1&modificationDate=1379364039000&api=v2" data-image-src="http://tdn.totvs.com/download/attachments/74646056/image2013-9-16%2017%3A41%3A48.png?version=1&modificationDate=1379364039000&api=v2"> </p> <p style="text-align: center;"> <strong>Figura 26 - Título de las Columnas.</strong> </p> <p style="text-align: center;"> <strong><br /></strong> </p> </div> </div> </div> <!-- // .deck --> <p> </p> <h3 id="DesenvolvimentodeRelatórios-RenderizandodadosdoDataSet">Renderización de datos del Data Set</h3> <p> Seleccione la pestaña <em>Data Explorer</em> y abra <em>colleagueDataSet</em> creado anteriormente y, a continuación arrastre cada ítem del <em>Data Set</em> a la columna <em>Detail Row</em> de la tabla creada anteriormente, como muestra la figura 27.  </p> <p> <img class="confluence-embedded-image image-center" src="http://tdn.totvs.com/download/attachments/74646056/image2013-9-16%2017%3A46%3A11.png?version=1&modificationDate=1379364302000&api=v2" data-image-src="http://tdn.totvs.com/download/attachments/74646056/image2013-9-16%2017%3A46%3A11.png?version=1&modificationDate=1379364302000&api=v2"> </p> <p style="text-align: center;"> <strong>Figura 27 - Data Set.</strong> </p> <p style="text-align: left;"> </p> <h1 style="text-align: left;" id="DesenvolvimentodeRelatórios-PublicandoRelatórios">Publicación de Informes</h1> <h3 style="text-align: left;" id="DesenvolvimentodeRelatórios-Publicação">Publicación</h3> <p>Al completar el desarrollo del informe, es necesario realizar la exportación del mismo para la navegación de documentos Fluig.</p> <a name="composition-deck-samples"></a> <div id="samples" class="deck" history="false" loopcards="false" effecttype="fade" effectduration="0.5" nextafter="0.0"> <ul class="tab-navigation"></ul> <!-- // .tab-navigation --> <div class="deck-cards panel" style=""> <div id="1" class="deck-card active-pane" style="" cssclass="" accesskey="" label="Passo1" title="" nextafter="0" effecttype="default" effectduration="-1.0"> <p> </p> <p> Para ello, haga clic sobre la carpeta del informe con el botón derecho del mouse y presione <em>Exportar</em>. </p> <p> <img class="confluence-embedded-image image-center" src="http://tdn.totvs.com/download/attachments/74646056/image2013-9-18%209%3A8%3A5.png?version=1&modificationDate=1379506017000&api=v2" data-image-src="http://tdn.totvs.com/download/attachments/74646056/image2013-9-18%209%3A8%3A5.png?version=1&modificationDate=1379506017000&api=v2"> </p> <p style="text-align: center;"> <strong>Figura 28 – Exportación de Informe.</strong> </p> <p style="text-align: left;"> <strong><br /></strong> </p> <div class="aui-message hint shadowed information-macro"> <p class="title">Nota</p> <span class="aui-icon icon-hint">Icon</span> <div class="message-content"> <p>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.</p> </div> </div> </div> <div id="2" class="deck-card " style="" cssclass="" accesskey="" label="Passo 2" title="" nextafter="0" effecttype="default" effectduration="-1.0"> <p> </p> <div> <ul> <li><p> <span>En la pantalla de Exportación, haga clic sobre <em>Expotar al servidor Fluig</em> y a continuación, presione <em>Avanzar</em>. </span> </p> <p> </p> <p> <img class="confluence-embedded-image image-center" src="http://tdn.totvs.com/download/attachments/74646056/image2013-9-18%209%3A9%3A26.png?version=1&modificationDate=1379506098000&api=v2" data-image-src="http://tdn.totvs.com/download/attachments/74646056/image2013-9-18%209%3A9%3A26.png?version=1&modificationDate=1379506098000&api=v2"> </p> <p style="text-align: center;"> <strong>Figura 29 – Exportación de informe.</strong> </p> <p style="text-align: center;"> <strong><br /></strong> </p></li> </ul> </div> </div> <div id="3" class="deck-card " style="" cssclass="" accesskey="" label="Passo 3" title="" nextafter="0" effecttype="default" effectduration="-1.0"> <p> </p> <ul> <li><p> En la pantalla <em>Exportar Informe</em>, es necesario informar el nombre del <em>Servidor</em>, identificar si será la publicación de un <em>Nuevo Informe</em>, 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 <em>Versión</em> (como se está realizando una nueva publicación, se debe seleccionar <em>Mantener Actual</em>). </p> <p> <img class="confluence-embedded-image image-center" src="http://tdn.totvs.com/download/attachments/74646056/image2013-9-18%209%3A24%3A7.png?version=1&modificationDate=1379506979000&api=v2" data-image-src="http://tdn.totvs.com/download/attachments/74646056/image2013-9-18%209%3A24%3A7.png?version=1&modificationDate=1379506979000&api=v2"> </p> <p style="text-align: center;"> <strong>Figura 29 – Exportación de informe.</strong> </p> <p style="text-align: center;"> <strong><br /></strong> </p></li> </ul> </div> <div id="4" class="deck-card " style="" cssclass="" accesskey="" label="Passo 4" title="" nextafter="0" effecttype="default" effectduration="-1.0"> <p> </p> <ul> <li>En la carpeta<em> Informe</em> de la <em>Navegación de Documentos</em> se podrá observar que el informe se publicó con éxito. </li> </ul> <p> <img class="confluence-embedded-image image-center" src="http://tdn.totvs.com/download/attachments/74646056/image2013-9-18%209%3A27%3A32.png?version=1&modificationDate=1379507183000&api=v2" data-image-src="http://tdn.totvs.com/download/attachments/74646056/image2013-9-18%209%3A27%3A32.png?version=1&modificationDate=1379507183000&api=v2"> </p> <p style="text-align: center;"> <strong>Figura 29 – Publicación de informe.</strong> </p> <p style="text-align: center;"> <strong><br /></strong> </p> </div> </div> </div> <!-- // .deck --> <p> </p> <h1 style="text-align: left;" id="DesenvolvimentodeRelatórios-VisualizadordeRelatórios">Visualizador de Informes</h1> <p>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 Fluig.</p> <p> 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 <em> OK </em>. </p> <p> <img class="confluence-embedded-image image-center" src="http://tdn.totvs.com/download/attachments/74646056/image2013-9-18%2010%3A1%3A21.png?version=1&modificationDate=1379509212000&api=v2" data-image-src="http://tdn.totvs.com/download/attachments/74646056/image2013-9-18%2010%3A1%3A21.png?version=1&modificationDate=1379509212000&api=v2"> </p> <p style="text-align: center;"> <strong>Figura 32 – Parámetros del informe.</strong> </p> <p> </p> <p>El informe deberá mostrar todos los usuarios registrados en Fluig para la empresa en la cual el usuario está autenticado.</p> <p> <img class="confluence-embedded-image image-center" src="http://tdn.totvs.com/download/attachments/74646056/image2013-9-18%2010%3A3%3A24.png?version=1&modificationDate=1379509336000&api=v2" data-image-src="http://tdn.totvs.com/download/attachments/74646056/image2013-9-18%2010%3A3%3A24.png?version=1&modificationDate=1379509336000&api=v2"> </p> <p style="text-align: center;"> <strong>Figura 33 – Informe de Usuarios– Resultado</strong>. </p> <p style="text-align: left;"> <strong><br /></strong> </p> <p style="text-align: left;"> <span style="color: rgb(0, 0, 0); font-size: 1.4em; font-weight: bold; line-height: normal;">Opciones del visualizador</span> </p> <p>La herramienta de visualización de informe de Fluig posee varias funcionalidades:</p> <ul> <li><em>Verificar Indice</em>: Si el informe desarrollado posee índice es posible ponerlo en la lista.</li> <li><em>Ejecutar informe</em>: Permite que el informe se ejecute nuevamente.</li> <li><em>Exportar datos: </em>Exporta los datos generados del informe en archivo, permitiendo seleccionar las columnas deseadas y el separador de datos.</li> <li><em>Exportar informe</em>: Convierte los datos del informe en diferentes formatos de archivos: Microsoft® Excel®, PostScript®, PDF, Microsoft® Word e Microsoft® Power Point®, permite también la selección de páginas que se exportarán.</li> <li><em>Imprimir informe</em>: Imprime informe seleccionando las impresoras instaladas en el ordenador del usuario autenticado y le permite imprimir en formato DF o HTML.</li> <li><em>Imprimir informe en el servidor: </em>Imprime informe desde las impresoras instaladas en el servidor de Fluig.</li> <li>Navegación de páginas: permite navegar entre las páginas del informe.</li> </ul> <p> <img class="confluence-embedded-image" src="http://tdn.totvs.com/download/attachments/74646056/image2013-9-18%2010%3A20%3A48.png?version=1&modificationDate=1379510380000&api=v2" data-image-src="http://tdn.totvs.com/download/attachments/74646056/image2013-9-18%2010%3A20%3A48.png?version=1&modificationDate=1379510380000&api=v2"> </p> <p style="text-align: center;"> <strong>Figura 34 – Funcionalidades de visualizador de informes.</strong> </p> <p style="text-align: left;"> <strong><br /></strong> </p> <div> <h1 id="DesenvolvimentodeRelatórios-JPA-FunçõesdeAgregação">JPA - Funciones de Agregación</h1> </div> <h3 id="DesenvolvimentodeRelatórios-FunçõesdeAgregação">Funciones de Agregación</h3> <p>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</p> <p> </p> <h3 id="DesenvolvimentodeRelatórios-Tabeladeentidades">Tabla de entidades</h3> <p>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.</p> <div class="table-wrap"> <table class="confluenceTable"> <tbody> <tr> <td class="highlight confluenceTd"><p> <strong>Código dataset</strong> </p></td> <td class="highlight confluenceTd"><p> <strong>Entidad JPA</strong> </p></td> <td class="highlight confluenceTd"><p> <strong>Tabla base de datos</strong> </p></td> </tr> <tr> <td class="confluenceTd"><p> <strong>AccessLog</strong> </p></td> <td class="confluenceTd"><p>AccessLog</p></td> <td class="confluenceTd"><p>HISTOR_ACES</p></td> </tr> <tr> <td class="confluenceTd"><p> <strong>ActivityDim</strong> </p></td> <td class="confluenceTd"><p>ActivityDim</p></td> <td class="confluenceTd"><p>ACTIVITY_DIM_CAP</p></td> </tr> <tr> <td class="confluenceTd"><p> <strong>advancedProcessProperties</strong> </p></td> <td class="confluenceTd"><p>AdvancedProcessProperties</p></td> <td class="confluenceTd"><p>PROPRIED_AVANCAD_PROCES</p></td> </tr> <tr> <td class="confluenceTd"><p> <strong>businessPeriod</strong> </p></td> <td class="confluenceTd"><p>BusinessPeriod</p></td> <td class="confluenceTd"><p>PERIOD_EXPED</p></td> </tr> <tr> <td class="confluenceTd"><p> <strong>destinationArea</strong> </p></td> <td class="confluenceTd"><p>DestinationArea</p></td> <td class="confluenceTd"><p>AREA_DEST</p></td> </tr> <tr> <td class="confluenceTd"><p> <strong>document</strong> </p></td> <td class="confluenceTd"><p>Document</p></td> <td class="confluenceTd"><p>DOCUMENTO</p></td> </tr> <tr> <td class="confluenceTd"><p> <strong>documentSecurityConfig</strong> </p></td> <td class="confluenceTd"><p>DocumentSecurityConfig</p></td> <td class="confluenceTd"><p>CONFIGUR_SEGUR_DOCTO</p></td> </tr> <tr> <td class="confluenceTd"><p> <strong>FactActivityCost</strong> </p></td> <td class="confluenceTd"><p>FactActivityCost</p></td> <td class="confluenceTd"><p>FACT_ACTIVITY_COST_CAP</p></td> </tr> <tr> <td class="confluenceTd"><p> <strong>FactFlowVolume</strong> </p></td> <td class="confluenceTd"><p>FactFlowVolume</p></td> <td class="confluenceTd"><p>FACT_FLOW_VOLUME_CAP</p></td> </tr> <tr> <td class="confluenceTd"><p> <strong>FactProcesCost</strong> </p></td> <td class="confluenceTd"><p>FactProcesCost</p></td> <td class="confluenceTd"><p>FACT_PROCES_COST_CAP</p></td> </tr> <tr> <td class="confluenceTd"><p> <strong>FactProcesVolume</strong> </p></td> <td class="confluenceTd"><p>FactProcesVolume</p></td> <td class="confluenceTd"><p>FACT_PROCES_VOLUME_CAP</p></td> </tr> <tr> <td class="confluenceTd"><p> <strong>FlowDim</strong> </p></td> <td class="confluenceTd"><p>FlowDim</p></td> <td class="confluenceTd"><p>FLOW_DIM_CAP</p></td> </tr> <tr> <td class="confluenceTd"><p> <strong>globalCalendar</strong> </p></td> <td class="confluenceTd"><p>GlobalCalendar</p></td> <td class="confluenceTd"><p>CALEND_GLOBAL</p></td> </tr> <tr> <td class="confluenceTd"><p> <strong>knowledge</strong> </p></td> <td class="confluenceTd"><p>Knowledge</p></td> <td class="confluenceTd"><p>CONOCIMIENTO</p></td> </tr> <tr> <td class="confluenceTd"><p> <strong>processAttachment</strong> </p></td> <td class="confluenceTd"><p>ProcessAttachment</p></td> <td class="confluenceTd"><p>ANEXO_PROCES</p></td> </tr> <tr> <td class="confluenceTd"><p> <strong>processDefinition</strong> </p></td> <td class="confluenceTd"><p>ProcessDefinition</p></td> <td class="confluenceTd"><p>DEF_PROCES</p></td> </tr> <tr> <td class="confluenceTd"><p> <strong>processDefinitionVersion</strong> </p></td> <td class="confluenceTd"><p>ProcessDefinitionVersion</p></td> <td class="confluenceTd"><p>VERS_DEF_PROCES</p></td> </tr> <tr> <td class="confluenceTd"><p> <strong>processHistory</strong> </p></td> <td class="confluenceTd"><p>ProcessHistory</p></td> <td class="confluenceTd"><p>HISTOR_PROCES</p></td> </tr> <tr> <td class="confluenceTd"><p> <strong>processState</strong> </p></td> <td class="confluenceTd"><p>ProcessState</p></td> <td class="confluenceTd"><p>ESTADO_PROCES</p></td> </tr> <tr> <td class="confluenceTd"><p> <strong>processTask</strong> </p></td> <td class="confluenceTd"><p>ProcessTask</p></td> <td class="confluenceTd"><p>TAR_PROCES</p></td> </tr> <tr> <td class="confluenceTd"><p> <strong>ProcesVersionDim</strong> </p></td> <td class="confluenceTd"><p>ProcesVersionDim</p></td> <td class="confluenceTd"><p>PROCES_VERSION_DIM_CAP</p></td> </tr> <tr> <td class="confluenceTd"><p> <strong>TimeDim</strong> </p></td> <td class="confluenceTd"><p>TimeDim</p></td> <td class="confluenceTd"><p>TIME_DIM_CAP</p></td> </tr> <tr> <td class="confluenceTd"><p> <strong>topic</strong> </p></td> <td class="confluenceTd"><p>Topic</p></td> <td class="confluenceTd"><p>ASUNTO</p></td> </tr> <tr> <td class="confluenceTd"><p> <strong>UserDim</strong> </p></td> <td class="confluenceTd"><p>UserDim</p></td> <td class="confluenceTd"><p>USER_DIM_CAP</p></td> </tr> <tr> <td class="confluenceTd"><p> <strong>workflowProcess</strong> </p></td> <td class="confluenceTd"><p>WorkflowProcess</p></td> <td class="confluenceTd"><p>PROCES_WORKFLOW</p></td> </tr> </tbody> </table> </div> <p> </p> <h3 id="DesenvolvimentodeRelatórios-ExemplodeUtilização">Ejemplo de Uso</h3> <div class="code panel pdl" style="border-width: 1px;"> <div class="codeContent panelContent pdl"> <pre class="theme: Confluence; brush: java; gutter: false" style="font-size: 12px;">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)");</pre> </div> </div> <p> </p> <div> <h1 id="DesenvolvimentodeRelatórios-AcessandodadosdeFormulários">Acceso a datos de Formularios</h1> </div> <h3 id="DesenvolvimentodeRelatórios-Importandobibliotecas">Importación de bibliotecas</h3> <p>A partir de la clase DatasetFactory se puede accede a los datos de formularios publicados en Fluig.</p> <p>Para llenar un informe a través de datos del fichero es necesario importar las siguientes bibliotecas:</p> <div class="code panel pdl" style="border-width: 1px;"> <div class="codeContent panelContent pdl"> <pre class="theme: Confluence; brush: java; gutter: false" style="font-size: 12px;">importPackage(Packages.com.datasul.technology.webdesk.dataset.service); importPackage(Packages.com.datasul.technology.webdesk.dataset); importPackage(Packages.com.datasul.technology.webdesk.search.controller);</pre> </div> </div> <p style="text-align: left;"> </p> <h3 style="text-align: left;" id="DesenvolvimentodeRelatórios-Retornandodadosdoformulário">Devolución de datos del formulario</h3> <p>A través de la clase DatasetFactory es posible buscar datos de formularios, incluir filtros y ordenar. Ejemplo de uso:</p> <div class="code panel pdl" style="border-width: 1px;"> <div class="codeContent panelContent pdl"> <pre class="theme: Confluence; brush: java; gutter: false" style="font-size: 12px;">//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);</pre> </div> </div> <p> </p> <p>El ejemplo anterior invoca el método getDataSet pasando algunos argumentos adicionales como parámetros:</p> <ul> <li><strong>Nombre del Dataset:</strong> Nombre del servicio de datos del formulario;</li> <li><strong>Campos:</strong> Devuelve sólo los campos recibidos en el array informado. Si es null, devuelve todos los campos.</li> <li><strong>Constraints</strong>: Vector con las condiciones de búsqueda de Dataset. En cada condición de búsqueda (constraint) se debe informar el nombre del campo del formulario que se filtrará, el rango de valores inicial y final y el tipo de Constraint. Los tipos pueden ser:</li> </ul> <ul> <li style="list-style-type: none;"><ul> <li><strong>MUST:</strong> Indica que todos los registros del Dataset deben satisfacer esta condición.</li> <li><strong>SHOULD:</strong> Indica que los registros del Dataset pueden o no satisfacer esta condición. Este tipo es más común cuando se necesita que un mismo campo tenga valores A o B (donde cada uno será una constraint SHOULD).</li> <li><strong>MUST_NOT:</strong> indica que ninguno de los registros puede satisfacer la condición.</li> <li><strong>Orden:</strong> Vetor con la lista de campos que se utilizará para ordenar los registros en el Dataset.</li> </ul></li> </ul> <p> <span>La fuente del ejemplo citado anteriormente se puede bajar del siguiente link:</span> </p> <p> <span><a href="attachments/74646056/75236518.zip">Customer CardIndex.zip</a></span> </p> <p> <span style="color: rgb(0, 0, 0); font-size: 1.4em; font-weight: bold; line-height: normal;"><br /></span> </p> <p> <span style="color: rgb(0, 0, 0); font-size: 1.4em; font-weight: bold; line-height: normal;">Búsqueda de datos de Formulario con filtro por fecha</span> </p> <p> Para realizar consultas a través de Dataset con filtros del tipo Fecha, es necesario antes guardar el campo de la ficha en el formato <strong>aaaa/mm/dd</strong> (año/mes/día)  para que se pueda realizar la búsqueda a través de Dataset. </p> <p>Ejemplo de consulta:</p> <div class="code panel pdl" style="border-width: 1px;"> <div class="codeContent panelContent pdl"> <pre class="theme: Confluence; brush: java; gutter: false" style="font-size: 12px;">//Instala las constraints para consulta var factory = DatasetFactory.getInstance(${WKCompany}); //Filtra Clientes de 1 a 5 var c1 = factory.createConstraint("campo_data", "2010/01/25", "2010/05/02", 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);</pre> </div> </div> <p> </p> </div> |