BizTalk Custom XSLT для EDI - вложенные циклы - PullRequest
0 голосов
/ 29 мая 2018

Я довольно новичок в написании пользовательского XML для картографа Biztalk, и у меня возникла проблема с вложенным циклом, который мне нужно сделать.

   <xsl:for-each select="customers">
    <xsl:for-each select="customer">
      <xsl:variable name="var:v9" select="'BY'" />
      <xsl:variable name="var:v10" select="@name" />
      <xsl:variable name="var:v11" select="'91'" />
      <xsl:variable name="var:v12" select="@accountNumber" />
      <ns0:N1Loop1>
        <ns0:N1>
          <N101>
            <xsl:value-of select="$var:v9" />
          </N101>
          <N102>
            <xsl:value-of select="$var:v10" />
          </N102>
          <N103>
            <xsl:value-of select="$var:v11" />
          </N103>
          <N104>
            <xsl:value-of select="$var:v12" />
          </N104>
        </ns0:N1>
      </ns0:N1Loop1>
      <xsl:for-each select="products">
        <xsl:for-each select="product">
          <xsl:variable name="var:v13" select="'VC'" />
          <xsl:variable name="var:v14" select="@sku" />
          <xsl:variable name="var:v15" select="'003'" />
          <xsl:variable name="var:v16" select="'208'" />
          <xsl:variable name="var:v17" select="@expirationDate" />
          <xsl:variable name="var:v19" select="'F'" />
          <xsl:variable name="var:v20" select="'RX'" />
          <xsl:variable name="var:v21" select="@description" />
          <xsl:variable name="var:v22" select="@caseSize" />
          <xsl:variable name="var:v23" select="@size" />
          <xsl:variable name="var:v24" select="'EA'" />
          <xsl:variable name="var:v25" select="'INV'" />
          <xsl:variable name="var:v26" select="@unitPrice" />
          <xsl:variable name="var:v27" select="'MF'" />
          <xsl:variable name="var:v28" select="@manufacturerName" />
          <ns0:LINLoop1>
            <ns0:LIN>
              <LIN02>
                <xsl:value-of select="$var:v13" />
              </LIN02>
              <LIN03>
                <xsl:value-of select="$var:v14" />
              </LIN03>
            </ns0:LIN>
            <ns0:G53>
              <G5301>
                <xsl:value-of select="$var:v15" />
              </G5301>
            </ns0:G53>
            <ns0:DTM_4>
              <DTM01>
                <xsl:value-of select="$var:v16" />
              </DTM01>
              <xsl:variable name="var:v18" select="userCSharp:ConvertDate(string($var:v17))" />
              <DTM02>
                <xsl:value-of select="$var:v18" />
              </DTM02>
            </ns0:DTM_4>
            <ns0:PID>
              <PID01>
                <xsl:value-of select="$var:v19" />
              </PID01>
              <PID02>
                <xsl:value-of select="$var:v20" />
              </PID02>
              <PID05>
                <xsl:value-of select="$var:v21" />
              </PID05>
            </ns0:PID>
            <ns0:PO4>
              <PO401>
                <xsl:value-of select="$var:v22" />
              </PO401>
              <PO402>
                <xsl:value-of select="$var:v23" />
              </PO402>
              <PO403>
                <xsl:value-of select="$var:v24" />
              </PO403>
            </ns0:PO4>
            <ns0:CTPLoop1>
              <ns0:CTP_2>
                <CTP02>
                  <xsl:value-of select="$var:v25" />
                </CTP02>
                <CTP03>
                  <xsl:value-of select="$var:v26" />
                </CTP03>
              </ns0:CTP_2>
            </ns0:CTPLoop1>
            <ns0:N1Loop2>
              <ns0:N1_2>
                <N101>
                  <xsl:value-of select="$var:v27" />
                </N101>
                <N102>
                  <xsl:value-of select="$var:v28" />
                </N102>
              </ns0:N1_2>
            </ns0:N1Loop2>
          </ns0:LINLoop1>
        </xsl:for-each>
      </xsl:for-each>
    </xsl:for-each>
  </xsl:for-each>

Я сделал for-each, чтобы найтиПользовательские поля в N1Loop1, а затем следуют инструкции для каждого LINLoop1, чтобы просмотреть каждый из продуктов прямо под полями N1.Когда я использую этот код, я получаю следующую ошибку:

Ошибка btm1046: Ошибка проверки вывода: Элемент 'X12_00401_832' в пространстве имен 'http://schemas.microsoft.com/BizTalk/EDI/X12/2006' имеет недопустимый дочерний элемент' N1Loop1 'в пространстве имен'http://schemas.microsoft.com/BizTalk/EDI/X12/2006'. Список возможных ожидаемых элементов:' LINLoop1, CTT 'в пространстве имен' http://schemas.microsoft.com/BizTalk/EDI/X12/2006', а также 'SE'.

Может ли кто-нибудь указать мне на правонаправление.Вся помощь оценена.

1 Ответ

0 голосов
/ 22 июня 2018

Если вы генерируете несколько данных x12 на основе каждого клиента, обязательно добавьте эти узлы CTT и SE после цикла foreach.Это основано на требовании проверки EDI X12_00603_832.

<foreach> <customer>
   <foreach><n1loop1></foreach>
   <foreach><linloop1></foreach>          
   <CTT>        
     <CTT01>23</CTT01>
   </CTT>
   <SE>
    <SE01>154</SE01>
    <SE02>ST02</SE02>
   </SE> </customer></foreach>
...