Histórico da Página
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/185738005/17.png?version=1&modificationDate=1425500440000&api=v2"
data-image-src="http://tdn.totvs.com/download/attachments/185738005/17.png?version=1&modificationDate=1425500440000&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="attachments/74646056/75235792.png"
data-image-src="attachments/74646056/75235792.png">
</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="attachments/74646056/75235799.png"
data-image-src="attachments/74646056/75235799.png">
</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="attachments/74646056/75235800.png"
data-image-src="attachments/74646056/75235800.png">
</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="attachments/74646056/75235806.png"
data-image-src="attachments/74646056/75235806.png">
</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="attachments/74646056/75235812.png"
data-image-src="attachments/74646056/75235812.png">
</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="attachments/74646056/75235816.png"
data-image-src="attachments/74646056/75235816.png">
</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="attachments/74646056/75236393.png"
data-image-src="attachments/74646056/75236393.png">
</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="attachments/74646056/75236394.png"
data-image-src="attachments/74646056/75236394.png">
</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="attachments/74646056/75236396.png"
data-image-src="attachments/74646056/75236396.png">
</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="attachments/74646056/75236397.png"
data-image-src="attachments/74646056/75236397.png">
</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="attachments/74646056/75236428.png"
data-image-src="attachments/74646056/75236428.png">
</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="attachments/74646056/75236430.png"
data-image-src="attachments/74646056/75236430.png">
</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="attachments/74646056/75236439.png"
data-image-src="attachments/74646056/75236439.png">
</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 |
Índice
Índice | ||||||
---|---|---|---|---|---|---|
|
Objetivo
O objetivo deste guia é descrever o desenvolvimento, publicação e visualização de relatórios no Fluig, para facilitar a compreensão será detalhado um exemplo de relatório de usuários.
Ambiente de Desenvolvimento
Para o desenvolvimento de relatórios é necessário possuir o Java™ JDK/JRE superior a 1.6. Endereço para download: http://java.sun.com/javase/downloads/index.jsp.
O Fluig utiliza o BIRT como motor de execução de relatórios, por esse motivo para o desenvolvimento de relatórios deve-se utilizar o padrão e a metodologia do BIRT.
Recomenda-se o uso do BIRT Report Designer para o desenvolvimento de relatórios para o Fluig. O BIRT pode ser integrado ao Studio ou Eclipse (já instalados para utilização do Fluig Studio, conforme Guia de Instalação Fluig Studio), basta instalar o plugin do BIRT. Para isso é necessário realizar acessar a opção Ajuda -> Instalar Novo Software e seguir os procedimentos a seguir:
- Work with: Selecionar Indigo.
- Busca: Após listar as opções do BIRT, digitar Birt no campo de busca.
- Marcar a caixa de seleção de Business Intelligence, Reporting and Charting.
- Em seguida, acionar Avançar.
O BIRT Report Designer conta com várias funcionalidades que auxiliam no desenvolvimento de relatórios. Entre elas destacam-se: ajuste de layout, configuração de acesso a dados e formatação do relatório.
Segurança Ambiente SaaS
Em caso de execução do Fluig em ambiente SaaS, não é recomendado o uso de relatórios, pois é possível criar relatórios que retornem informações de outras empresas via consulta JPQL ou Dataset. Para garantir a não execução, é necessário definir o valor true para a variável SaaS localizada em: %JBOSS_HOME%\jboss-as-7.2.0.Final\standalone\configuration\standalone.xml. Ex:
Bloco de código |
---|
<simple name="java:global/webdesk/SaaS" value="true"/> |
Conexão direta com o banco de dados
É possível publicar relatórios que se comunicam diretamente com o banco de dados.
Utilize em seu relatório as configurações abaixo atentando para os valores das propriedades 'odaDriveClass' e 'odaURL'.
Para fazer conexão direta com banco de dados SQLServer é preciso utilizar o seguinte padrão:
Bloco de código | ||||
---|---|---|---|---|
| ||||
<property name="odaDriverClass">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
<property name="odaURL">jdbc:sqlserver://IP:1433;databaseName=DATABASE</property> |
Para fazer conexão direta com banco de dados MySQL é preciso utilizar o seguinte padrão:
Bloco de código | ||||
---|---|---|---|---|
| ||||
<property name="odaDriverClass">com.mysql.jdbc.Driver</property>
<property name="odaURL">jdbc:mysql://IP:3306/databaseName=DATABASE</property> |
Desenvolvendo um relatório de Usuários
Através do BIRT Report Designer é possível criar vários relatórios para o Fluig, acessar dados do banco de dados do produto via consulta JPA, JDBC. É possível acessar os dados de outros produtos por conexão JDBC, Web Service ou arquivos XML.
Para facilitar a compreensão a respeito do desenvolvimento de relatórios para o Fluig, será demonstrado um exemplo de criação de relatórios. A seguir os passos necessários para a criação do relatório de usuários, sendo este com dados providos do Fluig através da consulta via dataset. O fonte do exemplo citado pode ser baixado a partir do seguinte link:
Criando um novo projeto e um novo relatório
Abra a ferramenta na qual instalou o plugin do BIRT Report Designer para acompanhar o passo a passo, no exemplo iremos utilizar o Fluig Studio.
- No projeto Fluig previamente criado, clique com o botão direito do mouse na pasta reports, e em seguida em Novo -> Relatório Fluig.
- Em seguida basta informar o Nome do Relatório e clicar em Concluir.
Figura 1 - Criação de relatório no projeto Fluig.
Configurando o acesso aos dados
Um Data Source é mecanismo que guarda os dados de conexão com a fonte de dados, por exemplo, configurações JDBC, Web Service, entre outros. No caso desse relatório será utilizado o acesso aos dados via linguagem JavaScript.
Acompanhe os passos a seguir:
...
effectDuration | 0.5 |
---|---|
id | samples |
history | false |
effectType | fade |
Card | ||||||
---|---|---|---|---|---|---|
| ||||||
Figura 5 - Novo Data Source.
|
...
id | 2 |
---|---|
label | Passo 2 |
- Ao abrir a janela New Data Source, selecione a opção Scripted Data Source e define o nome dsColleague como Data Source Name em seguida clique no botão Concluir.
Figura 6 - Tipo de Data Source.
...
id | 3 |
---|---|
label | Passo 3 |
Na aba Data Explorer clique com o botão direito do mouse sobre o item Data Sets em seguida clique na opção New Data Set conforme figura 7. Data Set é uma tabela temporária do BIRT no qual os dados são armazenados do Data Source e renderizados no relatório.
Figura 7 - Novo Data Set.
Card | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||
Figura 8 - Colunas do Data Set.
|
Incluindo parâmetros no Relatório
É possível incluir parâmetros no relatório a serem solicitados para o usuário antes da sua renderização, auxiliando no filtro de consulta aos dados gerando um relatório específico. Siga os passos a seguir:
...
effectDuration | 0.5 |
---|---|
id | samples |
history | false |
effectType | fade |
Card | ||||||
---|---|---|---|---|---|---|
| ||||||
Figura 9 - Parâmetros do Relatório.
|
...
id | 2 |
---|---|
label | Passo 2 |
A figura 10 ilustra a janela de inclusão de parâmetros.
Figura 10 - Configuração de parâmetros.
Ao abrir a janela New Parameter inclua os seguintes parâmetros:
Matrícula
Campo | Valor |
---|---|
Name | Matricula |
Prompt text | Matrícula do Usuário ou "*" para mostrar todos |
Data type | String |
Display type | Text Box |
Is Required | true |
Mostra Usuários
Campo | Valor |
---|---|
Name | paramEnable |
Prompt text | Mostrar usuários |
Data type | String |
Display type | List Box |
Is Required | true |
Selection Values
Value | Display Text |
---|---|
* | Todos |
true | Ativos |
false | Inativos |
Ordenar Por
Campo | Valor |
---|---|
Name | paramSort |
Prompt text | Ordenar por |
Data type | String |
Display type | List Box |
Selection Values
Value | Display Text |
---|---|
c.colleaguePK.colleagueId | Matrícula |
c.collegueName | Nome |
c.login | Login |
TAG's
O Fluig disponibiliza TAG’s de substituição que auxiliam no desenvolvimento e na segurança da geração das informações do relatório, são elas:
• ${WKCompany}: substitui a variável pelo código da empresa autenticada no Fluig.
• ${WKUser}: substitui a variável pelo código do usuário autenticado no Fluig.
As TAG’s são úteis em casos de informações que só devem ser geradas a respeito da empresa em que o usuário está autenticado, ou em relatórios que mostrem somente informações a respeito do usuário autenticado no Fluig.
Populando o Data Set
No exemplo apresentado neste documento será populado o relatório através de dados providos de consultas JPA acessando o banco do Fluig, porém é possível utilizar outros recursos para popular o Data Set: XML, Web Service e JDBC.
O BIRT renderiza o relatório através da execução de seus eventos, são muitos os eventos disponibilizados pelo BIRT, nesse exemplo serão utilizados:
- initialize: primeiro evento disparado pelo BIRT, é recomendado utilizar esse evento para importação de bibliotecas e inicialização de variáveis;
- beforeOpen: evento disparado antes do BIRT abrir a conexão com a fonte de dados (Data Source);
- fetch: evento disparado pelo BIRT depois da busca de cada registro no Data Set e antes de aplicar os filtros e campos calculados.
Através dos eventos é possível desenvolver a lógica de consulta e geração de dados através da linguagem de programação JavaScript , além disso é possível fazer uso de vários recursos e bibliotecas da linguagem Java™.
...
effectDuration | 0.5 |
---|---|
id | samples |
history | false |
effectType | fade |
...
default | true |
---|---|
id | 1 |
label | Initialize |
- Selecione a aba Script na pagina do relatório e em seguida selecione o evento initialize, inclua o seguinte código conforme 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.
O código a cima importa as bibliotecas Java™ e a biblioteca disponibilizada pelo Fluig para consulta aos dados do produto, além de realizar a inicialização das variáveis utilizadas pelo relatório.
Detalhes sobre o código:
...
id | 2 |
---|---|
label | BeforeOpen |
- Selecione a aba Data Explorer, expanda o item Data Sets e clique no colleagueDataSet em seguida clique na aba Script então selecione o evento beforeOpen e inclua o seguinte código conforme a figura 12.
Bloco de código | ||
---|---|---|
| ||
try{
var factory = DatasetFactory.getInstance(${WKCompany});
var constraints = new Array();
var sortingFields = new Array();
var i = 0;
//Filtra somente pela matricula do 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 ativos caso selecionado
if(params["paramEnable"].value != null && params["paramEnable"].value != "*"){
constraints[i] = factory.createConstraint("active", params["paramEnable"].value, params["paramEnable"].value, ConstraintType.MUST);
i++;
}
//Ordena conforme seleção
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.
O código acima monta a consulta do relatório através da consulta via dataset e inclui os filtros da solicitação de acordo com os parâmetros definidos pelo usuário.
Detalhes sobre o código:
...
id | 3 |
---|---|
label | Fetch |
...
Bloco de código | ||
---|---|---|
| ||
if (dataset != null) {
if (count < dataset.rowsCount){
//monta o objeto da linha
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"] = "Sim";
}else{
row["active"] = "Não";
}
//Atualiza o contador
count++;
return true;
}
return false;
} |
Figura 13 - Evento fetch.
Obtendo dados via conexão JDBC
Uma forma alternativa de obtenção de dados para criação de relatórios é a utilização de JDBC. É necessário criar um Data Source que se conecte com o banco de dados, nele serão armazenados os dados para conexão, via JDBC, ao banco de dados.
...
effectDuration | 0.5 |
---|---|
id | samples |
history | false |
effectType | fade |
...
default | true |
---|---|
id | 1 |
label | Passo 1 |
Selecione a aba Data Explorer, clique com o botão direito do mouse sobre o item Data Source em seguida selecione a opção New Data Source conforme a figura 14.
Figura 14 – Novo Data Source
...
id | 2 |
---|---|
label | Passo 2 |
Ao abrir a janela New Data Source, selecione a opção JDBC DataSource e define o nome JDBC-DataSource como Data Source Name em seguida clique no botão Next, conforme a figura 15.
Figura 15 – Tipo Data Source
...
id | 3 |
---|---|
label | Passo 3 |
Na próxima janela a conexão com o banco de dados deve ser configurada.
No campo Driver Class selecione o driver de conexão com o banco de dados, neste caso, a conexão será feita com o banco MySQL®. Se o driver necessário não estiver listado, basta adiciona-lo clicando em Managed Drivers...
Informe também os valores para Database URL, User Name e Password de acordo com o banco de dados escolhido, conforme a figura 16.
Figura 16 – Configurando conexão com banco de dados.
...
id | 4 |
---|---|
label | Passo 4 |
Na aba Data Explorer clique com o botão direito do mouse sobre o item Data Sets em seguida clique na opção New Data Set.
Figura 17 – Criando Novo Data Set.
...
id | 5 |
---|---|
label | Passo 5 |
- Selecione o DataSource criado (JDBC-DataSource), no campo Data Set Type selecione SQL Select Query, informe um nome para o Data Set e clique em next, conforme a figura 18.
Figura 18 – Configurando Data Set.
...
id | 6 |
---|---|
label | Passo 6 |
- Na próxima tela informe a SQL que busca os dados no banco de dados, neste exemplo, serão buscados os volumes da empresa autenticada no Fluig.
Figura 19 – Criação da Query SQL
A Query abaixo busca no banco de dados todos os volumes da empresa do usuário autenticado no Fluig, este código é obtido através da TAG ${WKCompany}.
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 | ||
---|---|---|
| ||
Poderá ocorrer um erro quando concluir a criação do Data Set pois a TAG ${WKCompany} não existe no contexto do BIRT. A figura a seguir apresenta o erro devido à utilização da TAG, este é um erro de sintaxe no SQL e indica que ${WKCompany} não é um comando SQL. Porém quando o relatório for executado no Fluig, ela retornará o código da empresa normalmente, com isso a TAG será substituída pelo código da empresa do usuário autenticado no Fluig, corrigindo o erro de sintaxe. Figura 20 – Erro do Birt pelo uso da TAG ${WKCompany} |
Nota | ||
---|---|---|
| ||
A criação de relatório no Birt utilizando conexão JDBC exige atenção com relação à segurança da publicação do relatório no Fluig, uma vez que o arquivo .rptdesign (XML do relatório Birt) deixa exposto os parâmetros de conexão com o banco de dados, porém o campo senha fica ofuscado com base64. Por este motivo e pela facilidade de busca das informações do Fluig, sempre recomendamos a criação de relatórios com fontes de dados via Dataset do Fluigou query JPA. Se a criação de relatórios utilizando JDBC for necessária, recomendamos que ao publicar um relatório no Fluig as configurações de permissão sejam definidas apenas para leitura. Usuários que possuem permissão de manutenção podem fazer o download dos anexos e com isso terão acesso aos dados de conexão com o banco de dados. |
Formatando a visualização do Relatório
É necessária a inclusão dos componentes de renderização do relatório. Clique na aba Layout para visualizar a página do relatório que está em branco e em seguida selecione a aba Palette conforme a figura 21.
Figura 21 – Relatório em branco.
Na aba Pallets é possível incluir vários componentes de visualização e renderização de dados entre eles destacam-se:
- Label: Texto curto e estático.
- Text: Texto longo é possível formatá-lo com TAG’s HTML.
- Dynamic Text: Texto dinâmico provido do Data Set.
- Image: Inclusão de imagens.
- Grid: Formatador de dados em Grid.
- Table: Tabela de dados.
- Chart: Gráficos de pizza, linha, tubo, etc.
...
effectDuration | 0.5 |
---|---|
id | samples |
history | false |
effectType | fade |
...
default | true |
---|---|
id | 1 |
label | Componente Image |
É possível incluir imagens da internet, incluir imagens de arquivo ou ainda embutir a imagem no XML do relatório. Neste exemplo será usada uma imagem em anexo para posteriormente mostrar como publicar relatórios com anexo.
Arraste um componente Image no relatório, ao abrir a janela Edit Image Item, selecione a opção Image file in shared resources, selecione o arquivo da imagem na opção Enter resource file e em seguida clique no botão Insert.
Figura 22 – Componente Image.
...
id | 2 |
---|---|
label | Componente Text |
Arraste um componente Text no relatório, ao abrir a janela Edit Text Item selecione a opção HTML e na área de texto inclua a seguinte informação formatada em HTML:
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> |
Em seguida clique no botão OK conforme figura 23.
Figura 23 - Componente Text.
...
id | 3 |
---|---|
label | Componente Label |
- Arraste um componente Label no relatório, clique duas vezes sobre o componente incluído e digite Relatório de Usuários, na aba Property Editor - Label -> General defina a formatação da label, conforme figura 24.
Figura 24 - Título do relatório.
...
id | 4 |
---|---|
label | Componente Table |
- Arraste um componente Table, ao abrir a janela Insert Table defina 6 colunas e 1 detalhe e clique no botão OK conforme figura 25.
Figura 25 - Configuração da Tabela.
...
id | 5 |
---|---|
label | Lables para Table |
Na tabela adicionada ao relatório inclua um componente Label para cada coluna da linha Header Row defina os seguintes valores:
- Matrícula.
- Nome.
- Login.
- E-mail.
- Ativo.
- Administrador.
Formate as labels incluídas definindo cor da fonte e cor de fundo conforme figura 26.
Figura 26 - Título das Colunas.
Renderizando dados do Data Set
Selecione a aba Data Explorer e expanda o colleagueDataSet criado anteriormente e em seguida arraste cada item do Data Set para a coluna Detail Row da tabela criada anteriormente conforme figura 27.
Figura 27 - Data Set.
Publicando Relatórios
Publicação
Após a conclusão do desenvolvimento do relatório, é necessário realizar a exportação do mesmo para a navegação de documentos Fluig.
...
effectDuration | 0.5 |
---|---|
id | samples |
history | false |
effectType | fade |
...
default | true |
---|---|
id | 1 |
label | Passo1 |
Para isso clique sobre o pasta do relatório com o botão direito do mouse e acione Exportar.
Figura 28 – Exportação de Relatório.
Informações | ||
---|---|---|
| ||
Os anexos são exportados junto ao relatório. Na exportação, o arquivo .rptdesign é automaticamente identificado como arquivo principal, e os demais arquivos são classificados como anexo. |
...
id | 2 |
---|---|
label | Passo 2 |
Na tela de Exportação, clique sobre Expotar para o servidor Fluig e em seguida acione Avançar.
Figura 29 – Exportação de relatório.
...
id | 3 |
---|---|
label | Passo 3 |
Na tela Exportar Relatório, é necessário informar o nome do Servidor, identificar se está será a publicação de um Novo Relatório, definir o nome do relatório, a Pasta Destino (conforme imagem foi informado o código da pasta destino) e em seguida mencionar o tipo de Versionamento (como estamos fazendo uma nova publicação, selecionamos Manter Atual).
Figura 29 – Exportação de relatório.
...
id | 4 |
---|---|
label | Passo 4 |
- Na pasta Relatório da Navegação de Documentos será possível observar que o relatório foi publicado com sucesso.
Figura 29 – Publicação de relatório.
Visualizador de Relatórios
Após concluir a publicação, para visualizá-lo, clique sobre o relatório na pasta onde foi feita a publicação no Fluig.
Uma nova janela deverá abrir, para iniciar a execução do relatório de colaboradores desenvolvido anteriormente é necessária a inclusão de parâmetros, defina os seus valores e em seguida clique no botão OK.
Figura 32 – Parâmetros do relatório.
O relatório deverá mostrar todos os usuários cadastrados no Fluig para a empresa em que o usuário está autenticado.
Figura 33 – Relatório de Usuários– Resultado.
Opções do visualizador
A ferramenta de visualização de relatório do fluig possui várias funcionalidades:
- Verificar Indice: Caso o relatório desenvolvido possua índice é possível listá-lo.
- Executar relatório: Permite que o relatório seja executado novamente.
- Exportar dados: Exporta os dados gerados do relatório em arquivo, permitindo selecionar as colunas desejadas e o separador de dados.
- Exportar relatório: Converte os dados do relatório em diferentes formatos de arquivos: Microsoft® Excel®, PostScript®, PDF, Microsoft® Word e Microsoft® Power Point®, permite também a seleção de páginas que serão exportadas.
- Imprimir relatório: Imprime relatório selecionando as impressoras instaladas no computador do usuário autenticado e permite imprimir em formato PDF ou HTML.
- Imprimir relatório no servidor: Imprime relatório a partir das impressoras instaladas no servidor do Fluig.
- Navegação de páginas: permite a navegação entre as páginas do relatório.
Figura 34 – Funcionalidades do visualizador de relatórios.
JPA - Funções de Agregação
Funções de Agregação
O Fluig suporta através de consultas JPA e seu banco de dados, o uso de funções de agregação, tais como: AVG, SUM, COUNT, MAX e MIN. Permite também utilizar agrupamentos: GROUP BY e HAVING
Tabela de entidades
A tabela abaixo referencia a relação entre o código de dataset, a entidade de persistência JPA utilizada nas consultas, e a respectiva tabela no banco de dados. As colunas das entidades de persistência são as mesmas apresentadas no dataset.
Código dataset | Entidade JPA | Tabela banco de dados |
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 | CONHECIMENTO |
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 | ASSUNTO |
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 o valor do Count
rowMap.get("d.publisherId");
//Busca o Código do documento
rowMap.get("count(d.documentPK.documentId)"); |
Acessando dados de Formulários
Importando bibliotecas
A partir da classe DatasetFactory é possível acessar dados de formulários publicados no Fluig.
Para popular um relatório através de dados de fichários é necessário a importação das seguintes 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); |
Retornando dados do formulário
Através da classe DatasetFactory é possível buscar dados de formulários, incluir filtros e ordenação. Exemplo de utilização:
Bloco de código | ||
---|---|---|
| ||
//Monta as 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 o resultado pelo nome do Cliente
var sortingFields = new Array("name_cli");
dataset = factory.getDataset("cad_cli", null, constraints, sortingFields); |
O exemplo acima invoca o método getDataset passando alguns argumentos extras como parâmetros:
- Nome do Dataset: Nome do serviço de dados do formulário;
- Campos: Retorna apenas os campos recebidos no array informado. Caso null, retorna todos os campos.
- Constraints: Vetor com as condições de busca do Dataset. Em cada condição de busca (constraint) deve-se informar o nome do campo do formulário que será filtrado, a faixa de valores inicial e final, e o tipo de Constraint. Os tipos podem ser:
- MUST: Indica que todos os registros do Dataset devem satisfazer a esta condição.
- SHOULD: Indica que os registros do Dataset podem ou não atender à condição. Este tipo é mais comum quando se necessita que um mesmo campo tenha valores A ou B (onde cada um será uma constraint SHOULD).
- MUST_NOT: indica que nenhum dos registros pode satisfazer a condição.
- Ordenação: Vetor com a lista de campos que será utilizada para ordenação dos registros no Dataset.
O fonte do exemplo citado acima pode ser baixado a partir do seguinte link:
Busca de dados de Formulário com filtro por data
Para realizar consultas via Dataset com filtros do tipo Data, é necessário antes salvar o campo da ficha no formato aaaa/mm/dd (ano/mês/dia) para que seja possível realizar a busca via Dataset.
Exemplo de consulta:
Bloco de código | ||
---|---|---|
| ||
//Monta as 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 oel resultado pelopor el nomenombre dodel Cliente var sortingFields = new Array("name_cli"); dataset = factory.getDataset("cad_cli", null, constraints, sortingFields); |
Third Party Trademarks
Adobe, Flash, Flex, Flex Builder, PostScript and Reader are either registered trademarks or trademarks of Adobe Systems Incorporated in the United States and/or other countries.
Apache is a trademark of The Apache Software Foundation.
Firefox and Mozilla are registered trademarks of the Mozilla Foundation.
JavaScript is a trademark of Oracle Corporation.
Microsoft, Active Directory, Excel, Internet Explorer, Outlook, PowerPoint, SQL Server, Windows and Windows Vista are either registered trademarks or trademarks of Microsoft Corporation in the United States and/or other countries.
MySQL is a trademark of Oracle Corporation and/or its affiliates.
Oracle, Java and OpenOffice.org are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners.
Progress and OpenEdge are trademarks or registered trademarks of Progress Software Corporation or one of its subsidiaries or affiliates in the U.S. and other countries.
Red Hat and JBoss are registered trademarks of Red Hat, Inc. in the United States and other countries.
Any other third party trademarks are the property of their respective owners.
...
</pre>
</div>
</div>
<p> </p>
</div>
|