Mapas BizTalk: agrupando nós diferentes em uma lista
-
27-09-2019 - |
Pergunta
Existe uma maneira de alcançar a seguinte transformação no mapeador BT? Caso contrário, alguma ideia inteligente?
<Person>
<Age>25</Age>
<Name>Paul</Name>
</Person>
para:
<Person>
<CustomProperties>
<CustomProperty>
<Name>Age</Name>
<Value>25</VAlue>
</CustomProperty>
<CustomProperty>
<Name>Name</Name>
<Value>Paul</VAlue>
</CustomProperty>
</CustomProperties>
Eu tenho que agregar alguns elementos em uma lista de nós.
Desde já, obrigado.
Solução
Não sei muito sobre o mapeador BizTalk, mas o XSLT necessário seria bastante direto:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="Person">
<xsl:copy>
<CustomProperties>
<xsl:apply-templates select="*" />
</CustomProperties>
</xsl:copy>
</xsl:template>
<xsl:template match="Person/*">
<CustomProperty>
<Name><xsl:value-of select="name()" /></Name>
<Value><xsl:value-of select="." /></Value>
</CustomProperty>
</xsl:template>
</xsl:stylesheet>
Outras dicas
Você também pode usar os functóides do TableLooping / TableExtractor em seu mapa para criar os nós de destino.
Veja este post para um exemplo:
http://hestia.typepad.com/flatlander/2007/01/mapping_fixed_e.html
Parece que você tem um mapeamento direto da entrada para a saída. Quando você fizer seu mapeamento, clique com o botão direito do mouse na linha desenhada da entrada para a saída. Selecione "Propriedades". Existem opções para copiar o valor do nó de entrada ou o nome do nó de entrada. Você pode usar dois mapeamentos de cada nó filho, um para extrair o nome e outro para o valor.