このセクションでは、受信した営業案件通知を処理し、通知から営業案件名を抽出し、これを使用して 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 要素を Functoid に接続し、Name 要素の値を 2 番目の入力として使用します。 インプット[2] ' 注: 最後の入力値には、終わりの単一引用符 (') のみを指定します。 次のスクリーンショットは、 文字列連結 Functoid の構成を示しています。
を設定
3 つの入力パラメーターが連結されると、Salesforce に送信するために必要なクエリが形成されます。
次のスクリーンショットに示すように、String Concatenate 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 つの新しいメッセージを追加します。 メッセージ名を
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 図形内に Transform 図形を追加します。 [変換] 図形をダブルクリックして、[変換の構成] ダイアログ ボックスを開きます。 ダイアログ ボックスで、[ 既存のマップ ] オプションを選択し、ドロップダウンから [BtsSalesforceIntegration.Notification_QueryRequestを選択します。 [ソース] を [NotificaitonMessage] に、[変換先] を [QueryRequestMsg] に設定し、[OK] をクリックします。
ConstructQuery 図形内で、変換図形の後に、メッセージの割り当て図形を追加します。 [メッセージの割り当て] 図形をダブルクリックし、次の式を追加します。
QueryRequestMsg(BtsSalesforceIntegration.PropertySchema.Query) = QueryRequestMsg.Query;
これを行うことで、QueryRequestMsg スキーマの Query 要素の値を、プロパティ スキーマの昇格された要素 Query に渡します。 WCF-WebHttp ポートを構成するときに、この要素を使用してクエリ値を要求メッセージに動的に渡します。
ConstructQuery 図形の後に、送信図形を追加します。 図形に
SendQueryRequest
名前を付け、メッセージの種類を QueryRequestMsg に設定します。送信図形の後に、受信図形を追加し、
ReceiveQueryResult
名前を付けます。 図形のメッセージの種類を QueryResultMsg に設定します。Salesforce にクエリ要求を送信し、応答でクエリ結果を受信するポートを追加します。 ポート構成ウィザードで、次のオプションを選択します。
ポート名を
SalesforceRESTInterface
として指定します。新しいポートの種類を作成するオプションを選択します。
通信パターンを Request-Response に設定します。
[ポートの通信方向] を [要求を送信して応答を受信する] に設定し、[ポート バインド] を [後で指定] に設定します。
ポートの 要求 操作を送信図形 (SendQueryRequest) に接続し、ポートの 応答 操作を受信図形 (ReceiveQueryResult) に接続します。 次のスクリーンショットは、クエリ要求を Salesforce に送信し、応答を受信するプロセスを表すオーケストレーションの一部を示しています。
する
このトピックでは、オーケストレーションを更新して、Salesforce にクエリ要求を送信し、Salesforce で作成される営業案件に関する詳細情報 (製品、数量など) を受け取ります。 以降のトピックでは、このソリューションを更新して、Salesforce 応答をオンプレミスの SQL Server データベースに入力します。