<div id="main-content" class="wiki-content group">
	<p>&#160;</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>&#160;</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.&#160;</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>&#160;</p>
	<p>&#160;</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;">&lt;CATALOG>
 &lt;CD>
  &lt;TITLE>Empire Burlesque&lt;/TITLE>
  &lt;ARTIST>Bob Dylan&lt;/ARTIST>
  &lt;COUNTRY>USA&lt;/COUNTRY>
  &lt;COMPANY>Columbia&lt;/COMPANY>
  &lt;PRICE>10.90&lt;/PRICE>
  &lt;YEAR>1985&lt;/YEAR>
 &lt;/CD>
 &lt;CD>
  &lt;TITLE>Hide your heart&lt;/TITLE>
  &lt;ARTIST>Bonnie Tyler&lt;/ARTIST>
  &lt;COUNTRY>UK&lt;/COUNTRY>
  &lt;COMPANY>CBS Records&lt;/COMPANY>
  &lt;PRICE>9.90&lt;/PRICE>
  &lt;YEAR>1988&lt;/YEAR>
 &lt;/CD>
&lt;/CATALOG>
</pre>
		</div>
	</div>
	<p>
		<span><br /></span>
	</p>
	<p>Esta&#160;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 &lt;catalog></em>
			y representa la colección entera de cds.&#160;
		</li>
		<li>En el segundo nivel tenemos la <em>tag &lt;CD></em> que
			representa un CD de todo el catálogo.&#160;
		</li>
		<li>Las otras tags internas a <em>tag &lt;CD></em> representan
			los datos del CD y forman la tercera capa de este ejemplo.&#160;
		</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&#160;<a href="http://www.w3schools.com/xml/cd_catalog.xml"
			class="external-link" rel="nofollow">link</a>.
	</p>
	<p>&#160;</p>
	<p>&#160;</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&#160;<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&#160;<a
			href="http://www.w3schools.com/xml/cd_catalog.xml"
			class="external-link" rel="nofollow">www.w3schools.com/xml/cd_catalog.xml</a>&#160;.
		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&#160;se
		utiliza. Antes de que lo enviemos al parser javascript tendremos que
		hacer algunos tratamientos y este será nuestro próximo paso.
	</p>
	<p>&#160;</p>
	<p>&#160;</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("&lt;?") > -1 || output.indexOf("&lt;!") > -1) {
		continue;
	}
	result += output;
}
</pre>
		</div>
	</div>
	<p>
		Con el código anterior terminamos de eliminar líneas que comienzan con
		"&lt;?" y <em>"&lt;!"</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;">&lt;?xml version="1.0" encoding="UTF-8"?> 
&lt;!-- Edited by XMLSpy --> 
</pre>
		</div>
	</div>
	<p>&#160;</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> &lt;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>&#160;</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>&lt;class size="10"></em>.
			</p>
		</div>
	</div>
	<p>
		<span style="color: rgb(0, 0, 0);"><span
			style="color: rgb(0, 0, 0);">&#160;</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>&#160;</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);">&#160;</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
			&lt;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 :&#160;<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>&lt;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>&#160;</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>&#160;</p>
	<p>&#160;</p>
	<p>&#160;</p>
	<p>&#160;</p>
	<p>&#160;</p>
</div>