IMPORTANTE: Esta documentação foi descontinuada. Leia a documentação Template e suas utilizações atualizada no nosso novo portal de documentação.
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 passar 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>
IMPORTANTE: 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 passar 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 > 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>
IMPORTANTE: é 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 passar 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 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 passar 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 passar 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íida 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 terminado tamanho.
Sintaxe
${SeuCampo[0..9]}
0 = valor inicial
9 = 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.
IMPORTANTE: 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.
O que você deve passar 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 < 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 passar 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 passar 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". É ela que permite a tratativa personalizada do número.
Sintaxe
<#setting number_format="0.##">
${seuCampo}
IMPORTANTE: as hashtag (#) 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 passar 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>