intra-mart Accel Platform Salesforce 連携チュートリアルガイド 第2版 2021-04-01

7. Salesforce Streaming クライアント

7.1. Salesforce Streaming クライアント概要

Salesforce Streaming クライアントとは Salesforce からプッシュ通知を受け取る機能です。

SOQL で指定した条件に基づいて、Salesforce データの変更を検知し、変更した情報を通知します。

次のような使い方を想定しています。

  • マスタ同期
    • 営業担当がSalesforceで取引先を追加 → intra-martの取引先マスタに即時反映
  • 業務プロセス連携
    • 営業担当がSalesforceで見積り依頼を登録 → intra-martで見積りワークフロー/BPMを開始
    • 営業担当がSalesforceで受注を登録 → intra-martで受注生産ワークフロー/BPMを開始
    • Salesforceと連動したECサイトで在庫問合せ → intra-martから在庫状況を返却
    • Salesforceと連動したECサイトで注文 → intra-martで在庫引き当て、ピッキング指示、配送指示
  • 情報共有
    • Salesforceのポータルサイトで製品クレーム受付 → intra-martの IMBoxにクレームの内容を投稿

Salesforce からのプッシュ通知は Salesforce Streaming API を利用しています。Salesforce Streaming API の詳細は以下の URL を参照してください。

注意

通知の永続性と信頼性は保証されません。例えば、Salesforce 側のシステムの使用負荷が高い場合や、Salesforce 側のサーバが停止した場合などにメッセージを受信できない可能性があります。

7.2. アーキテクチャ

Salesforce Streaming クライアントは次のようなアーキテクチャで構築されています。

../../_images/streaming.png
  1. Salesforceで SOQL クエリに基づいて PushTopic を作成します。これによりチャネルが定義されます。

  2. intra-mart Accel Platformでは 1. で定義されたチャネルに接続するセッションを生成します。
    • トピック一覧画面で通知を受け取りたい PushTopic を選択し,トピックを登録します。
    • 登録したトピックが有効だった場合、サービス上で動作するスレッドを生成し、セッションとします。
    • セッションは指定された PushTopic に対応するチャネルに対して接続し、通知が送信されるのを待ち続けます。
    • セッションに通知が送信されたら、IM-Propagation に通知された情報を送信します。
  3. IM-Propagation のレシーバが通知を受け取ります。
    • IM-LogicDesignerのフロートリガは IM-Propagation のレシーバとして動作します。
    • IM-LogicDesignerの「トリガー設定」で指定されたロジックフローに通知された情報を渡し、フローを実行します。

7.3. チュートリアル

このチュートリアルが終了すると、次のような事ができます。

  • Salesforceで PushTopic を登録する
  • Salesforceのデータの変更通知を intra-mart Accel Platformで受信する
  • 受信した変更通知を入力値として IM-LogicDesignerのフローを実行する

7.3.1. ゴールの説明

このチュートリアルでは、Salesforce に新規リードが登録されたら、 IMBox のカンパニーボックスにその内容が通知されるという一連の流れを作成します。

7.3.2. 準備

チュートリアルの準備 に書かれている準備が行われていることを確認してください。

また、 IMBoxへ投稿を行いますので IMBoxを使用できるようになっていることも確認してください。 IMBoxのセットアップは intra-mart Accel Platform セットアップガイド の IMBox を参照してください。

サンプルのユーザ、会社、組織の情報を使用します。

7.3.3. PushTopicの登録

まず、 Salesforceで PushTopic を作成します。 今回は Workbench で Apex コードを実行して作成します。

コラム

Workbench ではなく開発者コンソールを使用して PushTopic を作成することもできます。お好みの方法で作成してください。

コラム

Apex とは Salesforceの独自言語です。詳細は以下の URL を参照してください。

  1. Workbench にログインする

  2. 「Jump to:」で「Apex Execute」を選択し「Select」ボタンをクリックする

  3. 「Apex Execute」画面のテキストエリアに以下の Apex コードを入力し、「Execute」ボタンをクリックする

    PushTopic pushTopic = new PushTopic();
    pushTopic.Name = 'SampleLeadTopic';
    pushTopic.Query = 'SELECT Id, Name, Title, Company, Status, Phone, Email, Website FROM Lead';
    pushTopic.ApiVersion = 36.0;
    pushTopic.NotifyForOperationCreate   = true;
    pushTopic.NotifyForOperationUpdate   = true;
    pushTopic.NotifyForOperationUndelete = true;
    pushTopic.NotifyForOperationDelete   = true;
    pushTopic.NotifyForFields = 'Referenced';
    insert pushTopic;
    
  4. Results 欄が表示されます。

  5. 上部メニューから「queries」- 「Streaming Push Topics」をクリックします。

  6. 「PushTopic」のセレクトボックスを開くと「SampleLeadTopic」が含まれていることが確認できます。

これで PushTopic の作成が終わりました。

7.3.4. トピック登録

次に Salesforce Streaming クライアントのトピックを登録します。

  1. 「サイトマップ」→「Salesforce」→「トピック一覧」をクリックします。

    ../../_images/sitemap_topiclist.png
  2. 「トピックを登録」リンクをクリックすると、「トピックを登録」ダイアログが表示されます。

    ../../_images/streaming_open_topic_dialog.png
  3. 次のように入力、選択し「登録」ボタンをクリックします。

    クライアントID 接続したいクライアントID
    トピック SampleLeadTopic
    詳細 サンプルのトピックです。
    ステータス 有効
    ../../_images/streaming_register_topic.png
  4. トピック一覧に SampleLeadTopic の行が追加されます。

    ../../_images/streaming_topic_list.png
  5. 「セッション一覧画面」をクリックし「セッション一覧画面」を表示します。

    ../../_images/streaming_open_session_list.png
  6. 追加したトピックに対応するセッションがステータスが RUNNING として表示されます。

    ../../_images/streaming_session_list.png

これでトピックの登録とセッションの開始が終わりました。

7.3.5. メッセージのフォーマット

次に IMBoxのカンパニーボックスに投稿するメッセージをフォーマットするユーザ定義タスクを作成します。作成するのは JavaScript 定義です。

  1. intra-mart Accel Platformにテナント管理者またはLogicDesigner管理者でログインします。

  2. 「サイトマップ」→「LogicDesigner」→「JavaScript定義新規作成」から、「JavaScript定義編集」を開きます。

    ../../_images/javascript_sitemap.png
  3. 入力値を以下のように指定します。

    キー名
    Name string
    Title string
    Company string
    Status string
    Phone string
    Email string
    Website string
    ../../_images/javascript_in.png
  4. 「スクリプト」を以下のように変種します。

    function run(input) {
    
        var message = '新しいリードが登録されました。\n\n';
        message += '名前: ' + input.Name + '\n';
        message += '役職: ' + input.Title + '\n';
        message += '会社: ' + input.Company + '\n';
        message += '状況: ' + input.Status + '\n';
        message += '電話: ' + input.Phone + '\n';
        message += 'メール: ' + input.Email + '\n';
        message += 'URL: ' + input.Website + '\n';
    
        return {
          message: message
        };
    }
    
  5. その他の項目は以下のように入力してください。

    ユーザ定義ID Format
    ユーザ定義名 Format
    ユーザカテゴリID SampleCategory
  1. 「登録」ボタンをクリックします。

  2. 確認ダイアログで「OK」ボタンをクリックします。

  3. ユーザ定義一覧が表示され、作成したユーザ定義が表示されます。

    ../../_images/streaming_userdefinition_list.png

これで メッセージをフォーマットするためのユーザ定義タスクの作成は終了です。

7.3.6. フロー定義作成

次に IM-LogicDesignerのフロー定義を作成します。

  1. 「サイトマップ」→「LogicDesigner」→「フロー定義」を開きます。

    ../../_images/sitemap_flow.png
  2. 「新規作成」リンクをクリックし、「ロジックフロー定義編集」画面を表示します。

    ../../_images/flow_list_new.png
  3. 「入出力設定」リンクをクリックし、「入力」に次のような項目を追加し、「決定」ボタンをクリックします。

    キー名
    Name string
    Title string
    Company string
    Status string
    Phone string
    Email string
    Website string
    topicName string
    ../../_images/streaming_in.png
  4. 「定数設定」リンクをクリックし、次のような項目を追加し、「決定」ボタンをクリックします。

    定数ID 定数値 備考
    companyCd comp_sample_01 投稿先の会社コードを指定します。ここではサンプルデータに含まれる「サンプル会社」の会社コードを指定しています。
    postUserCd tenant 投稿者のユーザコードを指定します。
    ../../_images/streaming_constant.png
  5. ロジックフロー定義編集画面のデザイナに、先ほど作成した「Format」と「分岐」「カンパニーボックスへ投稿」タスクを追加し、以下のように接続します。

    ../../_images/streaming_flow.png
  6. 「分岐」タスクをクリックします。

    ../../_images/streaming_mapping_button1.png
  7. 「条件式(EL式)」に ${$input.topicName==’SampleLeadTopic’} と入力します。

    ../../_images/streaming_gateway.png
  8. 「Format」タスクをクリックし、「マッピング設定」ボタンをクリックします。

    ../../_images/streaming_mapping_button2.png
  9. 「入力」の Name から Website までと、「Format」の同じキー名の項目とを紐づけ、「決定」ボタンをクリックします。

    ../../_images/streaming_mapping1.png
  10. 「カンパニーボックスへ投稿」タスクをクリックし、「マッピング設定」ボタンをクリックします。

    ../../_images/streaming_mapping_button3.png
  11. 「Format」を追加した上で、「Format」の message と、「カンパニーボックスに投稿」の message を、「定数」の companyCd, postUserCd と 「カンパニーボックスへ投稿」の同じキー名の項目とを紐づけ、「決定」ボタンをクリックします。

    ../../_images/streaming_mapping2.png
  12. 「新規保存」リンクをクリックし、新規保存ダイアログを表示します。ダイアログに次のような内容を入力し「決定」ボタンをクリックします。

    フロー定義ID PostToCompanyBox
    フロー定義名 標準 PostToCompanyBox
    フローカテゴリID SampleCategory
    ../../_images/streaming_save_flow.png
  13. 「確認」ダイアログで「決定」ボタンをクリックします。

  14. 「ロジックフロー定義一覧」画面に遷移します。作成した「Expenes」フローが表示されていることを確認できます。

    ../../_images/streaming_flow_definition.png

これで IM-LogicDesignerのフロー定義の作成が終わりました。

7.3.7. IM-LogicDesignerフロートリガ作成

次に IM-LogicDesignerのフロートリガを作成します。

  1. 「サイトマップ」→「LogicDesigner」→「トリガ定義一覧」を開きます。

    ../../_images/sitemap_trigger.png
  2. 「新規作成」リンクをクリックし、「トリガ定義編集」画面を表示します。

    ../../_images/trigger_list_new.png
  3. トリガ発生条件の「Salesforce Streaming」欄の「監視対象オブジェクトのレコード作成」を選択します。

    ../../_images/trigger_condition.png
  4. トリガ発生時に実行するフローの「対象フロー」欄の「検索」リンクをクリックします。

    ../../_images/trigger_open_search_dialog.png
  5. 「ロジックフロー定義検索」ダイアログで「PostToCompanyBox」を選択し「決定」ボタンをクリックします。

    ../../_images/trigger_search_dialog.png
  6. 「マッピング設定」ボタンが有効になるので、「マッピング設定」ボタンをクリックします。

    ../../_images/trigger_open_mapping_dialog.png
  7. 「fields」に以下のキーを追加して、「PostToCompanyBox」の同名のキーと、topicName と 「PostToCompanyBox」の topicName を紐付け、「決定」ボタンをクリックします。

    • Name
    • Title
    • Company
    • Status
    • Phone
    • Email
    • Website
    ../../_images/trigger_mapping_dialog.png

    コラム

    fields に追加するキーは、PushTopic を登録する時に指定した SOQL クエリの列名です。

    pushTopic.Query = ‘SELECT Id, Name, Title, Company, Status, Phone, Email, Website FROM Lead’;

  8. その他の項目は以下のように入力してください。

    トリガ定義ID CreateSalesforceRecord
    トリガ定義名 CreateSalesforceRecord
  9. 「登録」ボタンをクリックします。

  10. 確認ダイアログで「OK」ボタンをクリックします。

  11. トリガ定義一覧が表示され、作成したフロートリガ定義が表示されます。

    ../../_images/streaming_list.png

これで IM-LogicDesignerのフロートリガの作成が終わりました。

7.3.8. 動作確認

最後に動作確認を行います。 Salesforceのリードに新しいレコードを作成すると IMBoxへその内容が投稿されることを確認します。

  1. Salesforceにログインし、「Expense」タブをクリックします。

    ../../_images/sfdc_click_all_tab.png
  2. 「リード」リンクをクリックします。

    ../../_images/sfdc_click_lead.png
  3. 「新規」ボタンをクリックします。

    ../../_images/sfdc_click_new_lead.png
  4. 必要な情報を入力、選択し、「保存」ボタンをクリックします。ここでは以下のような情報入力しました。

    サンプル
    一郎
    会社名 XXXカンパニー
    役職 課長
    電話 03-1234-5678
    メール sample.ichiro@xxx.company.co.jp
    Webサイト http://www.xxx.company.co.jp
    ../../_images/sfdc_edit_lead.png
  5. 「サンプル 一郎」画面が表示され、 Salesforce にデータが登録されたことがわかります。

    ../../_images/sfdc_lead.png

最後に IMBoxに投稿されたかどうかを確認します。

  1. intra-mart Accel Platformにユーザ tenant でログインします。

  2. グローバルナビから IMBoxをクリックし、 IMBoxを開きます。

    ../../_images/global_nav.png
  3. 先ほど Salesforceに登録した情報が IMBoxに投稿されていることがわかります。

    ../../_images/imbox.png

以上で Salesforceに新規リードが登録されたら、 IMBoxのカンパニーボックスにその内容が通知されるという一連の流れが確認できました。

7.3.9. まとめ

以上で Salesforce Streaming クライアント のチュートリアルは全て完了です。

これまでのチュートリアルを通して、以下のことを学びました。

  • Salesforce で PushTopic を登録する方法
  • Salesforceのデータの変更通知を intra-mart Accel Platformで受信する方法
  • IM-Propagation が変更通知を伝播すること
  • 受信した変更通知を入力値として IM-LogicDesignerのフローを実行する方法