Como implementar multi-level Muenchian grouping nos mapas de BizTalk

Inspirado por uma pergunta nos fóruns de BizTalk Server: XSLT Mapping Question (Summing Values)… como é que nós podemos efectuar multi- level Muenchian grouping (agrupar com base em múltiplos elementos) nos mapas de BizTalk e realizar operações matemáticas sobre este grupo?

Você poderá ler mais informações sobre o problema na thread do fórum mas basicamente o problema é: Somar todos os registos para cada grupo como mesmo tipo de conta e da mesma cidade e criar um único registo!

Solução

multi-level-Muenchian-grouping-sample1

Adicione duas scripting functoids ao mapa:

  • Configurar a primeira functoid como "Inline XSLT Call Template" e colocar o seguinte script:

<xsl:key name="groups" match="Record" use="concat(City, '|', AccountType)"/>

  • Configurar a segunda functoid também como "Inline XSLT Call Template" e colocar o seguinte script:

<xsl:for-each select="Record[generate-id(.)=generate-id(key('groups',concat(City, '|', AccountType)))]">
   <Record>
      <xsl:variable name="city" select="City/text()" />
      <xsl:variable name="type" select="AccountType/text()" />

      <AccountType>
         <xsl:value-of select="$type" />
      </AccountType>
      <City>
         <xsl:value-of select="$city" />
      </City>

      <xsl:variable name="negativeTotal" select="sum(//Record[(City = $city) and (AccountType = $type) and (Sign = '-')]/Price)" />
      <xsl:variable name="positiveTotal" select="sum(//Record[(City = $city) and (AccountType = $type) and (Sign = '+')]/Price)" />
      <xsl:choose>
         <xsl:when test="$positiveTotal &gt; $negativeTotal">
            <Sign>+</Sign>
            <Price>
               <xsl:value-of select="$positiveTotal - $negativeTotal" />
            </Price>
         </xsl:when>
         <xsl:otherwise>
            <Sign>-</Sign>
            <Price>
               <xsl:value-of select="$negativeTotal - $positiveTotal" />
            </Price>
         </xsl:otherwise>
      </xsl:choose>
   </Record>
</xsl:for-each>

  • Arraste um link a partir da segunda scripting functoid para o registo "Record" no esquema de destino;

 

Poderá efetuar download do código fonte aqui:

How to implement multi-level Muenchian grouping in BizTalk Maps (34.9 KB)
Microsoft | MSDN Code Gallery

Seja o primeiro a comentar ;)

Postar um comentário

BizTalk 360

Visitas

Arquivo do blog