步驟 3b:使用 WCF-WebHttp 配接器從 Salesforce 擷取機會詳細資料
在本節中,我們會著重於處理內送商機通知的協調流程、從通知擷取商機名稱,並用來建立要求查詢以傳送至 Salesforce。 這樣會擷取與商機關聯的產品相關特定詳細資料。 Salesforce 的查詢回應會傳回BizTalk Server。 若要達到此目標,我們會執行下列步驟:
建立結構描述和訊息變數以傳送查詢訊息至 Salesforce。
建立對應以使用商機通知中的值來建立查詢以擷取與該商機相關聯的產品詳細資料。
建立結構描述以接收來自 Salesforce 的查詢回應。
為要求和回應結構描述建立訊息變數。
建立架構和訊息變數以將查詢訊息傳送至 Salesforce
若要使用透過商機通知取得的資訊,從 Salesforce 擷取產品詳細資料,我們需要將查詢傳送給 Salesforce。 查詢會以 XML 訊息的形式傳送至 Salesforce。 因此,在下列程式中,我們會建立要求訊息的架構。 在後續程式中,我們將使用此架構對應商機通知架構,以建構查詢來擷取商機的產品詳細資料。
建立用來傳送查詢要求的架構
將新的架構新增至BizTalk Server專案。 將其命名為
QueryRequest.xsd
。將根節點重新命名為
QueryRequest
。 在 QueryRequest 記錄下新增子欄位專案,並將其命名為Query
。升級架構中的 Query 元素,使其可用於協調流程內。 在稍後的步驟中,我們將使用此升級元素來指派查詢字串。
以滑鼠右鍵按一下 [查詢] 元素,指向 [ 升級],然後按一下 [ 快速升級]。 這會導致使用Query元素建立PropertySchema.xsd架構。 請注意 PropertySchema 的命名空間。 您在BizTalk Server管理主控台中設定實體埠時,未來步驟將會需要此專案。
儲存所有變更。
將商機通知架構對應至查詢架構
若要擷取與商機相關聯的產品詳細資料,我們需要傳送類似 Salesforce 的查詢:
SELECT Amount, Id, Name,(SELECT Quantity, ListPrice, PricebookEntry.UnitPrice, PricebookEntry.Name FROM OpportunityLineItems) FROM Opportunity Where Name = '<opportunity_name>'
在上一個程式中,我們已建立查詢訊息的架構。 在此程式中,我們會將商機通知架構對應至查詢要求架構,並使用運算質來建構此查詢。 此查詢會當做值傳遞至QueryRequest.xsd架構中的Query元素。
對應商機通知
將地圖新增至BizTalk Server專案。 將對應
Notification_QueryRequest.btm
命名為 。將來源架構設定為 NotificationService_soap_sforce_com_2005_09_outbound.xsd。 將目的地架構設定為 QueryRequest.xsd。
將 字串串連 運算質新增至對應介面。 開啟 [ 設定字串串連運算質 ] 對話方塊,並指定輸入值,如下所示:
輸入 值 Input[0] SELECT Amount, Id, Name, (SELECT Quantity, ListPrice, PricebookEntry.UnitPrice, PricebookEntry.Name FROM OpportunityLineItems) FROM 商機名稱 = ' Input[1] 將來源架構中的 Name 元素連接到運算質,以使用 Name 元素的值做為第二個輸入。 Input[2] ' 注意: 針對最後一個輸入值,請只指定結尾單引號 (') 。 下列螢幕擷取畫面描述 字串串連 運算質的設定。
串連三個輸入參數時,它會形成傳送至 Salesforce 的必要查詢。
將字串串連運算質連接到目的地架構中的 Query 元素,如下列螢幕擷取畫面所示。
儲存對應變更。
建立架構以接收查詢回應訊息
在本節中,我們會建立架構,以從 Salesforce 接收查詢回應訊息。 在本節中,我們會手動建立查詢回應的架構。
建立架構以接收查詢回應
將新的架構新增至BizTalk Server專案,並將其命名為
QueryResult.xsd
。Salesforce QueryResult 物件描述從 Salesforce 收到的查詢回應。 因此,我們將建置架構來描述下列內容:
<?xml version="1.0" encoding="utf-16" ?> - <xs:schema xmlns="http://BtsSalesforceIntegration.QueryResult" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" targetNamespace="http://BtsSalesforceIntegration.QueryResult" xmlns:xs="http://www.w3.org/2001/XMLSchema"> - <xs:element name="QueryResult"> - <xs:complexType> - <xs:sequence> <xs:element name="done" type="xs:string" /> - <xs:sequence> - <xs:element name="records"> - <xs:complexType> - <xs:sequence> <xs:element name="Id" type="xs:string" /> <xs:element name="Amount" type="xs:string" /> <xs:element name="Name" type="xs:string" /> - <xs:sequence> - <xs:element name="OpportunityLineItems"> - <xs:complexType> - <xs:sequence> <xs:element name="done" type="xs:string" /> - <xs:sequence minOccurs="1" maxOccurs="unbounded"> - <xs:element name="records"> - <xs:complexType> - <xs:sequence> <xs:element name="Quantity" type="xs:string" /> <xs:element name="ListPrice" type="xs:string" /> - <xs:element name="PricebookEntry"> - <xs:complexType> - <xs:sequence> <xs:element name="UnitPrice" type="xs:string" /> <xs:element name="Name" type="xs:string" /> </xs:sequence> <xs:attribute name="type" type="xs:string" /> <xs:attribute name="url" type="xs:string" /> </xs:complexType> </xs:element> </xs:sequence> <xs:attribute name="type" type="xs:string" /> <xs:attribute name="url" type="xs:string" /> </xs:complexType> </xs:element> </xs:sequence> <xs:element name="totalSize" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:sequence> <xs:attribute name="type" type="xs:string" /> <xs:attribute name="url" type="xs:string" /> </xs:complexType> </xs:element> </xs:sequence> <xs:element name="totalSize" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
架構結構看起來應該如下所示:
儲存架構的變更。
建立 QueryRequest 和 QueryResult 架構的訊息變數
建立 QueryRequest 和 QueryResult 架構之後,您必須在協調流程中建立兩個訊息變數,才能表示這兩個訊息類型。
建立訊息變數
開啟 NotificationService.odx 協調流程,然後在協調流程檢視中新增兩個新訊息。 將訊息名稱設定為
QueryRequestMsg
和QueryResultMsg
。將 QueryRequestMsg 的訊息類型設定為 BtsSalesforceIntegration.QueryRequest。
將 QueryResultMsg 的訊息類型設定為 BtsSalesforceIntegration.QueryResult。
儲存協調流程的變更。
更新協調流程以將訊息傳送至 Salesforce 並接收回應
在步驟 3a:將 Salesforce 商機通知接收至BizTalk Server主題中,我們建立了協調流程來接收 Salesforce 的商機通知,並傳送通知。 在此步驟中,我們會以此協調流程為基礎,將查詢要求傳送給 Salesforce,以取得與商機相關的產品詳細資料,並接收回應。 我們已建立 (QueryRequest.xsd 和 QueryResult.xsd) 和訊息變數 (QueryRequestMsg 和 QueryResultMsg) 在此步驟中使用的架構。
將查詢要求傳送至 Salesforce 並接收回應
在 SendNotificationAck 圖形之後新增建構訊息圖形。 將圖形的名稱設定為
ConstructQuery
,並將 Messages Constructed 屬性設定為 QueryRequestMsg。在 ConstructQuery 圖形內,新增 轉換 圖形。 按兩下 [轉換] 圖形以開啟 [轉換組態] 對話方塊。 在對話方塊中,選取 [現有對應 ] 選項,然後從下拉式清單中選取 [BtsSalesforceIntegration.Notification_QueryRequest]。 將 Source 設定為 NotificaitonMessage、 Destination to QueryRequestMsg,然後按一下 [ 確定]。
在 ConstructQuery 圖形的轉換圖形之後,新增訊息指派圖形。 按兩下 [訊息指派] 圖形,然後新增下列運算式:
QueryRequestMsg(BtsSalesforceIntegration.PropertySchema.Query) = QueryRequestMsg.Query;
如此一來,我們會將QueryRequestMsg架構中的Query元素值傳遞至屬性架構中的升級專案Query。 設定 WCF-WebHttp 埠時,我們將使用此元素動態傳遞查詢值給要求訊息。
在 ConstructQuery圖形之後,新增傳送圖形。 將圖形
SendQueryRequest
命名為 ,並將訊息類型設定為 QueryRequestMsg。在 [傳送] 圖形之後,新增 [接收] 圖形並將其命名為
ReceiveQueryResult
。 將圖形的訊息類型設定為 QueryResultMsg。新增埠以將查詢要求傳送至 Salesforce,並接收回應中的查詢結果。 在 [埠組態精靈] 中,選取下列選項:
將埠名稱指定為
SalesforceRESTInterface
。選取選項以建立新的埠類型。
將 通訊模式 設定為 要求-回應。
將 通訊的埠方向 設定為 [我將會傳送要求並接收回應 ],並將 [埠系結 ] 設定為 [稍後指定]。
將埠的要求作業連接到傳送圖形 (SendQueryRequest) ,並將埠的回應作業連接到接收圖形 (ReceiveQueryResult) 。 下列螢幕擷取畫面描述協調流程的一部分,代表將查詢要求傳送至 Salesforce 並接收回應的程式。
在本主題中,我們已更新協調流程,以將查詢要求傳送至 Salesforce,並接收更多詳細資料 (,例如產品、數量等 ) 在 Salesforce 中建立的機會。 在後續主題中,我們將更新此解決方案,以將 Salesforce 回應輸入內部部署SQL Server資料庫。