Salesforce コネクタ

サポートカテゴリ: 選択

Anypoint Salesforce コネクタを使用して Salesforce プラットフォーム API に接続できます。このコネクタは、 Salesforce Apex クラスを処理する場合など、Salesforce にアクセスするためのメソッドを公開します。

各自が設定する操作に応じて、このコネクタは Salesforce SOAP API、REST API、Bulk API、ストリーミング API と連動します。API コールごとに HTTPS 接続経由の XML 要求と応答を使用します。必要なすべてのリクエストヘッダー、エラー処理、および HTTPS 接続設定は、コネクタに組み込まれています。

Salesforce コネクタは、各自のアプリケーションでアウトバウンドコネクタ、インバウンドコネクタ、ストリーミングインバウンドコネクタの 3 通りの方法で使用できます。各方法については、このドキュメントの後半で説明します。

前提条件

このドキュメントは、読者が Salesforce、HTTP、SOAP、REST、Bulk、ストリーミング の各 API、Mule、Anypoint コネクタ、Anypoint Studio、Mule の概念、Mule フローの要素、グローバル要素に精通していることを前提としています。

このコネクタを使用するには、次の要件があります。

  • Salesforce 開発者アカウント

  • セキュリティトークン - Salesforce の [設定] ページの [私の個人情報] で [セキュリティトークンのリセット] を実行すると、メールで新しいセキュリティトークンを受け取ることができます。

  • コンシューマキーおよびシークレット - OAuth API を使用する場合は必須。

  • 名前空間とスキーマの場所: Mule アプリケーションの XML を手動で作成する予定の場合は、正しい名前空間とスキーマの場所を XML ファイルに含める必要があります。Salesforce コネクタを Mule アプリケーションのフローに追加すると、Anypoint Studio によってこの情報が自動的に XML ファイルに追加されます。

注意:

アプリケーションを開発する

アプリケーションを構築する手順は、次のとおりです。

  1. コネクタを設定します。

  2. 接続をテストします。

  3. フローの残りを構築します。

  4. DataWeave を追加して設定します。

アプリケーションの開発時に Salesforce コネクタから、Salesforce API との連動に使用できる次のインテグレーションパターンが提供されます。

  • バッチデータの同期 - 外部システムが Salesforce のデータにバッチでアクセス、変更、削除、追加を行い、同様に Salesforce も外部システムのデータをバッチ処理する。

  • リモートコールイン - 外部システムが Salesforce のデータにアクセス、変更、削除、追加を行い、同様に Salesforce も外部システムのデータを処理する。

  • ファイアアンドフォーゲットのリモートプロセスの呼び出し — Salesforce がサードパーティシステムでプロセスを開始し、プロセスが開始されたという肯定応答を受け取る。サードパーティシステムは、Salesforce とは関係なく処理を続行する。

  • 要求と返信のリモートプロセスの呼び出し - Salesforce がリモートシステムでプロセスを開始し、リモートシステムが処理を終了するまで待機した後、再びリモートシステムから戻された制御を受け取る。

  • データの変更に基づくユーザインターフェースの更新 - サードパーティシステムの変更に応じて Salesforce UI が更新される。

Salesforce コネクタは次の API と連動します。

Apex SOAP API:

Salesforce Apex SOAP API は、Apex クラスメソッドをカスタムの SOAP Web サービスコールとして公開します。これにより、外部アプリケーションが Apex Web サービスを呼び出して Salesforce でアクションを実行できます。

SOAP API:

Salesforce SOAP API は、Salesforce 上の組織の情報に安全にアクセスできるようにします。Salesforce コネクタが実行する操作の大半はこの API にマップします。

SOAP API を使用して実行される Salesforce 操作はすべて「Header」という省略可能なパラメータがあり、 Salesforce SOAP のヘッダー。(AllOrNoneHeader、AllowFieldTruncationHeader、AssignmentRuleHeader、CallOptions、EmailHeader、LocaleOptions、MruHeader、OwnerChangeOptions、QueryOptions、UserTerritoryDeleteHeader、DuplicateRuleHeader) のいずれかを取ることができます。

Apex REST API:

Salesforce Apex REST API は、Apex を使用して独自の REST ベースの Web サービスを作成します。この API は、REST アーキテクチャの利点をすべて備え、カスタムロジックを定義する機能を提供し、引数/オブジェクトの自動マッピングが含まれます。

Bulk API:

Salesforce Bulk API は、組織のデータのバッチを Salesforce にすばやく安全に読み込みます。「データのバッチ読み込み」も参照してください。

ストリーミング API:

Salesforce ストリーミング API は、Salesforce にある組織の情報に対する変更に関する通知を安全に受信します。ストリーミング API の使用についての詳細は、Salesforce からのインバウンドデータの受信を参照してください。

メタデータ API:

Salesforce メタデータ API は、カスタマイズを管理し、データ自体ではなくメタデータモデルを処理するツールを構築します。

Design Center で設定する

  1. [Anypoint Platform] > [Design Center] で、[Create (作成)] > [Mule Application (Mule アプリケーション)] をクリックします。

  2. トリガをクリックして、フローへのアクセスを開始します。Salesforce からアプリケーションにコンテンツを送信させるには、Salesforce をトリガとして選択し、次のいずれかのトリガを選びます。

    Design Center のトリガ
    • New Object (新規オブジェクト) - 新しいオブジェクトを作成する。作成できるオブジェクト種別は、取引先責任者、リード、取引先、契約、商談、カスタムオブジェクトです。オブジェクト種別は、各自が作成、変更、削除する Salesforce オブジェクトに対応します。

    • Modified Object (変更するオブジェクト) - オブジェクトを変更する。

    • Deleted Object (削除するオブジェクト) - オブジェクトを削除する。

    • Replay Channel (チャネルの再生) - ストリーミングチャネルをサブスクライブする。このトリガでは、24 時間の保持期間内の新規イベントおよび Salesforce で保存されたイベントについてチャネル関連の通知設定が提供されます。指定されたチャネルでイベントが発生するとフローがトリガされます。

      注意: チャネルのサブスクリプションを作成する前に、チャネルまたはトピックを Salesforce にパブリッシュする必要があります。

    • Replay Topic (トピックの再生) - トピックをサブスクライブする。このトリガでは、24 時間の保持期間内の新規イベントおよび Salesforce で保存されたイベントについてトピック関連の通知設定が提供されます。レコードの指定されたトピックでイベントが発生するとフローがトリガされます。

    • Subscribe Channel (チャネルのサブスクライブ) - ストリーミングチャネルをサブスクライブする。このトリガでは、サブスクライブ後に発生した新規イベントについてチャネル関連の通知設定が提供されます。

    • Subscribe Topic (トピックのサブスクライブ) - トピックをサブスクライブする。このトリガでは、サブスクライブ後に発生した新規イベントについてトピック関連の通知設定が提供されます。

      または、HTTP リスナやスケジューラトリガも使用できます。

Salesforce の新規オブジェクトトリガを設定する

Salesforce の新規オブジェクトトリガを設定する手順は、次のとおりです。

  1. Design Center で新しい Mule アプリケーションを作成します。

  2. トリガを設定します。たとえば、[Salesforce] > [New Object (新規オブジェクト)] を使用できます。

  3. [Set up (設定)] をクリックします。

    新規オブジェクトの設定画面
  4. [Connection Type (接続種別)] を指定します。

    認証オプション
    接続種別 Salesforce の情報サイト

    ユーザ名パスワード

    SOAP API Username Password Login (SOAP API のユーザ名パスワードログイン)

    OAuth v2

    OAuth 2.0 Web サーバ認証フロー

    OAuth JWT

    OAuth 2.0 JWT べアラートークンフロー

    OAuth SAML

    OAuth 2.0 SAML ベアラーアサーションフロー

    OAuth ユーザ名パスワード

    OAuth 2.0 ユーザ名パスワードフロー

  5. 各種の設定に必要なパラメータを指定し、[Test (テスト)] をクリックして、Salesforce への有効な接続があることを確認します。

  6. 必要に応じて、どのメタデータを取得するかを決定し、Apex クラス名を追加する Apex タブを設定します。

    Apex の設定画面
  7. 接続種別を指定していない場合、または必要に応じて、[Advanced (詳細)] タブで接続を維持する有効期限の [Max Idle Time (最大アイドル時間)] と [Time Units (時間単位)] を設定します。

    接続種別が指定されていない場合の [Advanced (詳細)] タブ

    接続種別を指定したら、必要に応じて、[Advanced (詳細)] タブを使用して、[Reconnection Strategy (再接続戦略)]、[Pooling Profile (プーリングプロファイル)]、[Expiration Policy (有効期限ポリシー)] の値を変更できます。

    接続種別の [Advanced (詳細)] タブ
  8. 必要に応じて、メインの設定画面で [Redelivery Policy (再配信ポリシー)] を設定します。 再配信は、トリガコンテンツを配信する最大試行回数を示します。

    Redelivery Policy (再配信ポリシー)

Salesforce をコンポーネントとして設定

トリガを作成したら、プラス記号をクリックします。必要に応じて、[Transform (変換)] をクリックし、DataWeave を使用して、受信したデータの項目と Salesforce コンポーネントと連動させるものの項目をマップします。

以下は、Salesforce コンポーネントの操作の例です。

Create:

sfdc-create

Query:

  • Salesforce Query (Salesforce クエリ): オブジェクトを取得する Salesforce クエリ

  • Parameters (パラメータ): Salesforce クエリのプレースホルダの値

sfdc-query

Query:

  • Type (種別): Salesforce オブジェクトの種別

  • Records (レコード): 更新する Salesforce オブジェクトのコレクションを生成する関数エディタの式

sfdc-update

Delete:

  • Records To Delete Ids (削除するレコードの ID): 削除する Salesforce オブジェクトのコレクションを生成する関数エディタの式

sfdc-delete

ユーザ名パスワード認証の設定

  • Username (ユーザ名): Salesforce ユーザ名を入力します。

  • Password (パスワード): 対応するパスワードを入力します。

  • Security Token (セキュリティトークン): 対応するセキュリティトークンを入力します。

OAuth 2.0 に基づく認証メカニズムを実装するには追加の手順が必要ですが、サービスを外部ユーザにも公開する場合にはセキュリティが強化されるため、推奨の実装となることがあります。
ユーザ名パスワードの設定

OAuth v2.0 認証の設定

  • Display (表示): 表示を最適化する方法: PAGE = 全画面の認証ページ (デフォルト)、POPUP = 最新の Web ブラウザのポップアップウィンドウ用に最適化されたコンパクトなダイアログ、TOUCH = Android や iPhone など、現在のスマートフォン向けに設計され、モバイル用に最適化されたダイアログ

  • Consumer Key (コンシューマキー): Salesforce 接続アプリケーションのコンシューマキー。コンシューマキーの作成を参照してください。

  • Consumer Secret (コンシューマシークレット): Salesforce にアクセスするコネクタのコンシューマシークレット

  • Listener Config (リスナ設定): リスナの設定 (HTTP_Listener_config など)

  • Callback Path (コールバックパス): コールバックのパス (/callback など)

  • Authorize Path (認証パス): 認証のパス (/authorize など)

  • External Callback URL (外部コールバック URL): コールバック URL (http://localhost:8085/callback など)

OAuth v2.0 の設定

OAuth JWT 認証の設定

  • Consumer Key (コンシューマキー): Salesforce 接続アプリケーションのコンシューマキー。コンシューマキーの作成を参照してください。

  • Key Store (キーストア): 認証時にデータの署名に使用するキーストアへのパス。Java キーストア形式のみが許可されます。キーストアファイルの生成を参照してください。

  • Store Password (ストアのパスワード): キーストアのパスワード

  • Principal (プリンシパル): 使用する Salesforce ユーザ名

OAuth JWT の設定

OAuth SAML 認証の設定

  • Consumer Key (コンシューマキー): Salesforce 接続アプリケーションのコンシューマキー。コンシューマキーの作成を参照してください。

  • Key Store (キーストア): 認証時にデータの署名に使用するキーストアへのパス。Java キーストア形式のみが許可されます。キーストアファイルの生成を参照してください。

  • Store Password (ストアのパスワード): キーストアのパスワード

  • Principal (プリンシパル): 任意の Salesforce ユーザのユーザ名

OAuth SAML の設定

OAuth ユーザ名パスワード認証の設定

  • Consumer Key (コンシューマキー): Salesforce 接続アプリケーションのコンシューマキー。コンシューマキーの作成を参照してください。

  • Consumer Secret (コンシューマシークレット): Salesforce にアクセスするコネクタのコンシューマシークレット

  • Username (ユーザ名): Salesforce ユーザ名を入力します。

  • Password (パスワード): 対応するパスワードを入力します。

  • Security Token (セキュリティトークン): 対応するセキュリティトークンを入力します。

    OAuth のユーザパスワード

Studio にインストールする

  1. Anypoint Studio で、Studio タスクバーの Exchange アイコンをクリックします。

  2. Anypoint Exchange で [Login (ログイン)] をクリックします。

  3. このコネクタを検索して [Install (インストール)] をクリックします。

  4. 画面の指示に従ってこのコネクタをインストールします。

Studio の更新がある場合、右下隅にメッセージが表示されます。メッセージをクリックすると、更新をインストールできます。

Salesforce コネクタは手動でもインストールできます。この場合は、Mule プロジェクトの pom.xml ファイルを更新します。

<dependency>
    <groupId>com.mulesoft.connectors</groupId>
    <artifactId>mule-salesforce-connector</artifactId>
    <version>9.5.0</version>
    <classifier>mule-plugin</classifier>
</dependency>

Studio での設定

設定方法:

  1. コネクタをドラッグして Studio キャンバスにドロップします。

  2. コネクタのグローバル要素を作成するには、次の項目を設定します。

    ユーザ名パスワード認証:

    • Username (ユーザ名): Salesforce ユーザ名を入力します。

    • Password (パスワード) - 対応するパスワードを入力します。

    • Security Token (セキュリティトークン): 対応するセキュリティトークンを入力します。

      Studio のユーザ名パスワード認証

      OAuth v2.0:

    • Display (表示): 表示を最適化する方法: PAGE = 全画面の認証ページ (デフォルト)、POPUP = 最新の Web ブラウザのポップアップウィンドウ用に最適化されたコンパクトなダイアログ、TOUCH = Android や iPhone など、現在のスマートフォン向けに設計され、モバイル用に最適化されたダイアログ

    • Consumer Key (コンシューマキー): Salesforce 接続アプリケーションのコンシューマキー。コンシューマキーの作成を参照してください。

    • Consumer Secret (コンシューマシークレット): Salesforce にアクセスするコネクタのコンシューマシークレット

    • Listener Config (リスナ設定): リスナの設定 (HTTP_Listener_config など)

    • Callback Path (コールバックパス): コールバックのパス (/callback など)

    • Authorize Path (認証パス): 認証のパス (/authorize など)

    • External Callback URL (外部コールバック URL): コールバック URL (http://localhost:8085/callback など)

      Studio OAuth 2

      OAuth 2 JWT:

    • Consumer Key (コンシューマキー): Salesforce 接続アプリケーションのコンシューマキー。コンシューマキーの作成を参照してください。

    • Key Store (キーストア): キーストアファイルの生成を参照してください。

    • Store Password (ストアのパスワード): キーストアのパスワード

    • Principal (プリンシパル): キーストアのパスワード

      Studio OAuth 2 JWT

      OAuth 2 SAML:

    • Consumer Key (コンシューマキー): Salesforce 接続アプリケーションのコンシューマキー。コンシューマキーの作成を参照してください。

    • Key Store (キーストア): キーストアファイルの生成を参照してください。

    • Store Password (ストアのパスワード): キーストアのパスワード

    • Principal (プリンシパル): キーストアのパスワード

      Studio OAuth 2 SAML

      OAuth のユーザ名とパスワード

    • Consumer Key (コンシューマキー): Salesforce 接続アプリケーションのコンシューマキー。コンシューマキーの作成を参照してください。

    • Consumer Secret (コンシューマシークレット): Salesforce にアクセスするコネクタのコンシューマシークレット

    • Username (ユーザ名): Salesforce ユーザ名を入力します。

    • Password (パスワード) - 対応するパスワードを入力します。

    • Security Token (セキュリティトークン): 対応するセキュリティトークンを入力します。

      Studio OAuth 2 のユーザ名とパスワード
  3. キャンバスにドラッグした操作に基づいて、以下の項目を設定します。

    Create:

    • Type (種別): Salesforce オブジェクトの種別

    • Records (レコード): 関数エディタの式

      sfdc-create

      Query:

    • Salesforce Query (Salesforce クエリ): オブジェクトを取得する Salesforce クエリ

    • Parameters (パラメータ): Salesforce クエリのプレースホルダの値

      sfdc-query

      Query:

    • Type (種別): Salesforce オブジェクトの種別

    • Records (レコード): 更新する Salesforce オブジェクトのコレクションを生成する関数エディタの式

      sfdc-update

      Delete:

    • Records To Delete Ids (削除するレコードの ID): 削除する Salesforce オブジェクトのコレクションを生成する関数エディタの式

      sfdc-delete

セッションの維持

Mule 4 Salesforce コネクタの場合、OAuth v2 を除く*すべての設定で、 *[Disable session invalidation (セッションの無効を無効化)] 項目を設定すれば、有効期限までセッションを維持できます。

Mule アプリケーションは、ライフサイクル接続を制御します。アプリケーションは、特定の接続が不要になったと判断すると、Disable Session Invalidation (セッション無効を無効化) の設定をオンにします。設定が [False] (デフォルト) の場合は、コネクタがセッションの接続を自動的に破棄します。この場合にセッションが終了しないようにするには、[Disable session invalidation (セッションの無効を無効化)] を [True] に設定するか、関数式を指定します。

Salesforce はすべてのスレッドに同じセッションを使用するため、たとえば、セッションが有効の場合にログインし直すと、Salesforce は新しいセッションを作成せずに、既存のセッションを使用します。

[Disable session invalidation (セッションの無効を無効化)] 項目が [False] に設定されている場合は、セッションが不要になった時点でコネクタが自動的に破棄します。

一般にスレッドや同時実行の作業をしているときは、セッションを維持します。Salesforce はすべてのスレッドに同じセッションを使用します (たとえば、有効なセッションがある場合にログインし直すと、Salesforce は新しいセッションを作成せずに、既存のセッションを使用します)。スレッドが終了したときに接続が終了されないようにするには、コネクタのグローバル要素プロパティにある [Connection (接続)] セクションの [Disable session invalidation (セッションの無効を無効化)] 項目を [True] に設定します。

セッションの無効化項目

Apex とプロキシの設定

Invoke Apex REST (Apex REST の呼び出し) と Invoke Apex Soap (Apex Soap の呼び出し) のメソッドは、Apex クラス名の設定と連動します。Salesforce に接続すると、Salesforce コネクタは、Apex クラスとそのクラスに属する、呼び出し可能なメソッドの名前を取得します。

すべての Salesforce 接続設定で、次の Apex 設定がサポートされます。

  • Fetch All Apex SOAP Metadata (すべての Apex SOAP メタデータを取得) - すべての Apex SOAP クラスのメタデータを取得します。[Apex Class Name (Apex クラス名)] 設定よりも優先されます。

  • Fetch All Apex REST Metadata (すべての Apex REST メタデータを取得) - すべての Apex REST クラスのメタデータを取得します。[Apex Class Name (Apex クラス名)] 設定よりも優先されます。

  • Apex Class Name (Apex クラス名) - クラスで公開されているメソッドと一緒に取得するクラスのセットを制限するために使用する、Apex クラス名のリスト。この設定により、取得する必要がないクラスの数が多い場合に取得プロセスを高速化できます。

Apex とプロキシの設定は Design Center と Anypoint Studio 7 で実行できます。

Apex とプロキシの設定:

Apex 設定の値:

  • Fetch All Apex SOAP Metadata (すべての Apex SOAP メタデータを取得) - すべての Apex SOAP クラスのメタデータを取得します。

  • Fetch All Apex REST Metadata (すべての Apex REST メタデータを取得) - すべての Apex REST クラスのメタデータを取得します。

Apex Class Name (Apex クラス名):

  • None (なし) - 取得する DataSense に対する Apex クラス名が何も記述されません。

  • From Message (メッセージから) - MEL 式からクラス名を指定することができます。

  • Create Object manually (手動でオブジェクトを作成) - ユーザがリストを作成し、クラス名を追加します。それらのクラスとメソッドだけが DataSense によって取得されます。

    [Fetch All Apex SOAP Metadata (すべての Apex SOAP メタデータを取得)] チェックボックスと [Fetch All Apex REST Metadata (すべての Apex REST メタデータを取得)] チェックボックスは [Apex Class Names (Apex クラス名)] の設定より優先されます。つまり、これらのボックスがオンになっている場合は、[Apex Class Names (Apex クラス名)] セクションの選択に関係なく、すべての Apex SOAP メタデータまたは Apex REST メタデータが取得されます。

プロキシ設定の値:

  • Host (ホスト) - プロキシサーバのホスト名。

  • Port (ポート) - プロキシサーバが実行されるポート番号。

  • Username (ユーザ名) - サーバにログインするためのユーザ名。

  • Password (パスワード) - 対応するパスワード。

設定したら [OK] をクリックします。

[Mule Palette (Mule パレット)] で、Salesforce コネクタの操作を選択します。

コンシューマキーの作成

Salesforce コネクタに OAuth 2.0 を設定する場合はコンシューマキーが必要です。コンシューマキーは、OAuth 2.0 JWT と SAML ベアラー設定、OAuth 2.0 ユーザ名パスワード設定で使用されます。

Salesforce を使用してコンシューマキーを作成する場合は、以下の手順を参照してください。 Salesforce で接続アプリケーションを作成する方法を説明しますが、各自の Salesforce インスタンスによって手順が若干異なることがあります。

前提条件:

この手順は、認証ファイル (salesforce-cert.crt など) がすでにあることを前提としています。このファイルがない場合は、Java KeyStore と公開キーを生成して作成できます。

  1. Salesforce にログインして、[設定] > [ビルド] > [作成] > [アプリケーション] に移動します。

  2. [接続アプリケーション] セクションで、[新規] をクリックします。

  3. 以下の手順に従って新しい接続アプリケーションを作成し、適切な項目に次の情報を入力します。

    • 接続アプリケーションの名前

    • API 参照名

    • 連絡先メール

  4. API ([OAuth 設定の有効化]) で、[OAuth 設定の有効化] を選択します。

    • [コールバック URL] に入力。

    • [デジタル署名を使用] チェックボックスをオン。

    • [参照] (または [ファイルの選択]) をクリックし、公開キーを含む Salesforce 認証 (salesforce-cert.crt など) を読み込む。

      Studio で、認証を通常は Mule アプリケーションがあるワークスペースに保存します。

  5. [選択した OAuth 範囲] に次の Oauth 範囲を追加して保存します。

  6. アプリケーションの認証を設定します。

    [管理] をクリックします。次に、[OAuth ポリシー] セクションで、[許可されているユーザ] ドロップダウンを展開し、[管理者が承認したユーザは事前承認済み] を選択します。続いて、[Save (保存)] をクリックします。

  7. [プロファイル] セクションで、[プロファイルを管理する] をクリックします。

  8. 各自のユーザプロファイルを選択して、[保存] をクリックします。

  9. 接続アプリケーションのリストに戻ります ([ビルド] > [作成] > [アプリケーション])。

  10. [接続アプリケーション] セクションで、作成した接続アプリケーションを選択します。

コネクタの設定で指定する必要のあるコンシューマキーが表示されます。

キーストアファイルの生成

キーストア​は、認証時にデータの署名に使用するキーストアへのパスです。Java キーストア形式のみが許可されます。

キーストアファイルを生成する手順は、次のとおりです。

  1. Mule ワークスペースに移動し、コマンドプロンプト (Windows) またはターミナル (Mac) を開きます。

  2. keytool -genkeypair -alias salesforce-cert -keyalg RSA -keystore salesforce-cert.jks」と入力して Enter キーを押します。

  3. 次の情報を入力します。

    • キーストアのパスワード。

    • 自分の名と姓。

    • 自分の組織単位。

    • 市区郡と都道府県の名前と 2 文字の国コード

      システムが、ワークスペースに非公開/公開キーペアが含まれる Java キーストアファイルを生成します。

  4. コネクタ設定に​キーストア​のファイルパスを指定します。

    keytool -exportcert -alias salesforce-cert -file salesforce-cert.crt -keystore salesforce-cert.jks」と入力して Enter キーを押します。

    システムが、キーストアからワークスペースに公開キーをエクスポートします。これは、Salesforce インスタンスに入力する必要がある公開キーです。

  5. ワークスペースにキーストア (salesforce-cert.jks) と公開キー (salesforce-cert.crt) の両方のファイルがあることを確認します。

イベントとトピックの処理

アプリケーションは、Salesforce トピックをサブスクライブするという方法でイベントを受信できます。

フローを通過する各イベントには、変更された Salesforce データとそれがいつどのように変更されたかに関する情報が含まれています。コネクタは、この情報を解析して、フローが処理できる情報を送信します。

イベントには次のインバウンドプロパティがあります。

  • payload

  • createdDate

  • replayId

Salesforce では 24 時間イベントが保持されるため、その保持期間に保存されたイベントを取得できます。(トピックまたはチャネルへの) サブスクライバは、任意の時点のイベントを取得でき、送信時点のイベントのリスンに制限されることはありません。

どのブロードキャストイベントにも数値の ID が割り当てられます。ID は増分されますが、連続するイベントの ID が連続することは保証されません。各 ID が、それより前のイベントの ID より大きくなることは保証されます。たとえば、ID 999 のイベントに続くイベントの ID は 1,025 になる可能性があります。ID は組織とチャネルで一意です。削除されたイベントの ID は再利用されません。

Salesforce からアプリケーションへのデータのストリーミング時のイベントの処理については、Salesforce からのインバウンドデータの受信も参照してください。

トピック:

トピックのサブスクライブ

トピックを作成した後にそのトピックをサブスクライブすれば、イベントの受信を開始できます。サブスクライブするには、[Subscribe Topic (トピックのサブスクライブ)] (subscribe-topic) または [Replay Topic (トピックの再生)] (replay-topic) トリガをフローに追加します。トリガがインバウンドエンドポイントとして機能します。サブスクリプションがイベントを受信するたびに、トリガが Mule アプリケーションのフローの残りの部分を実行します。以下の XML の例では、INFO レベルのメッセージがログに出力されます。

Design Center では、Salesforce コネクタの Subscribe Topic 操作または Replay Topic 操作をトリガとして使用します。

XML では、subscribe-topic または replay-topic をトリガとして使用します。

<flow name="accountUpdatesSubscription">
    <!-- INBOUND ENDPOINT -->
    <sfdc:subscribe-topic topic="AccountUpdates"/>
    <!-- REST OF YOUR FLOW -->
    <logger level="INFO" message="Received an event for Salesforce Object ID #[map-payload:Id]"/>
</flow>

注意: 過去に Salesforce でパブリッシュされていないトピックをサブスクライブすると、サブスクリプションに成功します。トピックがその後パブリッシュされた場合、すでにサブスクライブしているユーザはそのトピックに関する通知を受信しません。トピックの作成後に、ユーザが再度サブスクライブする必要があります。

トピックのイベントの受信

トピックに関連付けられている Salesforce の変更に関するイベントを受信できるようにするには、事前にトピック (PushTopic) を作成する必要があります。PushTopic は Salesforce の特殊なオブジェクトで、名前 (トピックの名前) と Salesforce Object Query Language (SOQL) クエリを一緒にバインドします。PushTopic が作成されたら、その名前を使用してトピックをサブスクライブできます。

Design Center で、Create (create) または Publish Topic (publish-topic) 操作を使用して、トピックを作成できます。以下は、これらの操作の必須項目の例です。

  • Topic Name (トピック名): AccountUpdates

  • Query (クエリ): SELECT Id, Name FROM Account

以下は、publish-topic の XML の例です。

<sfdc:publish-topic name="AccountUpdates" query="SELECT Id, Name FROM Account"/>

または、Salesforce で、システムログからアクセス可能な [Enter Apex Code (Apex コードの入力)] ウィンドウで次のようなコードを実行して、トピックを作成することも可能です。

PushTopic pushTopic = new PushTopic();
pushTopic.ApiVersion = 23.0;
pushTopic.Name = 'AllAccounts';
pushTopic.Description = 'All records for the Account object';
pushTopic.Query = 'SELECT Id, Name FROM Account';
insert pushTopic;
System.debug('Created new PushTopic: '+ pushTopic.Id);

カスタムイベント通知の受信

Salesforce コネクタには、カスタムイベント通知の受信に役立つ 2 つの操作があります。これらの通知は、Salesforce データの変更とは関係のない一般的なイベントに関連します。

  1. Publish Channel 操作を使用して、ストリーミングチャネルを作成します。

    StreamingChannel は Salesforce の特殊なオブジェクトで、汎用のストリーミング API イベントをリスナに通知するために使用するチャネルを表します。

    Salesforce またはワークベンチを使用してストリーミングチャネルを作成することもできます。

  2. Subscribe Channel 操作を使用して、チャネルをサブスクライブします。

    Salesforce コネクタは、ストリーミングチャネルのカスタムイベントを Mule イベントに変換して、フローにディスパッチします。

トピックからのイベントの再生

サブスクライバは、保管期間内のすべてのイベントや、特定のイベント後に開始されるイベントなど、受信するイベントを指定できます。デフォルトでは、サブスクライブ後に送信される新規イベントのみを受信します。イベントは 24 時間の保管期間を過ぎると破棄されます。

Replay Topic (replay-topic) には次のオプションがあります。

  • All (すべて) (ALL): サブスクライバが、24 時間の保管期間中の過去のイベントと、サブスクリプション後に送信された新規イベントを含め、すべてのイベントを受信します。

  • Only New (新規のみ) (ONLY_NEW): サブスクライバが、クライアントのサブスクライブ後にブロードキャストされた新規イベントを受信します。

  • From Replay ID (再生 ID 以降) (FROM_REPLAY_ID): サブスクライバが、指定したイベント replayId より後のすべてのイベントを受信します。

Resume From the Last Replay ID (最後の再生 ID から再開): コネクタが最後に処理したイベントの再生 ID に基づいて、保存されているイベントの自動再生を可能にするオプションです。この機能は、サーバのシャットダウンや接続の切断など、何らかの理由でコネクタのリスンが中断した場合に役立ちます。保存された再生 ID が 24 時間の保管期間を経過している場合は、再生オプションがどのイベントを再生するかを決定します。

次の XML の例では、replay-topic がロガーメッセージのインバウンドエンドポイントのように機能します。

<flow name="accountUpdatesReplay">
    <!-- INBOUND ENDPOINT -->
    <sfdc:replay-topic topic="AccountUpdates" replayId="1" replayOption="ALL" autoReplay="true"/>
    <!-- REST OF YOUR FLOW -->
    <logger level="INFO" message="Replayed events: #[payload]"/>
</flow>

ALL (すべて) または ONLY_NEW (新規のみ) の再生オプションが選択された場合は、replayId の値が無視されます。

Salesforce へのデータの転送

データを Salesforce に転送するフローのアウトバウンドコネクタとして使用します。コネクタをこの用途で使用する場合は、単にコネクタをフローのインバウンドエンドポイントの後の任意の位置に配置します。

Salesforce からのインバウンドデータの受信

Salesforce コネクタをポーリング範囲でラップせずにインバウンドコネクタとして使用すれば、Salesforce からのデータをアプリケーションにストリーミングできます。コネクタをこの用途で使用する場合は、Salesforce コネクタをフローの始点に配置します。

Studio が自動的にコネクタを Salesforce (ストリーミング) モードに変換します。コネクタは同じままですが、Salesforce ストリーミング API にアクセスするため、変換されたコネクタが実行できる​ 唯一 ​の操作は、Subscribe to topic (つまり、subscribe to PushTopic) になります。
ストリーミングチャネルのサブスクライブ

Salesforce コネクタ: トピックに関する通知をリスンして、データをフローにフィードします。

「Streaming API (ストリーミング API)」も参照してください。

ストリーミングチャネルからサブスクライバに送信される通知は、レコードベースのイベントに限定されません。Salesforce コネクタを使用して、Salesforce のストリーミングチャネルを操作できます。

Salesforce からデータを受信するストリーミングチャネルの作成

組織で適切なストリーミング API 権限が有効になっている必要があります。

  1. Salesforce Developer Edition 組織にログインします。

  2. [すべてのタブ] (+) で、[ストリーミングチャネル] を選択します。

  3. [ストリーミングチャネル] タブで、[新規] を選択して新しいストリーミングチャネルを作成します。

  4. [ストリーミングチャネル名] に「/u/notifications/ExampleUserChannel」と入力して、説明 (省略可能) を入力します。

create 操作または排他的な publish-streaming-channel 操作のいずれかを次のとおり使用できます。

<sfdc:publish-streaming-channel name="/u/Notifications" description="General notifications"/>

ストリーミングチャネルのサブスクライブ

ストリーミングチャネルを作成した後にそのチャネルをサブスクライブすれば、イベントの受信を開始できます。subscribe-streaming-channel がインバウンドエンドポイントのように機能し、次のとおり使用されます。

<flow name="notificationsChannelSubscription">
	<!-- INBOUND ENDPOINT -->
	<sfdc:subscribe-streaming-channel streamingChannel="/u/TestStreaming"/>
	<!-- REST OF YOUR FLOW -->
	<logger level="INFO" message="Received an event: #[payload]"/>
</flow>

Mule フローは 2 つに分割されます。前半は概して、インバウンドエンドポイント (または HTTP コネクタ) とメッセージソースです。Mule フローはイベントを受信して生成するエンティティで、このイベントがその後フローの残りの部分で処理されます。後半は、メッセージ (イベントともいう) を処理するメッセージプロセッサのコレクションで、インバウンドエンドポイントがこのメッセージを受信して生成します。

/u/TestStreaming のサブスクリプションがイベントを受信するたびに、フローの残りの部分を実行します。上記の例では、INFO レベルのメッセージがログに出力されます。

チャネルのインバウンドプロパティのストリーミング

次の情報がインバウンドプロパティとして渡されます。

  • channel - Channel JSON プロパティにマップします。

  • type - データの Type JSON プロパティにマップします。

  • createdDate - データの createdDate JSON プロパティにマップします。

channel を除き、イベント内の各プロパティは、INBOUND プロパティとして使用できます。

ストリーミングチャネルからのイベントの再生

ストリーミングチャネルは、トピックの再生とほぼ同じように通知を再生できます。

replay-streaming-channel がインバウンドエンドポイントのように機能し、次のように使用されます。

<flow name="flowStreamingChannelReplay">
    <!-- INBOUND ENDPOINT -->
    <sfdc:replay-streaming-channel streamingChannel="/u/Notifications" replayId="1" replayOption="ALL"/>
    <!-- REST OF YOUR FLOW -->
    <logger level="INFO" message="Replayed events: #[payload]"/>
</flow>

ALL (すべて) または ONLY_NEW (新規のみ) の再生オプションが選択された場合は、replayId の値が無視されます。

ストリーミングチャネルへのイベントの転送

Salesforce では、REST API を使用してカスタムイベントを特定のストリーミングチャネルに転送できます。Salesforce ワークベンチまたはこのコネクタを使用できます。

push-generic-event 操作を使用する方法:

<flow name="flowPushGenericEvent">
    <!-- INBOUND ENDPOINT -->
    <sfdc:push-generic-event channelId="0M6j0000000KyjBCAS">
    	<sfdc:events>
            <sfdc:event payload="Notification message text"/>
        </sfdc:events>
	</sfdc:push-generic-event>
    <logger level="INFO" message="Replayed events: #[payload]"/>
</flow>

チャネル ID は、publish-streaming-channel 操作の応答マップから取得できます。

チャネルの ID を取得するもう 1 つの方法は、Salesforce ページから次の手順を実行することです。

  1. Developer Edition 組織にログインします。

  2. [すべてのタブ] (+) で、[ストリーミングチャネル] を選択します。

チャネルリストにチャネル ID 項目が表示されていない場合は、次の手順を実行します。

  1. [新規ビューの作成] をクリックします。

  2. [名前] 入力項目にビューの名前を入力します。

  3. [選択可能な項目] リストで、[ストリーミングチャネル ID] を選択し、[追加] をクリックします。

  4. 必要に応じて他の項目を追加します。

  5. [保存] をクリックします

これでリストに各ストリーミングチャネルの ID が表示されるはずです。

push event 操作から応答として受信した JSON は次のようになります。

[
	{
	"userOnlineStatus": {
	},
	"fanoutCount": 0
	}
]

データのバッチ読み込み

Salesforce Bulk API は、組織のデータのバッチを Salesforce に読み込みます。

Salesforce コネクタには、Bulk API と連動する Create 操作と Create Bulk 操作が用意されています。

一括操作はすべて、Salesforce が作成プロセスをバックグラウンドで処理します。したがって、コネクタには SaveResults がまだないため、この応答はありません。代わりに BatchInfo オブジェクトで応答します。このオブジェクトにはバッチの ID と、これらのオブジェクトをアップロードするために作成するジョブの ID が含まれます。

一括データの状況の追跡

Salesforce では、[一括データ読み込みジョブ] のジョブ ID を使用して Bulk API を監視できます。

Salesforce のジョブの詳細ページに、ジョブの全バッチの関連リストが示されます。関連リストには、各バッチの [要求を表示] および [応答を参照] リンクが表示されます。バッチが CSV ファイルの場合は、これらのリンクから CSV 形式の要求や応答が返されます。バッチが XML ファイルの場合は、これらのリンクから XML 形式の要求や応答が返されます。

Salesforce では、一括データ読み込みジョブとそのジョブに関連付けられたバッチの状況を追跡できます。 [_各自の名前]_ > [設定] > [監視] > [一括データ読み込みジョブ] をクリックします。[ジョブ ID] をクリックすると、ジョブの詳細ページが表示されます。

ジョブの詳細ページに、ジョブの全バッチの関連リストが表示されます。関連リストには、各バッチの [要求を表示] および [応答を参照] リンクが表示されます。バッチが CSV ファイルの場合は、これらのリンクから CSV 形式の要求や応答が返されます。バッチが XML ファイルの場合は、これらのリンクから XML 形式の要求や応答が返されます。これらのリンクは、Salesforce API バージョン 19.0 以降で作成されたバッチに使用できます。

使用上の注意

Null にする項目

  • 設定には、[Can Clear Fields by Updating Field Value to Null (項目値を Null に更新して項目をクリア可能)] というチェックボックスがあります。このボックスをオンにすると、要求内の値が Null の項目がすべて fieldsToNull 項目に追加され、Salesforce に送信されます。

  • fieldsToNull 項目を強制的に使用しなくても、Null に設定する項目を決定できます。

更新/挿入

  • 更新/挿入しようとしている sObject に外部 ID 項目名を設定しなければ、更新/挿入を使用するたびに失敗します。

  • sObject priceBookentry2 では Upsert 操作が機能しません。

  • bulk upsert の contentType は変更できませんが、Create Job を使用して、contentType を CSV と 圧縮 CSV (最大文字数に達した場合) のいずれかに設定できます。 バッチの作成でフォローアップします。

クエリ

  • DataSense を介して sObject の項目と対応するデータ型を表示することはできますが、Query 操作は すべて の項目を String で返します。

  • 項目の実際のデータ型を使用する場合は、変換 (またはメッセージの変換) コンポーネントを使用して、その項目を任意のデータ型に変換する必要があります。

  • CreatedDate 項目は dateTime で表示されますが、クエリは日付を表す文字列を返します。

  • 項目に実際に dateTime を使用する場合は、例のようにメッセージの変換を使用して設定できます。

  • Date 項目と DateTime 項目を保存するには、DataWeave 式を使用して Date と Calendar の Java オブジェクトを作成できます。

Salesforce ドロップダウンへの値の挿入

  • Salesforce の既存のドロップダウンリスト項目に連動値を挿入しても、必ずしもうまくいくとは限りません。テストして機能するかどうかを確認します。

Salesforce ドロップダウンの値の照合

  • Salesforce の既存のドロップダウンリスト項目の値と照合する場合は、必ずドロップダウンと まったく同じ値 を使用します。たとえば、「USA」という値を含むドロップダウンリストに対して「US」という値を照合した場合、照合は実施されますが、ドロップダウンに「US」と「USA」の 2 つの値が表示されることになります。

通貨

  • 通貨の値は 18 文字以下にする必要があります。

  • 複数の通貨を処理するときは、sObject でどの通貨を使用しているか認識し、不正確な値が入力されないようにします。デフォルトの通貨は組織レベルの場所と一致します。

API コールの制限

  • アカウントに適用される処理数制限ポリシーを認識し、1 日に割り当てられている API コール数を超えないようにする必要があります。

Opportunity sObject

Opportunity からデータを抽出する場合、「四半期」は暦年の四半期ではありません。この場合の「四半期」は、組織の会計年度の四半期です。

XML を使用した設定

Salesforce コネクタの XML を手動で作成する場合は、コネクタの名前空間を追加します。Anypoint Studio の場合は、Mule アプリケーションのプロジェクトの作成時にコネクタの名前空間が自動的に作成されます。

xsi:schemaLocation="
...
http://www.mulesoft.org/schema/mule/sfdc
http://www.mulesoft.org/schema/mule/sfdc/current/mule-salesforce.xsd"

例:

<mule xmlns="http://www.mulesoft.org/schema/mule/core"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:sfdc="http://www.mulesoft.org/schema/mule/salesforce"
      xsi:schemaLocation="
               http://www.mulesoft.org/schema/mule/core
               http://www.mulesoft.org/schema/mule/core/current/mule.xsd
               http://www.mulesoft.org/schema/mule/sfdc
               http://www.mulesoft.org/schema/mule/sfdc/current/mule-salesforce.xsd">

      <!-- Insert your configuration elements and your flow here -->
</mule>

Maven の連動関係の設定

XML でアプリケーションを手動で作成する場合は、プロジェクトの pom.xml を設定する必要があります。

<repositories>
   <repository>
        <id>mule-ee-releases</id>
        <name>MuleEE Releases Repository</name>
        <url>https://repository-master.mulesoft.org/nexus/content/repositories/releases-ee/</url>
    <repository>
        <id>mule-ee-snapshots</id>
        <name>MuleEE Snapshots Repository</name>
        <url>https://repository-master.mulesoft.org/nexus/content/repositories/ci-snapshots/</url>
    </repository>
</repositories>

次のスニペットは、特定のリリースバージョンのプロジェクトの連動関係を指定します。

<dependency>
    <groupId>com.mulesoft.connectors</groupId>
    <artifactId>mule-salesforce-connector</artifactId>
    <version>9.5.0</version>
    <classifier>mule-plugin</classifier>
</dependency>

次のスニペットは、最新バージョンのプロジェクトの連動関係を追加します。

<dependency>
    <groupId>com.mulesoft.connectors</groupId>
    <artifactId>mule-salesforce-connector</artifactId>
    <version>LATEST</version>
</dependency>

例: データの受け取りと変換

sfdc_outbound
  • HTTP コネクタ: HTTP 要求からデータを受け取る。

  • メッセージの変換: データの構造と形式を変換し、Salesforce コネクタが想定する出力を生成する。

  • Salesforce コネクタ: (アウトバウンド) Salesforce に接続し、Salesforce にデータを転送する操作を実行する。

インバウンドのシナリオ

query_inbound
  1. スケジューラコネクタ: 設定に応じてフローをトリガする。

  2. Salesforce コネクタ: Salesforce に接続し、クエリ結果を記載した InputStream を返す。

  3. メッセージの変換: データの構造と形式を変換し、ファイルエンドポイントが想定する出力を生成する。

  4. ファイルコネクタ: データをファイル (CSV など) に記録し、ユーザが定義したディレクトリまたは場所に保存する。

例: XML

次の XML コードを Anypoint Studio に貼り付け、前のセクションで説明した 2 つのフローを試してみます。

<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:file="http://www.mulesoft.org/schema/mule/file" xmlns:salesforce="http://www.mulesoft.org/schema/mule/salesforce"
	xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core"
	xmlns:http="http://www.mulesoft.org/schema/mule/http"
	xmlns="http://www.mulesoft.org/schema/mule/core"
	xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http
http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/ee/core
http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd
http://www.mulesoft.org/schema/mule/salesforce
http://www.mulesoft.org/schema/mule/salesforce/current/mule-salesforce.xsd
http://www.mulesoft.org/schema/mule/file
http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd">
	<configuration-properties file="mule-app.properties"/>
	<http:listener-config name="HTTP_Listener_config" doc:name="HTTP Listener config" >
	<http:listener-connection host="localhost" port="8081" />
	</http:listener-config>
	<salesforce:sfdc-config name="Salesforce_Sfdc_config" doc:name="Salesforce Sfdc config">
	  <salesforce:basic-connection
	  username="${salesforce.username}"
	  password="${salesforce.password}"
	  securityToken="${salesforce.securityToken}" />
	</salesforce:sfdc-config>
	<flow name="crud_app_template">
		<http:listener config-ref="HTTP_Listener_config" path="/" doc:name="Listener" />
		<parse-template location="form.html" doc:name="Parse Template"  />
	</flow>
	<flow name="create_accountFlow" >
		<http:listener config-ref="HTTP_Listener_config" path="/createAccount" doc:name="Listener"  />
		<ee:transform doc:name="Transform Message" >
			<ee:message >
				<ee:set-payload ><![CDATA[%dw 2.0
output application/java
---
[{

	Name: payload.Name,
	AccountNumber: payload.AccountNumber,
	BillingCity: payload.BillingCity
}]]]></ee:set-payload>
			</ee:message>
		</ee:transform>
		<salesforce:create doc:name="Create" type="Account" config-ref="Salesforce_Sfdc_config"/>
		<ee:transform doc:name="Transform Message" >
			<ee:message >
				<ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
payload map {
	id:$.id,
	errors:$.errors,
	success:$.success

}]]></ee:set-payload>
			</ee:message>
		</ee:transform>
	</flow>
	<flow name="delete_accountFlow" >
		<http:listener config-ref="HTTP_Listener_config" path="/delete" doc:name="Listener"  />
		<ee:transform doc:name="Transform Message" >
			<ee:message >
				<ee:set-payload ><![CDATA[%dw 2.0
output application/java
---
[payload.Id]]]></ee:set-payload>
			</ee:message>
		</ee:transform>
		<salesforce:delete config-ref="Salesforce_Sfdc_config" doc:name="Delete" />
		<ee:transform doc:name="Transform Message" >
			<ee:message >
				<ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
payload map {
	id:$.id,
	errors:$.errors,
	success:$.success
}]]></ee:set-payload>
			</ee:message>
		</ee:transform>
	</flow>
	<flow name="query_accountFlow" >
		<http:listener config-ref="HTTP_Listener_config" path="/query" doc:name="Listener"  />
		<salesforce:query config-ref="Salesforce_Sfdc_config" doc:name="Query" >
			<salesforce:salesforce-query>SELECT AccountNumber,BillingAddress,Id,Name FROM Account WHERE Name = ':name'</salesforce:salesforce-query>
			<salesforce:parameters ><![CDATA[#[output application/java
---
{
	name : payload.name
}]]]></salesforce:parameters>
		</salesforce:query>
		<ee:transform doc:name="Transform Message"  >
			<ee:message >
				<ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
payload map {
		AccountNumber:$.AccountNumber,
		BillingAddress:$.BillingAddress,
		Id:$.Id,
		Name:$.Name
}]]></ee:set-payload>
			</ee:message>
		</ee:transform>
	</flow>
	<flow name="update_accountFlow" >
		<http:listener config-ref="HTTP_Listener_config" path="/update" doc:name="Listener"  />
		<ee:transform doc:name="Transform Message"  >
			<ee:message >
				<ee:set-payload ><![CDATA[%dw 2.0
output application/java
---
[{

	Name: payload.Name,
	AccountNumber: payload.AccountNumber,
	Id:payload.Id
}]]]></ee:set-payload>
			</ee:message>
		</ee:transform>
		<salesforce:update config-ref="Salesforce_Sfdc_config" type="Account" doc:name="Update"  />
		<ee:transform doc:name="Transform Message" >
			<ee:message >
				<ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
payload map {
	id:$.id,
	errors:$.errors,
	success:$.success
}]]></ee:set-payload>
			</ee:message>
		</ee:transform>
	</flow>
	<flow name="upsert_accountFlow" >
		<http:listener config-ref="HTTP_Listener_config" path="/upsert" doc:name="Listener" />
		<ee:transform doc:name="Transform Message" >
			<ee:message >
				<ee:set-payload ><![CDATA[%dw 2.0
output application/java
---
[{

	Name: payload.Name,
	AccountNumber: payload.AccountNumber,
	Id:payload.Id
}]]]></ee:set-payload>
			</ee:message>
		</ee:transform>
		<salesforce:upsert config-ref="Salesforce_Sfdc_config"
		externalIdFieldName="Id" type="Account" doc:name="Upsert" />
		<ee:transform doc:name="Transform Message" >
			<ee:message >
				<ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
payload map {
	id:$.id,
	errors:$.errors,
	success:$.success,
	created:$.created

	}]]></ee:set-payload>
			</ee:message>
		</ee:transform>
	</flow>
	<flow name="find_duplicates_for_account_flow" >
		<http:listener config-ref="HTTP_Listener_config" path="/findDuplicates" doc:name="Listener" />
		<ee:transform doc:name="Transform Message" >
			<ee:message >
				<ee:set-payload ><![CDATA[%dw 2.0
output application/java
---
[
	payload
]]]></ee:set-payload>
			</ee:message>
		</ee:transform>
		<salesforce:find-duplicates config-ref="Salesforce_Sfdc_config" type="Account"
		doc:name="Find duplicates" />
		<ee:transform doc:name="Transform Message" >
			<ee:message >
				<ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
{
	success: payload.success,
	duplicateResults: {
		(payload.duplicateResults map {
			matchRecords: $.matchResults
		}
		)
	},
	duplicateRuleEntityType: payload.duplicateRuleEntityType,
	duplicateRule: payload.duplicateRule,
	allowSave: payload.allowSave,
	errorMessage: payload.errorMessage
}]]></ee:set-payload>
			</ee:message>
		</ee:transform>
	</flow>
	<flow name="crud-appFlow" >
		<http:listener doc:name="Listener" config-ref="HTTP_Listener_config" path="/"/>
		<salesforce:convert-lead doc:name="Convert lead" config-ref="Salesforce_Sfdc_config"/>
	</flow>
</mule>

例: 親子リレーションのある Salesforce オブジェクトの作成または更新

Salesforce オブジェクトには、標準または各自が作成したカスタム種別のオブジェクト間にリレーションを設定できます。

オブジェクト間のリレーションは通常一対多の親-子リレーションですが、Salesforce に存在する 2 つのオブジェクトをどのような形でも結び付けることができます。

リレーションが設定されたオブジェクトを作成または変更するのは厄介です。このセクションでは、Salesforce コネクタを使用してオブジェクトの更新/挿入を実行する方法を示します。

Salesforce にこのリレーションの構造を作成します。

この例では、MyCustomObject と MyOtherCustomObject の 2 つのカスタム種別を想定しています。

MyCustomObject は MyOtherCustomObject とのリレーションを維持する必要があります。MyCustomObject を更新/挿入すると、Salesforce コネクタに入力として送信される POJO は次のようになります。

{
	...
	// MyCustomObject's fields ...
	OtherObject__r:
	{
		CustomField__c : 'ABC123',
		type: 'MyOtherCustomObject__c'
	}
}

OtherObject は、MyCustomObject 項目の名前で、この値が MyOtherCustomObject オブジェクトへの参照である必要があります。OtherObject__r は、設定され、別のオブジェクトへのリレーションである項目の名前を示します。

この項目の値は、2 つの項目が設定されたオブジェクトである必要があります。

1 つは、種別の名前の項目で、参照先のオブジェクト種別の名前が値になります。この場合の種別は MyOtherCustomObject です。

もう 1 つは、参照する MyOtherCustomObject の適正なインスタンスを識別するのに適した値と名前の項目です。この場合は、ABC123 という値がある CustomField という項目です。

次の XML の例は、これらのオブジェクトを更新する方法を示しています。

<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:metadata="http://www.mulesoft.org/schema/mule/metadata"
    xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking"
    xmlns:dw="http://www.mulesoft.org/schema/mule/ee/dw"
    xmlns:sfdc="http://www.mulesoft.org/schema/mule/sfdc"
    xmlns="http://www.mulesoft.org/schema/mule/core"
    xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
	xmlns:spring="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/sfdc
http://www.mulesoft.org/schema/mule/sfdc/current/mule-sfdc.xsd
http://www.mulesoft.org/schema/mule/ee/dw
http://www.mulesoft.org/schema/mule/ee/dw/current/dw.xsd
http://www.mulesoft.org/schema/mule/core
http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/ee/tracking
http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd">
    <sfdc:config name="Salesforce__Basic_Authentication"
        username="username"
        password="password"
        securityToken="token"
        url="https://test.salesforce.com/services/Soap/u/34.0"
        doc:name="Salesforce: Basic Authentication"/>
    <flow name="DirectUpsert" initialState="stopped">
        <poll doc:name="Poll">
            <fixed-frequency-scheduler frequency="10000" startDelay="5000"/>
            <set-payload
                value="#[ [ ['Name' :'test'+server.dateTime, 'field_1__c' : 'test', 'OtherObject__r' : ['CustomField__c' : 'customFieldValue', 'type': 'MyOtherCustomObject__c'] ] ] ]"
                doc:name="Set Payload"/>
        </poll>

<sfdc:upsert config-ref="Salesforce__Basic_Authentication" externalIdFieldName="Id"
    type="MyCustomObject__c" doc:name="Salesforce">
<sfdc:objects ref="#[payload]"/>
</sfdc:upsert>
        <logger message="Upsert completed!" level="INFO" doc:name="Logger"/>
    </flow>
    <flow name="TransformBefore" initialState="stopped">
        <poll doc:name="Poll">
            <fixed-frequency-scheduler frequency="10000" startDelay="5000"/>
            <set-payload
                value="#[ {'name' :&quot;Paul&quot;, 'customData' : 'JULY 11TH', 'parentRef':  'Carlos' } ]"
                doc:name="Set Payload"/>
        </poll>
        <dw:transform-message metadata:id="7f3eb56a-b4ee-49db-8722-8b303c1c8e7a"
            doc:name="Transform Message">
            <dw:input-payload doc:sample="Input.dwl"/>
            <dw:set-payload><![CDATA[%dw 1.0
%output application/java
---
[{
	Name: payload.name,
	field_1__c: payload.customData,
	OtherObject__r: {'CustomField__c' : payload.parentRef, 'type': 'MyOtherCustomObject__c'}
}]]]></dw:set-payload>
        </dw:transform-message>
        <sfdc:upsert config-ref="Salesforce__Basic_Authentication"
            externalIdFieldName="Id" type="MyCustomObject__c" doc:name="Salesforce">
            <sfdc:objects ref="#[payload]"/>
        </sfdc:upsert>
        <logger message="#[payload[0].created ? &quot;Created&quot; : &quot;Updated&quot;]"
         level="INFO" doc:name="Logger"/>
    </flow>
</mule>

関連情報

Was this article helpful?

💙 Thanks for your feedback!

Edit on GitHub