ステップ 3b: WCF-WebHttp アダプターを使用して Salesforce から営業案件の詳細を取得する
このセクションでは、受信する営業案件通知を処理するオーケストレーションを強化し、通知から営業案件名を抽出し、それを使用して Salesforce に送信する要求クエリを作成します。 こうすることで、営業案件に関連付けられている製品固有の詳細情報を取得します。 Salesforce からのクエリ応答がBizTalk Serverに返されます。 これを達成するには、次の手順を実行します。
Salesforce にクエリ メッセージを送信するためのスキーマとメッセージ変数を作成します。
営業案件通知の値を使用して、営業案件に関連付けられている製品の詳細を取得するクエリを作成するためのマップを作成します。
Salesforce からクエリ応答を受信するためのスキーマを作成します。
要求および応答スキーマのためのメッセージ変数を作成します。
Salesforce にクエリ メッセージを送信するためのスキーマおよびメッセージ変数を作成する
営業案件通知から利用できる情報を利用して Salesforce から製品詳細を取得するには、クエリを Salesforce に送信する必要があります。 クエリは XML メッセージとして Salesforce に送信されます。 次の手順では、要求メッセージのスキーマを作成します。 次の手順では、営業案件通知スキーマをこのスキーマにマッピングし、営業案件の製品詳細を取得するためのクエリを作成します。
クエリ要求を送信するためのスキーマを作成するには
BizTalk Server プロジェクトに新しいスキーマを追加します。 これに
QueryRequest.xsd
という名前をつけます。ルート ノードの名前を に
QueryRequest
変更します。 QueryRequest レコードの下に子フィールド要素を追加し、 という名前を付けますQuery
。スキーマ内の 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>'
前の手順で、クエリ メッセージのスキーマを既に作成しています。 この手順では、営業案件通知スキーマをクエリ要求スキーマにマップし、Functoid を使用してこのクエリを作成します。 このクエリは、QueryRequest.xsd スキーマの Query 要素に値として渡されます。
営業案件通知をマップするには
BizTalk Server プロジェクトにマップを追加します。 マップに という名前を付けます
Notification_QueryRequest.btm
。ソース スキーマを NotificationService_soap_sforce_com_2005_09_outbound.xsd に設定します。 宛先スキーマを QueryRequest.xsd に設定します。
マッピングサーフェイスに 文字列連結 Functoid を追加します。 [ 文字列連結 Functoid の構成 ] ダイアログ ボックスを開き、次のように入力値を指定します。
入力 値 Input[0] SELECT Amount, Id, Name,(SELECT Quantity, ListPrice, PricebookEntry.UnitPrice, PricebookEntry.Name FROM OpportunityLineItems) FROM Opportunity Where Name = ' Input[1] Name 要素を 2 番目の入力として使用するために、送信元スキーマの Name 要素を Functoid に接続します。 Input[2] ' 注: 最後の入力値には、終わりの単一引用符 (') のみを指定します。 次のスクリーンショットは、 String Concatenate Functoid の構成を示しています。
の構成
3 つの入力パラメーターを連結すると、Salesforce に送信するために必要なクエリが形成されます。
次のスクリーンショットにあるように、文字列連結 Functoid を送信先スキーマの 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 スキーマを作成したら、2 つのメッセージの種類を表すための 2 つのメッセージ変数をオーケストレーションに作成する必要があります。
メッセージ変数を作成するには
NotificationService.odx オーケストレーションを開き、オーケストレーション ビューで 2 つの新しいメッセージを追加します。 メッセージ名を と
QueryResultMsg
にQueryRequestMsg
設定します。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 図形内に Transform 図形を追加します。 変換図形をダブルクリックして、[変換の構成] ダイアログ ボックスを開きます。 ダイアログ ボックスで、[ 既存のマップ ] オプションを選択し、ドロップダウンから [BtsSalesforceIntegration.Notification_QueryRequest] を選択します。 [ソース] を [NotificaitonMessage] に、[宛先] を [QueryRequestMsg] に設定し、[OK] をクリックします。
ConstructQuery 図形内で、Transform 図形の後に、Message Assignment 図形を追加します。 メッセージの割り当て図形をダブルクリックして、次の式を追加します。
QueryRequestMsg(BtsSalesforceIntegration.PropertySchema.Query) = QueryRequestMsg.Query;
これを行うことで、QueryRequestMsg スキーマの Query 要素の値を、プロパティ スキーマの昇格された要素 Query に渡します。 WCF-WebHttp ポートを構成するときは、この要素を使用してクエリの値を動的に要求メッセージに渡します。
ConstructQuery 図形の後に、Send 図形を追加します。 図形
SendQueryRequest
に名前を付け、メッセージの種類を QueryRequestMsg に設定します。[送信] 図形の後に、Receive 図形を追加し、 という名前を付けます
ReceiveQueryResult
。 図形のメッセージの種類を QueryResultMsg に設定します。Salesforce にクエリ要求を送信し、応答のクエリ結果を受信するためのポートを追加します。 ポート構成ウィザードで、次のオプションを選択します。
ポート名を として
SalesforceRESTInterface
指定します。新しいポート種類を作成するオプションを選択します。
[通信パターン] を [要求-応答] に設定します。
[Port direction of communication]\(通信のポート方向\) を [I'll be sending a request and receiving a response]\(要求を送信し、応答を受信する\) に設定し、[Port binding]\(ポート バインド\) を [後で指定する] に設定します。
ポートの 要求 操作を Send 図形 (SendQueryRequest) に接続し、ポートの 応答 操作を Receive 図形 (ReceiveQueryResult) に接続します。 次のスクリーンショットは、Salesforce へのクエリ要求の送信と応答の受信プロセスを表すオーケストレーションの一部を示しています。
する
このトピックでは、Salesforce にクエリ要求を送信し、Salesforce で作成された営業案件に関する詳細 (製品、数量など) を受信するようにオーケストレーションを更新しました。 次のトピックでは、このソリューションを更新して、Salesforce 応答を社内の SQL Server データベースに入力します。