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