BizTalk Custom XSLT для EDI — вложенные циклы

Я новичок в написании пользовательского 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, а затем сделал for-each для 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».

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


person Philip    schedule 29.05.2018    source источник
comment
Правильно ли расположен узел N1Loop1 в выходном файле? Откройте схему вывода, чтобы проверить, где она должна появиться.   -  person Jay    schedule 01.06.2018


Ответы (1)


Если вы генерируете несколько данных 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>
person Ed Bangga    schedule 22.06.2018
comment
Спасибо за это, я собираюсь попробовать это и дам вам знать, что происходит! - person Philip; 27.06.2018