"
Apoiado por

Guarda dados XML numa ST (Simple Transformation)

No outro dia estava a aprender sobre ST (Simple Transformations) e lembrei-me que, ainda que tenha sido desenvolvida para transformar dados, é uma forma práctica de guardar dados XML.

Temos o seguinte XML:


  <cocktails>
    <cocktail id="gt" nome="Gin Tonic"/>
    <cocktail id="ws" nome="Whiskey Sour"/>
    <cocktail id="cl" nome="Campari Laranja"/>
  </cocktails>

A forma de o guardar numa ST é envolvê-la da seguinte forma:


<xsl:transform version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:sap="http://www.sap.com/sapxsl">
  <xsl:strip-space elements="*"/>
  <xsl:template match="/">
    <cocktails>
      <cocktail id="gt" name="Gin Tónico"/>
      <cocktail id="ws" name="Whiskey Sour"/>
      <cocktail id="cl" name="Campari Laranja"/>
    </cocktails>
  </xsl:template>
</xsl:transform>

E depois lê-la para uma STRING assim:


DATA: xml_str TYPE string.
xml_str = ||.
CALL TRANSFORMATION zcocktail_data
  SOURCE XML xml_str
  RESULT XML xml_str.

E agora temos o XML numa variável do tipo STRING.
Nota: é apenas importante que o XML_STR de entrada seja um XML válido ainda que vá ser ignorado.

Se quisermos converter o XML numa tabela interna basta usar outra ST simples:


<?sap.transform simple?>
<tt:transform 
  xmlns:tt="http://www.sap.com/transformation-templates" 
  xmlns:ddic="http://www.sap.com/abapxml/types/dictionary" 
  xmlns:def="http://www.sap.com/abapxml/types/defined">
  <tt:root name="T_COCKTAIL" type="ddic:ZCOCKTAIL_T"/>
  <tt:template>
    <cocktails>
      <tt:loop ref=".T_COCKTAIL">
        <cocktail>
          <tt:attribute name="id" value-ref="ID"/>
          <tt:attribute name="name" value-ref="NAME"/>
        </cocktail>
      </tt:loop>
    </cocktails>
  </tt:template>
</tt:transform>

E depois chamar o seguinte comando para converter o XML na tabela intena:


DATA: t_cocktail TYPE zcocktail_t.
CALL TRANSFORMATION zcocktail_itbl
  SOURCE XML xml_str
  RESULT constants = t_cocktail.

E aqui está uma forma pouco ortodoxa mas práctica e simples de guardar dados sem ter de recorrer à base de dados.

O Abapinho saúda-vos.

Deixe um comentário


Acerca do Abapinho
O Abapinho é suportado pelo WordPress
Artigos (RSS) e Comentários (RSS).