Адаптер BizTalk создает иерархическую схему

Я пытаюсь использовать адаптер BizTalk (SQL или WCF-SQL) для создания многоуровневой иерархической схемы. Мой запрос такой

SELECT
    CustomerQueueMessage.customer_queue_ID  AS CustomerQueueMsgID,
    CustomerMaster.customer_ID              AS [CustomerID],
    CustomerAddressType.address_type_ID     AS [AddressTypeID],         
    CustomerSalesRep.sales_rep_type_code    AS [SalesRepTypeCode]
 FROM CustomerQueue AS CustomerQueueMessage 
 INNER JOIN dbo.MDM_Customer                AS CustomerMaster       ON (CustomerQueueMessage.customer_queue_ID = CustomerMaster.customer_queue_ID)
 INNER JOIN dbo.MDM_CustomerAddressType     AS CustomerAddressType  ON (CustomerAddressType.customer_queue_ID  = CustomerMaster.customer_queue_ID)
 INNER JOIN dbo.MDM_CustomerSalesRep        AS CustomerSalesRep     ON (CustomerSalesRep.customer_queue_ID     = CustomerMaster.customer_queue_ID)
 FOR XML AUTO, TYPE, ELEMENTS, XMLDATA

Когда я генерирую схему с помощью адаптера SQL, я получаю эту структуру

введите описание изображения здесь

что я хочу это

введите описание изображения здесь

Таблица CustomerSalesRep находится в разделе CustomerAddressType. Я хочу, чтобы CustomerSalesRep находился на одном уровне с CustomerAddressType, оба непосредственно под CustomerMaster.

Если я удалю оператор FOR XML и использую адаптер WCF-SQL для создания схемы, я не получу иерархии, все столбцы будут на одном уровне.

Любые идеи? Предпочтительно я хотел бы сделать это с помощью адаптера WCF-SQL, но и SQL тоже подойдет.


person user3417479    schedule 28.12.2017    source источник


Ответы (1)


Вы можете использовать это.

SELECT
    CustomerSalesRep.sales_rep_type_code    AS "CustomerQueueMessage/CustomerMaster/CustomerSalesRep/SalesRepTypeCode",
    CustomerAddressType.address_type_ID     AS "CustomerQueueMessage/CustomerMaster/CustomerAddressType/AddressTypeID",         
    CustomerMaster.customer_ID              AS "CustomerQueueMessage/CustomerMaster/CustomerID",
    CustomerQueueMessage.customer_queue_ID  AS "CustomerQueueMessage/CustomerQueueMsgID"
 FROM CustomerQueue AS CustomerQueueMessage 
 INNER JOIN dbo.MDM_Customer                AS CustomerMaster       ON (CustomerQueueMessage.customer_queue_ID = CustomerMaster.customer_queue_ID)
 INNER JOIN dbo.MDM_CustomerAddressType     AS CustomerAddressType  ON (CustomerAddressType.customer_queue_ID  = CustomerMaster.customer_queue_ID)
 INNER JOIN dbo.MDM_CustomerSalesRep        AS CustomerSalesRep     ON (CustomerSalesRep.customer_queue_ID     = CustomerMaster.customer_queue_ID)
 FOR XML PATH('SAPcustom'), TYPE, ELEMENTS

Он генерирует такой XML.

<SAPcustom>
  <CustomerQueueMessage>
    <CustomerMaster>
      <CustomerSalesRep>
        <SalesRepTypeCode>1</SalesRepTypeCode>
      </CustomerSalesRep>
      <CustomerAddressType>
        <AddressTypeID>1</AddressTypeID>
      </CustomerAddressType>
      <CustomerID>1</CustomerID>
    </CustomerMaster>
    <CustomerQueueMsgID>1</CustomerQueueMsgID>
  </CustomerQueueMessage>
</SAPcustom>
person Serkan Arslan    schedule 29.12.2017
comment
Привет, Серкан, спасибо за помощь. Извините, если я не понял, но мне нужен CustomerMaster / CustomerSalesRep, а не CustomerMaster / CustomerAddressType / CustomerSalesRep. Однако даже с вашим предложением (укажите полный путь для каждого столбца) я не могу получить желаемую структуру. На самом деле я не могу использовать слово PATH, так как оно не позволяет XMLDATA (требуется, чтобы адаптер SQL читал выбор). - person user3417479; 29.12.2017
comment
@ user3417479 XMLDATA? Я бы вообще не стал использовать. Это для давно устаревшего XDR. Даже XMLSCHEMA не требуется для использования адаптера. Я бы сначала сосредоточился на том, чтобы получить правильный результат, а затем беспокоился о схеме. - person Johns-305; 31.12.2017