<div id="main-content" class="wiki-content group"> <p> </p> <h1 id="TécnicadeIntegração-Índice">Índice</h1> <p> <style type='text/css'>/*<![CDATA[*/ div.rbtoc1412696291282 { padding: 0px; } div.rbtoc1412696291282 ul { list-style: none; margin-left: 0px; } div.rbtoc1412696291282 li { margin-left: 0px; padding-left: 0px; } /*]]>*/ </style> <div class='toc-macro rbtoc1412696291282'> <ul class='toc-indentation'> <li><span class='TOCOutline'>1</span> <a href='#TécnicadeIntegração-Objetivo'>Objetivo</a></li> <li><span class='TOCOutline'>2</span> <a href='#TécnicadeIntegração-Oxmlqueseráimportado'>El xml que se importará</a></li> <li><span class='TOCOutline'>3</span> <a href='#TécnicadeIntegração-Carregandooconteúdodoxmlparaumavariáveljavascript.'>Cargando el contenido del xml para una variable javascript.</a></li> <li><span class='TOCOutline'>4</span> <a href='#TécnicadeIntegração-Removendoinformaçõesdesnecessáriasparaoparserxmljavascript'>Eliminando informaciones innecesarias para el parser xml javascript</a></li> <li><span class='TOCOutline'>5</span> <a href='#TécnicadeIntegração-RealizandoaconversãodeStringparadocumentoxmljavascript.'>Realizando la conversión de String para documento xml javascript.</a></li> <li><span class='TOCOutline'>6</span> <a href='#TécnicadeIntegração-Manipulandoodocumentoxml'>Manipulando el documento xml</a></li> </ul> </div> </p> <p> </p> <h1 id="TécnicadeIntegração-Objetivo">Objetivo.</h1> <p>El objetivo de esta guía es demostrar la técnica estándar para la manipulación de archivos xml dentro de los scripts personalizados del Fluig. </p> <p>En este ejemplo cargaremos un xml externo al Fluig vía java y haremos la lectura y la manipulación del mesmo vía javascript.</p> <p>De esta manera queda más fácil tratar el XML y realizar integraciones.</p> <p> </p> <p> </p> <h1 id="TécnicadeIntegração-Oxmlqueseráimportado">El xml que se importará</h1> <p>El xml que estaremos cargado es una representación del catálogo de cds.</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;"><CATALOG> <CD> <TITLE>Empire Burlesque</TITLE> <ARTIST>Bob Dylan</ARTIST> <COUNTRY>USA</COUNTRY> <COMPANY>Columbia</COMPANY> <PRICE>10.90</PRICE> <YEAR>1985</YEAR> </CD> <CD> <TITLE>Hide your heart</TITLE> <ARTIST>Bonnie Tyler</ARTIST> <COUNTRY>UK</COUNTRY> <COMPANY>CBS Records</COMPANY> <PRICE>9.90</PRICE> <YEAR>1988</YEAR> </CD> </CATALOG> </pre> </div> </div> <p> <span><br /></span> </p> <p>Esta es apenas parte del contenido del archivo xml que se consumirá en este ejemplo. Note que este posee tres capas:</p> <ol> <li>La primera está representada por la<em> tag <catalog></em> y representa la colección entera de cds.  </li> <li>En el segundo nivel tenemos la <em>tag <CD></em> que representa un CD de todo el catálogo.  </li> <li>Las otras tags internas a <em>tag <CD></em> representan los datos del CD y forman la tercera capa de este ejemplo.  </li> </ol> <p>La comprensión de esa estructuración se hace necesaria para entender el ejemplo como en su conjunto.</p> <p> Para verificar el contenido completo del <em>xml</em> haga clic en este <a href="http://www.w3schools.com/xml/cd_catalog.xml" class="external-link" rel="nofollow">link</a>. </p> <p> </p> <p> </p> <h1 id="TécnicadeIntegração-Carregandooconteúdodoxmlparaumavariáveljavascript.">Cargando el contenido del xml para una variable javascript.</h1> <p> El próximo paso es cargar el contenido de ese xml para una variable javascript . Para eso haremos la carga de algunos objetos java para que consigamos cargar el xml (funciones del paquete <a href="http://java.net" class="external-link" rel="nofollow">java.net</a>.URL). </p> <div class="code panel pdl" style="border-width: 1px;"> <div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"> <b>Cargando documento</b> </div> <div class="codeContent panelContent pdl"> <pre class="first-line: 0; theme: Confluence; brush: java; gutter: true" style="font-size: 12px;">var url = new java.net.URL("http://www.w3schools.com/xml/cd_catalog.xml"); var connection = url.openConnection(); connection.setRequestMethod("GET"); connection.setRequestProperty("Accept", "text/plain"); if (connection.getResponseCode() != 200) { throw "Failed : HTTP error code : " + connection.getResponseCode(); } var br = new java.io.BufferedReader(new java.io.InputStreamReader(connection.getInputStream())); </pre> </div> </div> <p> El código anterior cargará a la variable <em>br</em> el contenido del <em>xml</em> desde la dirección <a href="http://www.w3schools.com/xml/cd_catalog.xml" class="external-link" rel="nofollow">www.w3schools.com/xml/cd_catalog.xml</a> . Note que existen tratamientos para situaciones donde no fue posible cargar el documento (getResponseCode() != 200) . Preste atención a esos tratamientos para devolver un mensaje de error amigable al usuario, dependiendo del momento y lugar donde esta técnica se utiliza. Antes de que lo enviemos al parser javascript tendremos que hacer algunos tratamientos y este será nuestro próximo paso. </p> <p> </p> <p> </p> <h1 id="TécnicadeIntegração-Removendoinformaçõesdesnecessáriasparaoparserxmljavascript">Eliminando informaciones innecesarias para el parser xml javascript</h1> <p>Antes de que lo enviemos al parser será necesario eliminar algunas tags o informaciones que no son aceptadas por el parser xml del javascript. A seguir tenemos una demostración del bloque que elimina esos ítems en nuestro xml de ejemplo.</p> <div class="code panel pdl" style="border-width: 1px;"> <div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"> <b>Cargando documento</b> </div> <div class="codeContent panelContent pdl"> <pre class="first-line: 0; theme: Confluence; brush: java; gutter: true" style="font-size: 12px;">var result = ""; while ((output = br.readLine()) != null) { // Eliminando encabezamientos y comentarios iniciales del xml ejemplo if (output.indexOf("<?") > -1 || output.indexOf("<!") > -1) { continue; } result += output; } </pre> </div> </div> <p> Con el código anterior terminamos de eliminar líneas que comienzan con "<?" y <em>"<!"</em> que no son aceptadas por el parser xml y que no hacen parte de la estructura relevante de datos del xml. </p> <p>En este caso, por coincidencia, estaremos eliminando las dos primeras líneas del archivo xml:</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;"><?xml version="1.0" encoding="UTF-8"?> <!-- Edited by XMLSpy --> </pre> </div> </div> <p> </p> <p> <span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 0);">En este ejemplo tuvimos esos dos elementos que se eliminaron para que el xml fuese aceptado por el parser xml. Pero en algunos xml algunos elementos se deberán tratar antes de ser sometidos al parser. </span></span> </p> <p> <span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 0);"><br /></span></span> </p> <p> <span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 0);"><strong>Atención</strong> especial a documentos xml que contengan la tag<em> <class>.</em></span></span> </p> <p> <span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 0);">En casos como este se deberá realizar un tratamiento eliminando estas propiedades para que sea posible convertir el xml de la respuesta de la url en un documento xml javascript válido.</span></span> </p> <p> </p> <div class="aui-message warning shadowed information-macro"> <p class="title">Observación</p> <span class="aui-icon icon-warning">Ícono</span> <div class="message-content"> <p>Tags con nombre "class" no podrán tener propiedades internas definidas en la propia tag de apertura .</p> <p> Ej: <em><class size="10"></em>. </p> </div> </div> <p> <span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 0);"> </span></span> </p> <p> <span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 0);"><br /></span></span> </p> <h1 id="TécnicadeIntegração-RealizandoaconversãodeStringparadocumentoxmljavascript.">Realizando la conversión de String para documento xml javascript.</h1> <p>Después de la remoción y tratamiento de "impurezas" de la string xml llegamos al punto más crítico que es la transformación o parsing de la string xml para un documento javascript xml .</p> <p>El código para esa transformación es muy simple y podrá ser visto en el bloque a seguir</p> <div class="code panel pdl" style="border-width: 1px;"> <div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"> <b>Realizando el Parsing del xml para variable javascript</b> </div> <div class="codeContent panelContent pdl"> <pre class="first-line: 0; theme: Confluence; brush: java; gutter: true" style="font-size: 12px;">var doc = new XML(result); </pre> </div> </div> <p> </p> <p>En esta parte descubriremos si el xml pasado al javascript es válido como documento xml y si el mismo está apto para consulta y manipulación. En caso negativo se generará un mensaje de error en el log del jboss del Fluig y se interrumpirá la ejecución del evento en cuestión.</p> <div class="aui-message warning shadowed information-macro"> <p class="title">Observación</p> <span class="aui-icon icon-warning">Ícono</span> <div class="message-content"> <p>En el caso que la ejecución del evento Fluig haya sido interrumpida antes de generar los resultados esperados, verifique el log del Jboss Fluig para posibles errores de parser del xml enviado.</p> </div> </div> <p> <span style="color: rgb(0, 0, 0);"> </span> </p> <p> <span style="color: rgb(0, 0, 0);"><br /></span> </p> <h1 id="TécnicadeIntegração-Manipulandoodocumentoxml">Manipulando el documento xml</h1> <p> Ahora tenemos la variable doc cargada con el xml partir del primer nivel, es decir. La variable doc representa la <em>tag <catalog></em> de la string xml del documento que se envió. Para que veamos la cantidad de cds que tenemos en el catálogo simplemente usemos el siguiente comando : <em>doc.CD.length()</em> . </p> <p> Recordando que el caso de las letras deberá seguir el mismo existente dentro del xml. En este ejemplo nosotros tomamos la cantidad de ocurrencias existente dentro de la colección CD existente dentro del objeto Doc (que representa <em><catalog></em>. En el bloque a seguir tenemos ejemplos de consulta, creación y eliminación de campos dentro de todos los registros de CD existentes en el documento xml. </p> <div class="code panel pdl" style="border-width: 1px;"> <div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"> <b>Manipulando xml</b> </div> <div class="codeContent panelContent pdl"> <pre class="first-line: 0; theme: Confluence; brush: java; gutter: true" style="font-size: 12px;"> log.info("Se encontraron " + doc.CD.length() + " discos en el XML"); // Haciendo la lectura de todos los CDs que vinieron al xml for (y in doc.CD) { // Exhibiendo una propiedad de uno de los ítems del xml log.info("Nombre del disco: " + doc.CD[y].TITLE); // ingresando nuevo campo que contendrá el valor del campo price convertido al precio en real doc.CD[y].VALORBRL = "R$ " + (doc.CD[y].PRICE * 2); // Eliminando campo Year del xml delete doc.CD[y].YEAR; } </pre> </div> </div> <p> </p> <p>Después de la ejecución de esta lógica "for" la variable doc ya contendrá el xml modificado y podrá ser utilizada para cualesquiera fines necesarios, entre ellos el reenvío a una aplicación externa al Fluig.</p> <div class="aui-message warning shadowed information-macro"> <p class="title">Observación</p> <span class="aui-icon icon-warning">Ícono</span> <div class="message-content"> <p> Recuerde que manipulación de xml es<em> case-sensitive</em> con la denominación original del documento xml. </p> </div> </div> <div class="aui-message hint shadowed information-macro"> <p class="title">Informaciones</p> <span class="aui-icon icon-hint">Icon</span> <div class="message-content"> <p>Adjunto a este artículo tenemos esta misma lógica descrita en este archivo implementada como evento de formulario. Recordando que esta misma lógica también se podrá implementar como evento de proceso o un dataset.</p> <p> Download: <a href="attachments/152798259/152700448.js">displayFields.js</a> </p> </div> </div> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> </div> |