Template e suas utilizações

Descubra mais sobre Template Transformer e suas utilizações na Digibee Integration Platform.

Conheça algumas validações e tratamentos que podem ser feitos com a linguagem Freemarker quando você utiliza o Template Transformer. Para saber mais sobre esse componente, clique aqui e leia o artigo a respeito.

Para os exemplos que você verá a seguir, considere o seguinte JSON de entrada:

{
  "pedido": {
    "codigo": 213,
    "valor": 4513423.1322,
    "descricao": "   pedido teste   ",
    "itens": [
      {
        "nome": "item 1",
        "quantidade": 2
      },
      {
        "nome": "item 2",
        "quantidade": 1
      }
    ]
  }
}

LIST

Possibilita que você realize iterações em um array (lista) no JSON. Imagine essa função na criação de uma lista dinâmica de elementos na saída, que transforma o JSON em XML.

Sintaxe

<#list SuaLista as elemento>
              bloco de informações que será iterado.
</#list>

Exemplo

Utilizando a entrada informada no começo do artigo, você pode criar uma lista dinâmica de itens utilizando o template.

O que você deve informar no template é:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:web="http://www.webservicex.net/">
<soap:Header/>
    <soap:Body>
        <web:pedido>
            <web:itens>
                <#list itens as item>
                    <web:item>
                        <web:nome>${item.nome}</web:nome>
                        <web:quantidade>${item.quantidade}</web:quantidade>
                    </web:item>
                </#list>
            </web:itens>
        </web:pedido>
    </soap:Body>
</soap:Envelope>

Saída do XML

<soap:Envelope 	xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\"	xmlns:web=\"http://www.webservicex.net/\">
 <soap:Header/>    
 <soap:Body>        
  <web:pedido>            
    <web:itens>                                    
     <web:item>                        
     	<web:nome>item 1</web:nome>                        
     	<web:quantidade>2</web:quantidade>                    
     </web:item>                    
     <web:item>                        
     	<web:nome>item 2</web:nome>                        
     	<web:quantidade>1</web:quantidade>                    
     </web:item>            
    </web:itens>        
  </web:pedido>    
 </soap:Body>
</soap:Envelope>

Lembre-se que a saída do Template é um XML em uma string.

IF/ELSE

Você pode utilizar essa função para a validação de algumas informações. Mesmo quando os seus campos estiverem nulos ou vazios, não há um grande impacto na sua transformação de dados.

Sintaxe

<#if condição>
             Bloco de informações caso a condição do if seja verdadeira.
<#elseif condição>
              Bloco de informações caso a condição do elseif seja verdadeira.
<#else>
              Bloco de informações caso nenhuma das condições seja tomadas.
</#if>

Não existe limitação para a quantidade de elseif e também é possível usar apenas um if sem o else - tudo depende da sua necessidade.

Exemplo

Utilizando a entrada informada no começo do artigo, você pode criar uma validação na qual o campo "código" precise ser maior que 0 (zero).

O que você deve informar no template é:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:web="http://www.webservicex.net/">

    <soap:Header/>  
    <so ap:Body> 
       <web:pedido> 
           <web:codigo><#if codigo &gt; 0 >${codigo}</#if></web:codigo>
       </web:pedido> 
    </soap:Body> 
</soap:Envelope>

Saída do XML Caso a condição seja verdadeira:

<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:web=\"http://www.webservicex.net/\">

   <soap:Header/> 
       <soap:Body>     
          <web:pedido> 
              <web:codigo>213</web:codigo>  
          </web:pedido> 
       </soap:Body> 
</soap:Envelope>

Caso a condição seja falsa:

<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:web=\"http://www.webservicex.net/\"> 
   <soap:Header/> 
       <soap:Body>     
          <web:pedido> 
              <web:codigo></web:codigo>  
          </web:pedido> 
       </soap:Body> 
</soap:Envelope>

Sabia que a utilização da função não é limitada a condições simples? Você também pode utilizar expressões para validar se o campo existe (??) e se ele tem conteúdo (has_content).

Sintaxe

<#if seuCampo?? && seuCampo?has_content>
             Bloco de informações caso o campo exista e tenha conteúdo.
<#else>
              Bloco de informações caso nenhuma das condições seja tomadas.
</#if>

É possível utilizar operadores lógicos para uma condição mais avançada.

&& - para o E (AND).

|| - para o OU (OR).

Exemplo

Agora veja como melhorar a validação para que o if feito no primeiro caso seja utilizado apenas se o campo "código" existir e tiver conteúdo.

O que você deve informar no template é:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:web="http://www.webservicex.net/"> 
    <soap:Header/>  
    <so ap:Body> 
       <web:pedido>
          <#if codigo?? && codigo?has_content>
              <web:codigo><#if codigo gt 0 >${codigo}</#if></web:codigo>
          </#if>
       </web:pedido> 
    </soap:Body> 
</soap:Envelope>

Saída do XML Caso a condição seja verdadeira:

<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:web=\"http://www.webservicex.net/\"> 
   <soap:Header/> 
       <soap:Body>     
          <web:pedido> 
              <web:codigo>213</web:codigo>  
          </web:pedido> 
       </soap:Body> 
</soap:Envelope>

Caso a condição seja falsa...

... e o campo "código" tenha um valor null, vazio ou não venha na entrada:

<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:web=\"http://www.webservicex.net/\"> 
   <soap:Header/> 
       <soap:Body>     
          <web:pedido> 
          </web:pedido> 
       </soap:Body> 
</soap:Envelope

TRIM

Essa função é utilizada para remover os espaços em branco no começo e no final de uma string.

Sintaxe

${SeuCampo?trim}

Exemplo

Utilizando a entrada informada no começo do artigo, você pode remover os espaços em branco no começo e final do campo "descrição".

O que você deve informar no template é:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:web="http://www.webservicex.net/">

    <soap:Header/>  
    <soap:Body> 
       <web:pedido> 
           <web:descricao>${descricao?trim}</web:descricao> 
       </web:pedido> 
    </soap:Body> 
</soap:Envelope>

Saída do XML

<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:web=\"http://www.webservicex.net/\"> 
    <soap:Header/> 
    <soap:Body>    
       <web:pedido> 
           <web:descricao>pedido teste</web:descricao>    
       </web:pedido> 
    </soap:Body> 
</soap:Envelope>

REPLACE

Essa função é utilizada para substituir um valor pré-determinado no campo.

Sintaxe

${SeuCampo?replace}

Exemplo

Utilizando a entrada informada no começo do artigo, você pode substituir o valor "teste" em descrição por "prod".

O que você deve informar no template é:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:web="http://www.webservicex.net/"> 
    <soap:Header/>  
    <soap:Body> 
       <web:pedido> 
           <web:descricao>${descricao?replace("teste","prod")}</web:descricao> 
       </web:pedido> 
    </soap:Body> 
</soap:Envelope>

Saída do XML

<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:web=\"http://www.webservicex.net/\">
     <soap:Header/>
     <soap:Body>
	   <web:pedido>
	       <web:descricao>   pedido prod   </web:descricao>
	   </web:pedido>
     </soap:Body>
</soap:Envelope>

SLICE (SUBSTRING)

Essa função é utilizada quando o campo é obrigado a ter um determinado tamanho.

Sintaxe

${SeuCampo[0..9]} 0 = valor inicial9 = valor final

Exemplo

Utilizando a entrada informada no começo do artigo, você pode determinar que o campo tenha apenas 10 caracteres, mesmo que o tamanho dele seja maior.

Uma boa prática aplicável à essa função é utilizar IF/ELSE para validar o tamanho desejado do campo. Dessa forma, você evita erros caso o campo seja menor do que o valor de corte estabelecido.

O que você deve informar no template é:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:web="http://www.webservicex.net/">
    <soap:Header/>
    <soap:Body>  
        <web:pedido>
            <#if descricao?length &lt; 10>       
                <web:descricao>${descricao}</web:descricao>
            <#else>
                <web:descricao>${descricao[0..9]}</web:descricao>
            </#if>
       </web:pedido>
    </soap:Body>
</soap:Envelope>

Saída do XML

<soap:Envelope
    xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\"
    xmlns:web=\"http://www.webservicex.net/\">   
    <soap:Header/>   
    <soap:Body>         
         <web:pedido>                           
             <web:descricao>   pedido </web:descricao>      
         </web:pedido>   
    </soap:Body>
</soap:Envelope>

LOCALE

Essa função é utilizada no template para configurar a localização de um valor numérico.

Sintaxe

<#setting locale="en_US">${SeuCampo}<#setting locale="pt_BR">${SeuCampo}

Para poder utilizá-lo, você precisa informar a tag antes do campo dinâmico. Veja como fazer isso nos exemplos abaixo.

Exemplo

Utilizando a entrada informada no começo do artigo, você pode formatar o valor para que ele fique no padrão do sistema legado.

O que você deve informar no template é:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:web="http://www.webservicex.net/">     
    <soap:Header/>
    <soap:Body>
        <web:pedido>
            <#setting locale="en_US">
            <web:valor_US>${valor}</web:valor_US>
            <#setting locale="pt_BR">
            <web:valor_BR>${valor}</web:valor_BR>
        </web:pedido>
    </soap:Body>
</soap:Envelope>

Saída do XML

<soap:Envelope
	xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\"
	xmlns:web=\"http://www.webservicex.net/\"> 
	<soap:Header/>
	<soap:Body>       
		<web:pedido>                        
			<web:valor_US>4,513,423.13</web:valor_US>
			<web:valor_BR>4.513.423,13</web:valor_BR>   
		</web:pedido>    
	</soap:Body>
</soap:Envelope>

Customizado

Caso a formatação desejada não seja aceita pelo seu sistema, você pode definir a formatação necessária do número por meio da tag "number_format". Permite a você customizar a formatação de números.

Sintaxe

<#setting number_format="0.##">
${seuCampo}

As hashtags (#) definem a quantidade de casas decimais que serão utilizadas.

Exemplo

Utilizando a entrada informada no começo do artigo, você pode formatar o valor para que ele fique no padrão do sistema legado.

O que você deve informar no template é:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:web="http://www.webservicex.net/">     
    <soap:Header/>
    <soap:Body>
        <web:pedido>
            <#setting number_format="0.#">
            <web:valor_custom>${valor}</web:valor_custom>
            <#setting locale="pt_BR">
        </web:pedido>
    </soap:Body>
</soap:Envelope>

Saída do XML

<soap:Envelope  xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:web=\"http://www.webservicex.net/\">  
     <soap:Header/> 
     <soap:Body>     
          <web:pedido>                     
	       <web:valor_custom>4513423.1</web:valor_custom>     
	  </web:pedido> 
     </soap:Body> 
</soap:Envelope>

Atualizado