2.9.11. Salesforceバインディング

システムからSaaS/クラウドへアクセスするための作りこみを削減できるだけでなく、 既存システムとSaaS/クラウド連携を容易に実現するようなSalesforceバインディングコンポーネントを提供します。

2.9.11.1. サービスユニットのファイル構成

Salesforce BCのサービスユニットのフォルダ構成は下図の通りです。


図2.9.11.1-1

Salesforce BCのサービスユニットに含まれるファイルについて以下に説明します。
Salesforce BCのSUのファイル
表2.9.11.1-1
項目
説明
/META-INF/schema
メッセージ検証用スキーマを格納するフォルダです。
/META-INF/jbi.xml
サービスユニットの配備記述子です。
endpoints.xml
Salesforce BCのエンドポイントの設定が記述されます。
*.su
サービスユニットの管理ファイルです(編集不可)。

2.9.11.2. エンドポイントの設定

SUエディタを使用してSalesforce BCの基本的な設定をする方法を説明します。


図2.9.11.2-1

基本設定項目

Memo
 エンドポイントを追加する方法については、 2.7.1. エンドポイントの追加 をご覧下さい。

表2.9.11.2-1
設定項目
説明

エンドポイント一覧
SUで定義されたエンドポイントの一覧を表示します。
 
基本設定
エンドポイントロール
Salesforce BC のエンドポイントロールを指定します。
プロバイダ、コンシューマから選択 [必須]
サービス名
エンドポイントロールがプロバイダの場合、エンドポイントが提供するサービス名を指定します。
   エンドポイントロールがコンシューマの場合、呼び出し先となるエンドポイントのサービス名を指定します。
QName(名前空間、ローカル名) [必須]
インタフェース名
エンドポイントロールがプロバイダの場合、エンドポイントが提供するインタフェース名を設定します。
   エンドポイントロールがコンシューマの場合、呼び出し先となるエンドポイントのインタフェース名を指定します。
QName(名前空間、ローカル名)[必須]
ESBインスタンス名
分散ESB機能を使用する場合にのみESBインスタンス名を指定します。 その他の場合は空欄にします。
文字(A-Z、a-z)、数字(0-9)、ハイフン(-)、点(.)、下線(_)の組み合わせ [任意]
オペレーション一覧
オペレーションを設定します
 
メッセージエクスチェンジハンドラ
メッセージエクスチェンジハンドラを設定します。
 
共通設定
共通項目(セキュリティ認証、トランザクション、メッセージ送信優先度、エラーリトライ)を設定します。
 
オプション一覧
オプションを設定します。
 

Memo
  エンドポイントロールコンシューマにした場合、動作には別途Inboundサーブレットを配備する必要があります。詳細は[2.9.11.13. Inboundサーブレット]をご参照ください。
エンドポイントロールプロバイダにした場合、サービス名とエンドポイント名の設定が他のエンドポイントと重複しないようにしてください。

Salesforce BCに関する設定項目
表2.9.11.2-2
設定項目
説明

Salesforce BCの設定
SalesforceのログインURL
SalesforceのログインURLを指定します。
【マルチバイト文字列指定可】
文字列(URI)[必須]
  • https://login.salesforce.com/services/Soap/u/20.0
  • http://login.salesforce.com/services/Soap/u/20.0
デフォルト値:https://login.salesforce.com/services/Soap/u/20.0
   ※プロバイダの場合のみ
外部に公開するエンドポイントURL
外部に公開するHTTPサーバーのエンドポイントURLを指定します。
【マルチバイト文字列指定可】
文字列(URI)[必須]
   ※コンシューマの場合のみ
他のコンシューマの設定と重複しないでください。
ユーザ名
Salesforceのログイン用ユーザ名を指定します。
【マルチバイト文字列指定可】
任意の文字列[必須]。
   ※プロバイダの場合のみ
パスワード
Salesforceのログイン用パスワードを指定します。
 ※Salesforce側のアカウント設定を特に変更していない場合は、 パスワードの後ろにセキュリティトークンを連結した文字列を指定する必要があります。 詳細はSalesforceのマニュアルを参照してください。(2012年2月現在)
【マルチバイト文字列指定可】
任意の文字列[必須]。暗号化とします。
   ※プロバイダの場合のみ
XML処理のタイプ
XML処理のタイプを設定します。
下記の値から選択。[任意]
  • SAX
  • DOM
デフォルト値:SAX
圧縮して送受信する
Gzipの形式でリクエストやレスポンスを送受信するかを設定します。
下記の値から選択。[任意]
  • request
  • response
  • both
  • none
デフォルト値:none
   ※プロバイダの場合のみ
Expect-Continueハンドシェイクを行う
エンドポイント単位でプロバイダがexpect-continue handshakeをサポートするかどうかを指定します。
下記の値から選択。[任意]
  • true
  • false
デフォルト値:false
   ※プロバイダの場合のみ
コネクションを再利用する
コネクションを再利用するかどうかを指定します。
下記の値から選択。[必須]
  • true
  • false
  • 自動
デフォルト値:自動
   ※プロバイダの場合のみ
コネクション再利用時に状態をチェックする
コネクション再利用時にそのコネクションが有効であるかをチェックするかどうかを指定できます。
   [コネクションを再利用するにtrueを選択した場合のみ設定可能]
下記の値から選択。[任意]
  • true
  • false
デフォルト値:true
   ※プロバイダの場合のみ
タイムアウト
Keep-Aliveの有効時間。0の場合、Long.MAX_VALUEミリ秒とします。
   [コネクションを再利用するにtrueを選択した場合のみ設定可能]
数値(0〜9223372036854775)[任意]
単位:秒
デフォルト値:0
   ※プロバイダの場合のみ
TCP_NODELAYを有効にする
TCP_NODALAYソケットオプションを有効にするかどうかを指定します。
下記の値から選択。[任意]
  • true
  • false
デフォルト値:true
   ※プロバイダの場合のみ
送受信バッファサイズ
Socketのメッセージ送受信bufferサイズを指定します。
数値(0〜2147483647)[任意]
単位:バイト
デフォルト値:1024
   ※プロバイダの場合のみ
接続タイムアウト
外部サーバへ接続を確立する際のタイムアウト時間を指定します。0の場合、タイムアウト時間は無制限です。
数値(0〜2147483)[任意]
単位:秒
デフォルト値:0
   ※プロバイダの場合のみ
読み取りタイムアウト
外部サーバのレスポンスを読み取りタイムアウト時間を指定します。0の場合、タイムアウト時間は無制限です。
数値(0〜2147483)[任意]
単位:秒
デフォルト値:0
   ※プロバイダの場合のみ
※ 妥当性チェックを行うため、問題がある項目名が赤色となり、正しく修正すると、項目名が黒くなります。 詳細は、2.8. 妥当性チェックを参照してください。
※ コンシューマでエンドポイントロールを指定する場合、参照をクリックすると、SU-エンドポイント一覧 ダイアログが表示されます。このダイアログを利用して、カレントサービスアセンブリプロジェクトに存在しているサービスユニットに関するサービス名やインタフェース名などの情報を再利用できます。


図2.9.11.2-2

2.9.11.3. オペレーション設定

 オペレーション一覧追加をクリックし、オペレーションを追加します。
 SUエディタにおける参照をクリックして、SU-エンドポイント一覧ダイアログからサービスユニットとエンドポイントを指定する場合、オペレーション一覧にそれらの指定情報が表示されます。オペレーションリストから、1つのオペレーションを選択してオペレーション設定情報を再利用できます。


図2.9.11.3-1

オペレーションの設定項目
表2.9.11.3-1
項目
説明

オペレーション名
エンドポイントロールがプロバイダの場合、エンドポイントが提供するオペレーション名を指定します。
   エンドポイントロールがコンシューマの場合呼び出し先となるエンドポイントのオペレーション名を指定します。
QName(名前空間、ローカル名)[必須]
プロバイダに、SOAPボディ要素操作は「replace/insert」である場合、名前空間は「urn:partner.soap.sforce.com」に固定します。
プロバイダに、SOAPボディ要素操作は「replace/insert」である場合、ローカル名は「create/query/update/delete」のみから選択できます。
メッセージ交換方式
使用するメッセージ交換方式を指定します。
   コンシューマの場合、プロバイダの提供するメッセージ交換方式を指定してください。
in-only、 in-out、robust-in-onlyから選択 [必須]
スキーマファイル インプット/アウトプット 対象SUフォルダのMETA-INFフォルダのschemaフォルダ配下にあるスキーマファイルの相対パスを指定します。
指定したスキーマファイルは、後述のインプット検証/アウトプット検証を選択することで実行時のメッセージ検証に利用することができます。
選択しなかった場合も、XSLT SE による変換の定義の際のインプット/アウトプットスキーマとして利用することができます。    [メッセージ交換方式を指定した場合のみ設定可能]
参照
(インプット/アウトプット)
スキーマファイルの選択ダイアログを開きます。
スキーマファイルを選択すると、その相対パスがインプットおよびアウトプットのファイルのテキストボックスに表示されます。
利用方法については、[2.7.7. スキーマファイルの設定] を参照して下さい。
 
検証実行 インプットの検証実行 実行時に、インプットで指定したスキーマファイルでのメッセージの検証を実施します。
   選択時には、スキーマファイルのインプットの指定は必須項目となります。
   [メッセージ交換方式を指定した場合のみ設定可能]
デフォルトは非選択 [任意]
アウトプットの検証実行 実行時に、アウトプットで指定したスキーマファイルでのメッセージの検証を実施します。
   選択時には、スキーマファイルのアウトプットの指定は必須項目となります。
   [メッセージ交換方式を指定した場合のみ設定可能]
デフォルトは非選択 [任意]
オペレーションロケーション
このoperationの識別子です。同じエンドポイントの別のオペレーションと違う文字列を指定してください。コンシューマの場合、リクエストURLからオペレーションロケーション文字列を取得し、対応するオペレーションを判断します。
【マルチバイト文字列指定可】
任意の文字列[必須]
プロバイダ側レスポンス結果を利用する
HTTPレスポンスでステータス200を受信した場合においても、レスポンス内にエラーが含まれていればError/FaultメッセージをNMRへ返却します。
下記の値から選択。[任意]
  • true
  • false
デフォルト値:false
   ※プロバイダの場合のみ
セッション伝播を有効にする
自分が生成したセッションIDをMEのプロパティに保存するかを指定します。
下記の値から選択。[任意]
  • true
  • false
デフォルト値:false
   ※プロバイダの場合のみ
セッション再利用を有効にする
MEのプロパティに保存されているセッションIDを利用します。
Salesforce BC同士の組み合わせでのみ使用可能です。
下記の値から選択。[任意]
  • true
  • false
デフォルト値:false
   ※プロバイダの場合のみ
SOAPボディ要素操作
SOAPボディ要素への操作を選択します。何もしない(no-wrap), 要素を置き換える(replace), 要素に挿入する(insert)の3種類から選択できます。
replaceまたはinsertの場合、オペレーション名で指定した要素が置換・挿入されます。
下記の値から選択。[任意]
  • no-wrap
  • replace
  • insert
デフォルト値:no-wrap
   ※プロバイダの場合のみ
クッキーを転送する
外部へ/から送受信するとき、クッキーを伝播します。
HTTP BC或いはSOAP BCとの組み合わせで使用可能です。
下記の値から選択。[任意]
  • true
  • false
デフォルト値:true
Chunkedで送信する
Outbound側が外部へメッセージをchunkedで送信します。
下記の値から選択。[任意]
  • true
  • false
デフォルト値:false
   ※プロバイダの場合のみ
リダイレクトに従う
リダイレクトをサポートします。
下記の値から選択。[任意]
  • true
  • false
デフォルト値:false
   ※プロバイダの場合のみ
NoneOrAllHeaderを追加する
Salesforce.comへ送信時に、NoneOrAllをSOAPHeaderに追加します。
下記の値から選択[任意]。
  • true
  • false
デフォルト値:false
   ※プロバイダの場合のみ

2.9.11.4. セキュリティ認証の設定

セキュリティ認証を ON にし、設定 をクリックすると、セキュリティ認証詳細設定ダイアログが表示されます。


図2.9.11.4-1

表2.9.11.4-1
項目
説明

エンドポイント名のURL表記
エンドポイントをURL表記した値。リソース管理に用いられます。
http://webotxesb/<BC名>/エンドポイント名
省略した場合、ESB内部で自動生成されます。
エンドポイントの認証の設定
OFFにした場合はエンドポイントの認証を行いません。
 
エンドポイントのID
認証に利用するIDを設定します。
文字列[必須]
パスワード
認証に利用するパスワードを設定します。パスワードは暗号化とします。
文字列[任意]
ログインモジュールの設定を行う
ログインモジュールの設定を行います。
任意の文字列[任意]
  • ESBSECUREMASTERRealm
  • ESBDefaultCustomRealm
デフォルト値:ESBSECUREMASTERRealm
エンドポイントの認可の設定
OFFにした場合はエンドポイントの認可を行いません。
 
認可に用いる認証情報
認可に利用する認証情報を設定します。
コンシューマの場合
  • consumer
プロバイダの場合
  • client
  • consumer
  • provider
Principalの識別子
Principalの識別子を設定します。
任意の文字列[任意]
クライアント認証
OFFにした場合はクライアント認証を行いません。
   ※コンシューマの場合のみ
organizationID
organizationIDの値です。
任意の文字列[必須]。暗号化とします。

2.9.11.5. トランザクションの設定

[2.7.2. トランザクションの設定] を参照して下さい。

2.9.11.6. メッセージ送信優先度の設定

[2.7.3. メッセージ送信優先度の設定] を参照して下さい。

2.9.11.7. エラーリトライの設定

[2.7.4. エラーリトライの設定] を参照して下さい。

2.9.11.8. オプション一覧の設定

[2.7.5. オプション一覧の設定] を参照して下さい。
Salesforce BCにおいて設定できるオプション一覧は下記の通りです。
表2.9.11.8-1
項目
説明

MaxRequestCount
エンドポイント単位で同時処理できる最大リクエスト数を設定します。
0にした場合は無制限となります。この設定はコンシューマでのみ有効です。
0-214748
ExceedRequestTimeout
同時処理できる最大リクエスト数を超えた場合の最大待ち時間を設定します(秒)。
この設定はコンシューマでのみ有効です。
-1-214748
AUTHORIZE_SKIP
エラーリトライ時に認証処理をスキップするか否かを指定します。
true/false

2.9.11.9. メッセージエクスチェンジハンドラの設定

[2.7.6. メッセージハンドラの設定] を参照して下さい。

2.9.11.10. メッセージ交換方式(MEP)とHTTPステータスコード/コンテントタイプ

Outbound

JBI コンポーネントにおけるMEPの設定は、本来 NMRとのメッセージ交換モデルを設定するためのものですが、 Salesforce CRMとのメッセージ交換においても、連動して同じMEPが適用されなければ意味がありません。 WebOTX ESBのSalesforce BCクライアント機能では、MEP、Salesforce CRMからのレスポンスにおけるHTTPレスポンスコード、コンテントタイプの3つの条件によって、Salesforce CRMからのレスポンス処理方法が変化します。

Salesforce BC OutboundのMEPと動作の対応
表2.9.11.10-1
MEP
タイプ
動作の説明
In-Only
要求
NMR から受け付けたメッセージエクスチェンジに格納されたInメッセージをSOAPリクエストに変換して、エンドポイントで定義されたSalesforce CRMに送信し、Salesforce CRMからのErrorかdoneに相当するレスポンスメッセージを待ち合わせます。
応答(done)
Salesforce CRMからdoneを示すHTTPレスポンス(※)を受信すると、DONEステータスを設定したメッセージエクスチェンジを NMR に返却します。もし、プロバイダ側レスポンス結果を利用するの値が「true」であるとき、 レスポンスがエラーであったら、Errorを示すレスポンスメッセージを返却します。
   ※レスポンスメッセージの情報
   ・HTTPステータス
      200
応答(Error)
SOAPリクエストの送信に失敗したときにErrorとなります。Salesforce CRMからErrorを示すレスポンスメッセージ(※)を受信すると、例外メッセージを格納したメッセージエクスチェンジを NMR に返却します。
   ※doneを示すHTTPレスポンス以外のもの
Robust In-Only
要求
NMR から受け付けたメッセージエクスチェンジに格納されたInメッセージをSOAPリクエストに変換して、エンドポイントで定義されたSalesforce CRMに送信し、Salesforce CRMからのFaultかErrorかdoneに相当するレスポンスメッセージを待ち合わせます。
応答(Fault)
Salesforce CRMからFaultを示すレスポンスメッセージ(※)を受信すると、変換したFaultデータを格納したメッセージエクスチェンジを NMR に返却します。この後、 NMR からDONEステータスが設定されたメッセージエクスチェンジを待ち受けます。
   ※レスポンスメッセージの情報
   ・HTTPステータス
      500
   ・コンテントタイプ
      text/xml
応答(done)
Salesforce CRMからdoneを示すレスポンスメッセージ(※)を受信すると、DONEステータスを設定したメッセージエクスチェンジを NMR に返却します。もし、プロバイダ側レスポンス結果を利用するは「true」である場合、レスポンスにエラーのあったら、強引にerrorを示すレスポンスメッセージを返却します。
   ※レスポンスメッセージの情報
   ・HTTPステータス
      200
応答(Error)
SOAPリクエストの送信に失敗したときにErrorとなります。Salesforce CRMからErrorを示すレスポンスメッセージ(※)を受信すると、例外メッセージを格納したメッセージエクスチェンジを NMR に返却します。
   ※Fault/doneを示すHTTPレスポンス以外のもの
In-Out
要求
NMR から受け付けたメッセージエクスチェンジに格納されたInメッセージをSOAPリクエストに変換して、エンドポイントで定義されたSalesforce CRMに送信し、Salesforce CRMからのoutかFaultかErrorに相当するレスポンスメッセージを待ち合わせます。
応答(out)
Salesforce CRMからoutを示すレスポンスメッセージ(※)を受信すると、変換したoutデータを格納したメッセージエクスチェンジを NMR に返却します。この後、 NMR からDONEステータスが設定されたメッセージエクスチェンジを待ち受けます。 もし、プロバイダ側レスポンス結果を利用するが「true」であるとき、レスポンスにエラーがあったら、Errorを示すレスポンスメッセージを返却します。
   ※レスポンスメッセージの情報
   ・HTTPステータス
      200
   ・コンテントタイプ
      text/xml
応答(Fault)
Salesforce CRMからFaultを示すレスポンスメッセージ(※)を受信すると、変換したFaultデータを格納したメッセージエクスチェンジを NMR に返却します。この後、 NMR からDONEステータスが設定されたメッセージエクスチェンジを待ち受けます。
   ※レスポンスメッセージの情報
   ・HTTPステータス
      500
   ・コンテントタイプ
      text/xml
応答(Error)
SOAPリクエストの送信に失敗したときにErrorとなります。Salesforce CRMからErrorを示すレスポンスメッセージ(※)を受信すると、例外メッセージを格納したメッセージエクスチェンジを NMR に返却します。
   ※out/doneを示すHTTPレスポンス以外のもの
In Optional-Out
--
(Salesforce BCでは対応しません)
Inbound

WebOTX ESBのSOAPサーバ機能では、JBIコンポーネントとしてのメッセージ交換方式(MEP)の設定が、 外部に公開するWebサービスとしてのメッセージ交換方式に連動し、Salesforce CRMへのレスポンス処理方法が変化します。

Salesforce BC InboundのMEPと動作の対応
表2.9.11.10-2
MEP
タイプ
動作の説明
In-Only
要求
エンドポイントで定義されたURLからSOAPリクエストを受信すると、変換したInメッセージを格納したメッセージエクスチェンジを NMR に送信し、 NMR からのERRORかDONEステータスが設定されたメッセージエクスチェンジを待ち受けます。
Salesforce CRMから送信してきたSOAPリクエストのチェックに失敗した場合、NMRへメッセージを転送しなくて、エラーを示すレスポンスメッセージ(※)をSalesforce CRMに返します。
   ※レスポンスメッセージの情報
   ・HTTPステータス
      異常系メッセージ(Fault/Error)のSalesforce BCのエラーコード一覧を参照
   ・notificationsResponse
      Ack=false
応答(done)
NMR からDONEステータスが設定されたメッセージエクスチェンジを受信すると、Salesforce CRMへdoneを示すレスポンスメッセージ(※)を返信します。
   ※レスポンスメッセージの情報
   ・HTTPステータス
      200
   ・notificationsResponse
      Ack=true
応答(error)
NMR からERRORステータスが設定されたメッセージエクスチェンジを受信すると、SOAPクライアントへdoneを示すレスポンスメッセージ(※)を返信します。
   ※レスポンスメッセージの情報
   ・HTTPステータス
      500
   ・notificationsResponse
      Ack=false
Robust In-Only
要求
エンドポイントで定義されたURLからSOAPリクエストを受信すると、変換したInメッセージを格納したメッセージエクスチェンジを NMR に送信し、 NMR からのFault/Error/doneのメッセージエクスチェンジを待ち受けます。
Salesforce CRMから送信してきたSOAPリクエストのチェックに失敗した場合、NMRへメッセージを転送しなくて、エラーを示すレスポンスメッセージ(※)をSalesforce CRMに返します。
   ※レスポンスメッセージの情報
   ・HTTPステータス
      異常系メッセージ(Fault/Error)のSalesforce BCのエラーコード一覧を参照
   ・notificationsResponse
      Ack=false
応答(Fault)
NMR から受け付けたメッセージエクスチェンジに格納されたFaultデータをSOAP Faultレスポンスメッセージ(※)に変換して、SOAPクライアントに送信し、DONEステータスを設定したメッセージエクスチェンジを NMR に返却します。
   ※レスポンスメッセージの情報
   ・HTTPステータス
      500
   ・notificationsResponse
      Ack=false
応答(done)
NMR からdoneのメッセージエクスチェンジを受信すると、done相当のSOAPレスポンスメッセージ(※)をSalesforce CRMに送信します。
   ※レスポンスメッセージの情報
   ・HTTPステータス
      200
   ・notificationsResponse
      Ack=true
応答(error)
NMR からerrorのメッセージエクスチェンジを受信すると、error相当のSOAP レスポンスメッセージ(※)をSalesforce CRMに送信します。
   ※レスポンスメッセージの情報
   ・HTTPステータス
      500
   ・notificationsResponse
      Ack=false
In-Out
要求
エンドポイントで定義されたURLからSOAPリクエストを受信すると、変換したInメッセージを格納したメッセージエクスチェンジを NMR に送信し、 NMR からのout/Fault/Errorのメッセージエクスチェンジを待ち受けます。
Salesforce CRMから送信してきたSOAPリクエストのチェックに失敗した場合、NMRへメッセージを転送しなくて、エラーを示すレスポンスメッセージ(※)をSalesforce CRMに返します。
   ※レスポンスメッセージの情報
   ・HTTPステータス
      異常系メッセージ(Fault/Error)のSalesforce BCのエラーコード一覧を参照
   ・notificationsResponse
      Ack=false
応答(out)
NMR から受け付けたメッセージエクスチェンジに格納されたoutデータをSOAPレスポンスメッセージ(※)に変換して、SOAPクライアントに送信し、DONEステータスを設定したメッセージエクスチェンジを NMR に返却します。 このAckメッセージを返信するのは失敗である場合、 NMR にErrorメッセージを返却します。
   ※SOAPレスポンスメッセージの情報
   ・HTTPステータス
      200
   ・コンテントタイプ
      text/xml
   ・notificationsResponse
      Ack=true
応答(Fault)
NMR から受け付けたメッセージエクスチェンジに格納されたFaultデータをSOAP Faultレスポンスメッセージ(※)に変換して、Salesforce CRMに送信し、DONEステータスを設定したメッセージエクスチェンジを NMR に返却します。 このAckメッセージを返信するのは失敗である場合、 NMR にErrorメッセージを返却します。
   ※SOAPレスポンスメッセージの情報
   ・HTTPステータス
      500
   ・コンテントタイプ
      text/xml
   ・notificationsResponse
      Ack=false
応答(Error)
NMR からerrorのメッセージエクスチェンジを受信すると、error相当のSOAP レスポンスメッセージ(※)をSalesforce CRMに送信します。
   ※SOAPレスポンスメッセージの情報
   ・HTTPステータス
      500
   ・コンテントタイプ
      text/xml
   ・notificationsResponse
      Ack=false
In Optional-Out
--
(Salesforce BCでは対応しません)
その他のHTTPステータスコード(4xxなど)については、Salesforce BCがメッセージ交換方式(MEP)と対応させて使用することはありません。

2.9.11.11. ノーマライズ規則

Outbound

NMR から受け取ったメッセージエクスチェンジをSalesforce CRMに送信するリクエストSOAPメッセージに変換することをデノーマライズと言います。また、Salesforce CRMから受信したレスポンスSOAPメッセージを NMR に送信するメッセージエクスチェンジに変換することをノーマライズと言います。

デノーマライズ規則


図2.9.11.11-1

デノーマライズの規則は上図のようになっています。ノーマライズメッセージにSOAPヘッダを示すキーがあった場合、その値をSOAPヘッダに挿入します。また、メッセージコンテントはSOAPボディに、添付ファイルはSOAP Attachments パートにそのまま挿入されます。
メッセージエクスチェンジのエラーがあった場合、Salesforce CRMへのリクエストは送出されません。その場合、Salesforce BCによってFaultメッセージが生成され、その内容を含むメッセージエクスチェンジが NMR に返されます。

ノーマライズ規則


図2.9.11.11-2

ノーマライズ規則は上図のようになっています。SOAPヘッダの内容は、ノーマライズメッセージのプロパティに既定のキーの値として挿入されます。SOAPボディの内容はメッセージコンテントに、SOAP Attachments パートの内容はそのまま添付ファイルとなります。また、HTTPヘッダに入っているHTTPステータスは、JBIのステータスに変換され、メッセージエクスチェンジのステータスにセットされます。
Salesforce CRMからSOAP Faultが返ってきた場合、Detailの内容がFaultメッセージのメッセージコンテントにセットされます。

Inbound
ノーマライズ規則


図2.9.11.11-3

ノーマライズ規則は上図のようになっています。SOAPヘッダの内容は、ノーマライズメッセージのプロパティに既定のキーの値として挿入されます。SOAPボディの内容はメッセージコンテントに、SOAP Attachments パートの内容はそのまま添付ファイルとなります。

デノーマライズ規則


図2.9.11.11-4

デノーマライズの規則は上図のようになっています。メッセージエクスチェンジのステータス(DONE)とノーマライズメッセージで場合、「Ack」がtrueを含むSOAPメッセージを生成します。 Faultメッセージとエラーで場合、「Ack」がfalseを含まっているSOAPメッセージを生成します。

2.9.11.12. 異常系メッセージ

WebOTX ESBにおいて「Salesforce BCに誤ったメッセージが入力された」、「サービス呼び出しに失敗した」等の異常が発生した場合、Salesforce BCのInboundからクライアントアプリケーションに400/500系のHTTPメッセージが返却されます。 クライアントアプリケーションでは返却されたHTTPメッセージから発生した異常の内容を知ることができます。 以下では、発生する異常の種類ごとにSalesforce BCのInboundからクライアントアプリケーションに返却するメッセージを説明します。

異常の種類により Fault または Error に分類されます。 以下はSalesforce BCにおいて異常が発生するパターンの一覧です。 [ リファレンス集 開発編(Enterprise Service Bus) > 2. 異常系メッセージ(Fault/Error) > 2.1. バインディングコンポーネント > 2.1.12. Salesforce BC ]

Salesforce BCがインストールされていない場合
Salesforce BCが起動されていない場合

メッセージ内容は500系のHTML形式の文書です。

以下はSalesforce BCが起動していない場合の例です。

503 SalesforceBinding not started.

<html><head><title>WebOTX 8.XX.XX.XX - Error report</title><style><!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}HR {color : #525D76;}--></style> </head><body><h1>HTTPステータス 503 - SalesforceBinding not started.</h1><HR size="1" noshade="noshade"><p><b>type</b> ステータスレポート</p><p><b>メッセージ</b> <u>SalesforceBinding not started.</u></p><p><b>説明</b> <u>The requested service (SalesforceBinding not started.) is not currently available.</u></p><HR size="1" noshade="noshade"><h3>WebOTX 8.XX.XX.XX</h3></body></html>

プロバイダエンドポイントがFaultを返却した場合
プロバイダエンドポイントがErrorを返却した場合
「同時処理最大リクエスト数」を超えてタイムアウトした場合
外部クライアントから送信されたリクエストのチェックに失敗した場合

クライアントアプリケーションへ以下の電文が返信されます。 HTTPレスポンスコードは状況により違います、例えばプロバイダエンドポイントがError/Faultを返却した場合は500、「同時処理最大リクエスト数」を超えてタイムアウトした場合は503です。

500 Internal Server Error

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:out="http://soap.sforce.com/2005/09/outbound"><soapenv:Header/><soapenv:Body><out:notificationsResponse><out:Ack>false</out:Ack></out:notificationsResponse></soapenv:Body></soapenv:Envelope>

2.9.11.13. Inboundサーブレット

エンドポイントロールをコンシューマに設定した場合、Salesforce CRMからのリクエストを受け付けてSalesforce BCへの橋渡しを行うためのサーブレット(以下 Inboundサーブレット)をWebコンテナに配備する必要があります。
「Inbound Servletを自動で配備する」がONの場合は自動的に配備が行われますが、OFFにした場合は手動でInboundサーブレットを配備する必要があります。アドバンスドモードの場合、InboundサーブレットをESBが動作するプロセスグループに配備してください。
配備方法については、 [ Application Server > ドメイン構築・基本設定ガイド > 5. アプリケーション > 5.4. 配備、再配備と置換 > 5.4.3. Java EEのアプリケーションの配備/再配備 ] を参照してください。

WARファイルの配備

はじめに、WebOTX ESBにインストールされているInboundサーブレット(<WebOTX_DIR>\jbi\components\salesforce配下にあるsalesforce_inbound_servlet.war)をSUエディタの”外部に公開するエンドポイントURL”で指定したコンテキストルートを指定し、通常のサーブレットと同様にWebコンテナに配備します。

(例)
  外部に公開するエンドポイントURL: http://hostname:8080/sample/service1
  context-root要素の値: sample
  管理者名: admin
  配備コマンド:   otxadmin> deploy --user admin --contextroot sample C:\\WebOTX\\jbi\\components\\salesforce\\salesforce_inbound_servlet.war

Memo
otxadminのloginコマンドでログイン済ならば--userオプションを指定する必要はありません。

Salesforce BCのinbound(エンドポイントロールをコンシューマとした場合)は、このサーブレットとサービスアセンブリが両方とも配備され、起動していなければ動作しません。
コンテキストルートを指定しない場合、salesforce_inbound_servlet.warのコンテキストルートがsalesforcebcとなります。

2.9.11.14. WSDLファイルのインポートによる属性自動設定

[2.9.1.17. WSDLファイルのインポートによる属性自動設定] を参照して下さい。

2.9.11.15. スキーマの作成

Salesforceの標準オブジェクトやカスタマイズオブジェクトとのマッピングを行う場合は、スキーマの作成を利用し、 標準オブジェクトとカスタマイズオブジェクトのスキーマファイルを生成できます。
生成したsalesforce_parameters.xsdを利用してマッピングを設定できます。

以下の手順で、スキーマを作成します。
サービスユニット の右クリックメニューのスキーマの作成... を選択します。


図2.9.11.15-1

オブジェクト定義スキーマの作成ダイアログが開くので、入力を行いOKボタンを押します。


図2.9.11.15-2

表2.9.11.15-1
要素名 説明
Partner WSDLのURLを指定して作成 ネットワークに公開されているPartner WSDLのURLを指定して読み込みます。
ワークスペース内のPartner WSDLから作成 ワークスペース内のPartner WSDL を指定して読み込みます。
ユーザ名 Salesforceログイン情報のユーザ名と同じです。
パスワード Salesforceログイン情報のパスワードにセキュリティトークンを追加したものです。

Memo
Partner WSDLを取得する
    Salesforce.comへログインして、[あなたの氏名]▼ > [設定] > [開発] > [API] 画面の [パートナーWSDLの作成] リンクでPartner WSDLを入手します。

Memo
セキュリティトークンを取得する
    Salesforce.comへログインして、[個人設定] > [私の個人情報] > [私のセキュリティトークンのリセット] でセキュリティトークンを入手します。

Partner WSDLのURLを指定して作成もしくはワークスペース内のPartner WSDLを指定 を選択した場合、進行情報ダイアログが表示されます。


図2.9.11.15-3

作成が完了すると、オブジェクト定義スキーマの作成ダイアログが表示されます。


図2.9.11.15-4

オブジェクト定義スキーマの作成ダイアログで、OKボタンを押します。
出力ファイル:
/{SU名}/META-INF/schema/mapping/
      |-salesforce_parameters.xsd
      |-salesforce_objects.xsd
      |-salesforce_faults.xsd


図2.9.11.15-5

表2.9.11.15-2
ファイル名 説明
salesforce_parameters.xsd オペレーションのパラメータを定義するスキーマ。
salesforce_objects.xsd Salesforceの標準オブジェクトとカスタマイズオブジェクトを定義するスキーマ。
salesforce_faults.xsd フォルトを定義するスキーマ。

生成したsalesforce_parameters.xsdを利用してマッピングが設定できます。
マッピング設定は次の手順で行います。
(1)salesforce_parameters.xsdの修正。
(2)マッピングプロジェクトの作成。

(1)salesforce_parameters.xsdの修正。
マッピングを行う、オペレーションのパラメータにsObjectが定義してある場合、 具体的なオブジェクトに修正する必要があります。
以下に、sObjectにAccountを利用する場合を例に、修正手順を説明します。

(1-1)オペレーションに直接sObjectを利用している場合

直接利用しているsObjectをAccountに修正します。

修正前
<element name="update">
 <complexType>
  <sequence>
   <element name="sObjects" type="ens:sObject" minOccurs="0" maxOccurs="unbounded"/>
  </sequence>
 </complexType>
</element>

修正後
<element name="update">
 <complexType>
  <sequence>
   <element name="sObjects" type="ens:Account" minOccurs="0" maxOccurs="unbounded"/>
  </sequence>
 </complexType>
</element>

(1-2)オペレーションに直接sObjectを利用せず、オペレーションに利用されているオブジェクト(この例ではMergeRequest)でsObjectが利用されており、 かつ、他のオペレーションでMergeRequestを利用していない場合

MergeRequestのsObjectをAccountに修正します。

修正前
<element name="merge">
 <complexType>
  <sequence>
   <element name="request" type="tns:MergeRequest" minOccurs="0" maxOccurs="unbounded"/>
  </sequence>
 </complexType>
</element>
<complexType name="MergeRequest">
 <sequence>
  <element name="masterRecord" type="ens:sObject"/>
  <element name="recordToMergeIds" type="tns:ID" minOccurs="1" maxOccurs="unbounded"/>
 </sequence>
</complexType>


修正後
<element name="merge">
 <complexType>
  <sequence>
   <element name="request" type="tns:MergeRequest" minOccurs="0" maxOccurs="unbounded"/>
  </sequence>
 </complexType>
</element>
<complexType name="MergeRequest">
 <sequence>
  <element name="masterRecord" type="ens:Account"/>
  <element name="recordToMergeIds" type="tns:ID" minOccurs="1" maxOccurs="unbounded"/>
 </sequence>
</complexType>


(1-3)オペレーションに直接sObjectを利用せず、オペレーションに利用されているオブジェクト(この例ではQueryResult)でsObjectが利用されており、かつ、他のオペレーションでもQueryResultを利用している場合

QueryResultをコピーし、別名をつけてから、sObjectをAccountに修正します。

修正前
<element name="queryResponse">  // queryResponseをQueryResultを利用している
 <complexType>
  <sequence>
   <element name="result" type="tns:QueryResult"/>
  </sequence>
 </complexType>
</element>
<element name="queryAllResponse"> // queryAllResponseもQueryResultを利用している
 <complexType>
  <sequence>
   <element name="result" type="tns:QueryResult"/>
  </sequence>
 </complexType>
</element>
<complexType name="QueryResult">
 <sequence>
  <element name="done" type="xsd:boolean"/>
  <element name="queryLocator" type="tns:QueryLocator" nillable="true"/>
  <element name="records" type="ens:sObject" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
  <element name="size" type="xsd:int"/>
 </sequence>
</complexType>


修正後
<element name="queryResponse">
 <complexType>
  <sequence>
   <element name="result" type="tns:QueryResult_1"/>
  </sequence>
 </complexType>
</element>
<complexType name="QueryResult_1">
 <sequence>
  <element name="done" type="xsd:boolean"/>
  <element name="queryLocator" type="tns:QueryLocator" nillable="true"/>
  <element name="records" type="ens:Account" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
  <element name="size" type="xsd:int"/>
 </sequence>
</complexType>
<element name="queryAllResponse">
 <complexType>
  <sequence>
   <element name="result" type="tns:QueryResult"/>
  </sequence>
 </complexType>
</element>
<complexType name="QueryResult">
 <sequence>
  <element name="done" type="xsd:boolean"/>
  <element name="queryLocator" type="tns:QueryLocator" nillable="true"/>
  <element name="records" type="ens:sObject" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
  <element name="size" type="xsd:int"/>
 </sequence>
</complexType>

(2)マッピングプロジェクトの作成。
マッピングプロジェクトを作成し、ターゲットスキーマ、またはソーススキーマに修正したsalesforce_parameters.xsdを設定します。マッピング対象となるサービスユニットのスキーマも設定することで、マッピングエディタを利用して、マッピングを定義できます。
詳細は [ アプリケーション開発ガイド(共通) > 1.XMLデータ変換の開発 ] を参照して下さい。