Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

 

Índice

Índice
style
maxLevel4
outlinetrue
noneexclude.*ndice
 
stylenone


Objetivo

...

O objetivo deste guia é demonstrar a técnica padrão para manipulação de arquivos xml XML dentro dos scripts customizados personalizados do TOTVS Fluig Plataforma


Pré-requisitos

...

Conhecimento prévio em determinados pontos, sendo estes:

  • Visão geral sobre a plataforma fluig
  • Visão geral sobre integração de sistemas
  • JavaScript


Manipulação de arquivos XML

...

Neste exemplo carregaremos um xml externo XML externo ao Fluig fluig via java e faremos a leitura e manipulação do mesmo via javascriptJavaScript.

Desta maneira fica mais fácil tratar o XML para a realização de e realizar integrações.

 

 


O

...

XML que será importado

...

O xml que XML que estaremos carregado carregando é uma representação de catálogo de cdsCDs.

Bloco de código
languagexml
<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>

Esta é apenas parte do conteúdo do arquivo xml que XML que será consumido neste exemplo. Note que ele possui três camadas:

  1. A primeira é representada pela tag <catalog> e representa a coleção inteira de cdsCDs
  2. No segundo nível temos a tag <CD> que representa um CD de todo o catálogo. 
  3. As outras tags internas a à tag <CD> representam os dados do CD e formam a terceira camada deste exemplo. 

...

Para verificar o conteúdo completo do xml clique XML, clique neste link.

 

 


Carregando o conteúdo do

...

XML para uma variável

...

JavaScript

...

O próximo passo é carregar o conteúdo desse xml para XML para uma variável javascript JavaScript. Para isso faremos Faremos a carga de alguns objetos java para conseguirmos carregar o xml XML (funções do pacote java.net.URL).

Bloco de código
languagejava
firstline0
titleCarregando documento
firstline0
linenumberstrue
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()));

O código acima ir carregar para variável br o conteúdo do xml provindo XML provindo do endereço www.w3schools.com/xml/cd_catalog.xml . Note que existem tratamentos para situações onde não foi possível carregar o documento (getResponseCode() != 200) . Atente-se a esses tratamentos para retornar uma mensagem de erro amigável para o usuário dependo , dependendo do momento e local aonde onde esta técnica é utilizada. Antes de mandarmos para o parser javascript teremos JavaScript teremos que fazer alguns tratamentos e este será o nosso próximo passo.

 

 


Removendo informações desnecessárias para o parser

...

XML JavaScript

...

Antes de enviarmos para o parser, será necessário remover algumas tags ou informações que não são aceitas pelo parser xml XML do javascriptJavaScript. Abaixo temos uma demonstração do bloco que remove esses itens em nosso xml XML de exemplo.

Bloco de código
languagejava
firstline0
titleCarregando documentofirstline0
linenumberstrue
var result = "";
while ((output = br.readLine()) != null) {
	// Removendo cabeçalhos e comentários iniciais do xml exemplo
	if (output.indexOf("<?") > -1 || output.indexOf("<!") > -1) {
		continue;
	}
	result += output;
}

Com o código acima acabamos de remover linhas que começam com "<?" e "<!" que não são aceitas pelo parser xml XML e que não fazem parte da estrutura relevante de dados do xmlXML.

Neste caso, por coincidência, estaremos removendo as duas primeira linhas do arquivo xmlXML:

Bloco de código
languagexml
<?xml version="1.0" encoding="UTF-8"?> 
<!-- Edited by XMLSpy --> 

 


Neste exemplo tivemos esses dois elementos que foram removidos para que o xml XML fosse aceito pelo parser xml XML. Mas em alguns xml alguns XML os elementos deverão ser tratados antes de serem submetidos ao parser.


Atenção especial a documentos xml XML que contenham a tag <class>.

Em casos como este deverá ser feito um tratamento removendo essas propriedades para que seja possível converter o xml XML da resposta da url em URL em um documento xml javascript XML JavaScript válido.

 

Nota
titleObservação

Tags com nome "class" não poderão ter propriedades internas definidas na própria tag de abertura .

Ex: <class size="10">.

 

Realizando a conversão de String para documento

...

XML JavaScript

...

Após a remoção e tratamento de "impurezas" da string xml XML, chegamos ao ponto mais crítico que é : a transformação ou parsing da string xml XML para um documento javascript xml JavaScript XML.

O código para essa transformação é bem simples e poderá ser visto no bloco abaixo

Bloco de código
firstline
languagejava
firstline0
titleRealizando o Parsing do xml para variável javascript
0linenumberstrue
var doc = new XML(result);

...


Nesta parte iremos descobrir se o xml XML passado para o javascript é JavaScript é válido como documento xml e XML e se o mesmo está apto para consulta e manipulação. Em caso negativo será gerada uma mensagem de erro no log do jboss do WildFly da plataforma Fluig e a execução do evento em questão será abortadaanulada.

Nota
titleObservação

Caso a execução do evento Fluig tenha sido abortada anulada antes de gerar os resultados esperados, verifique o log do Jboss WildFly Fluig para possíveis erros de parser do xml XML enviado.

 

Manipulando o

...

documento XML

...

Agora temos a varível variável doc carregada com o xml  partir XML a partir do primeiro nível, ou seja. A , a variável doc representa a tag <catalog> da string xml do XML do documento que foi enviado. Para vermos a quantidade de cds CDs que temos no catálogo basta usarmos o seguinte comando : doc.CD.length() .

Lembrado que o caso das letras deverá seguir o mesmo existente dentro do xmlXML. Neste exemplo nós pegamos a quantidade de ocorrências existente dentro da coleção CD existente dentro do objeto Doc doc  (que representa <catalog>. No bloco abaixo temos exemplos de consulta, criação e eliminação de campos dentro de todos os registros de CD existentes no documento xmlXML.

Bloco de código
languagejava
firstline0
titleManipulando xml
firstline0
linenumberstrue
 log.info("Foram encontrados " + doc.CD.length() + " discos no XML");
 // Fazendo a leitura de todos os CDs que vieram no xml
 for (y in doc.CD) {
	// Exibindo uma propriedade de um dos itens do xml
	log.info("Nome do disco: " + doc.CD[y].TITLE);
	// inserindo novo campo que conterá o valor do campo price convertido para o preco em real
	doc.CD[y].VALORBRL = "R$ " + (doc.CD[y].PRICE * 2);

	// Removendo campo Year do xml 
	delete doc.CD[y].YEAR;
}

...


Após a execução desta lógica "for" a variável doc  doc já conterá o xml XML alterado e poderá ser utilizada para quaisquer fins necessários, entre eles o reenvio para uma aplicação externa ao à plataforma Fluig.

Nota
titleObservação

Lembre-se que manipulação de xml XML é case-sensitive com a denominação original do documento xml XML.

Informações
titleInformações

Em anexo a este artigo temos esta mesma lógica descrita neste arquivo implementada como evento de formulário . Lembrando que esta mesma lógica também poderá ser implementada como evento de processo ou um dataset.

Download: displayFields.js

...

Nota

...

title

 

 

...

Observação

Esta técnica não pode ser utilizada para desenvolvimento de Datasets (Método createDataset), pois a classe XMLList não implementa a interface serializable, causando erro na execução deste método. O XML será lido e interpretado, porém não será produzido nenhum resultado.