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 を参照してください。
- Force.com ストリーミング API 開発者ガイド - ストリーミング API の概要 (日本語)
- Force.com Streaming API Developer Guide - Introducing Streaming API (English)
注意
通知の永続性と信頼性は保証されません。例えば、Salesforce 側のシステムの使用負荷が高い場合や、Salesforce 側のサーバが停止した場合などにメッセージを受信できない可能性があります。
7.2. アーキテクチャ¶
Salesforce Streaming クライアントは次のようなアーキテクチャで構築されています。
Salesforceで SOQL クエリに基づいて PushTopic を作成します。これによりチャネルが定義されます。
- intra-mart Accel Platformでは 1. で定義されたチャネルに接続するセッションを生成します。
- トピック一覧画面で通知を受け取りたい PushTopic を選択し,トピックを登録します。
- 登録したトピックが有効だった場合、サービス上で動作するスレッドを生成し、セッションとします。
- セッションは指定された PushTopic に対応するチャネルに対して接続し、通知が送信されるのを待ち続けます。
- セッションに通知が送信されたら、IM-Propagation に通知された情報を送信します。
- 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 を参照してください。
Workbench にログインする
「Jump to:」で「Apex Execute」を選択し「Select」ボタンをクリックする
「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;
Results 欄が表示されます。
上部メニューから「queries」- 「Streaming Push Topics」をクリックします。
「PushTopic」のセレクトボックスを開くと「SampleLeadTopic」が含まれていることが確認できます。
これで PushTopic の作成が終わりました。
7.3.4. トピック登録¶
次に Salesforce Streaming クライアントのトピックを登録します。
「サイトマップ」→「Salesforce」→「トピック一覧」をクリックします。
「トピックを登録」リンクをクリックすると、「トピックを登録」ダイアログが表示されます。
次のように入力、選択し「登録」ボタンをクリックします。
クライアントID 接続したいクライアントID トピック SampleLeadTopic 詳細 サンプルのトピックです。 ステータス 有効 トピック一覧に SampleLeadTopic の行が追加されます。
「セッション一覧画面」をクリックし「セッション一覧画面」を表示します。
追加したトピックに対応するセッションがステータスが RUNNING として表示されます。
これでトピックの登録とセッションの開始が終わりました。
7.3.5. メッセージのフォーマット¶
次に IMBoxのカンパニーボックスに投稿するメッセージをフォーマットするユーザ定義タスクを作成します。作成するのは JavaScript 定義です。
intra-mart Accel Platformにテナント管理者またはLogicDesigner管理者でログインします。
「サイトマップ」→「LogicDesigner」→「JavaScript定義新規作成」から、「JavaScript定義編集」を開きます。
入力値を以下のように指定します。
「スクリプト」を以下のように変種します。
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 }; }
その他の項目は以下のように入力してください。
ユーザ定義ID Format ユーザ定義名 Format ユーザカテゴリID SampleCategory
「登録」ボタンをクリックします。
確認ダイアログで「OK」ボタンをクリックします。
ユーザ定義一覧が表示され、作成したユーザ定義が表示されます。
これで メッセージをフォーマットするためのユーザ定義タスクの作成は終了です。
7.3.6. フロー定義作成¶
次に IM-LogicDesignerのフロー定義を作成します。
「サイトマップ」→「LogicDesigner」→「フロー定義」を開きます。
「新規作成」リンクをクリックし、「ロジックフロー定義編集」画面を表示します。
「入出力設定」リンクをクリックし、「入力」に次のような項目を追加し、「決定」ボタンをクリックします。
「定数設定」リンクをクリックし、次のような項目を追加し、「決定」ボタンをクリックします。
ロジックフロー定義編集画面のデザイナに、先ほど作成した「Format」と「分岐」「カンパニーボックスへ投稿」タスクを追加し、以下のように接続します。
「分岐」タスクをクリックします。
「条件式(EL式)」に ${$input.topicName==’SampleLeadTopic’} と入力します。
「Format」タスクをクリックし、「マッピング設定」ボタンをクリックします。
「入力」の Name から Website までと、「Format」の同じキー名の項目とを紐づけ、「決定」ボタンをクリックします。
「カンパニーボックスへ投稿」タスクをクリックし、「マッピング設定」ボタンをクリックします。
「Format」を追加した上で、「Format」の message と、「カンパニーボックスに投稿」の message を、「定数」の companyCd, postUserCd と 「カンパニーボックスへ投稿」の同じキー名の項目とを紐づけ、「決定」ボタンをクリックします。
「新規保存」リンクをクリックし、新規保存ダイアログを表示します。ダイアログに次のような内容を入力し「決定」ボタンをクリックします。
フロー定義ID PostToCompanyBox フロー定義名 標準 PostToCompanyBox フローカテゴリID SampleCategory 「確認」ダイアログで「決定」ボタンをクリックします。
「ロジックフロー定義一覧」画面に遷移します。作成した「Expenes」フローが表示されていることを確認できます。
これで IM-LogicDesignerのフロー定義の作成が終わりました。
7.3.7. IM-LogicDesignerフロートリガ作成¶
次に IM-LogicDesignerのフロートリガを作成します。
「サイトマップ」→「LogicDesigner」→「トリガ定義一覧」を開きます。
「新規作成」リンクをクリックし、「トリガ定義編集」画面を表示します。
トリガ発生条件の「Salesforce Streaming」欄の「監視対象オブジェクトのレコード作成」を選択します。
トリガ発生時に実行するフローの「対象フロー」欄の「検索」リンクをクリックします。
「ロジックフロー定義検索」ダイアログで「PostToCompanyBox」を選択し「決定」ボタンをクリックします。
「マッピング設定」ボタンが有効になるので、「マッピング設定」ボタンをクリックします。
「fields」に以下のキーを追加して、「PostToCompanyBox」の同名のキーと、topicName と 「PostToCompanyBox」の topicName を紐付け、「決定」ボタンをクリックします。
その他の項目は以下のように入力してください。
トリガ定義ID CreateSalesforceRecord トリガ定義名 CreateSalesforceRecord 「登録」ボタンをクリックします。
確認ダイアログで「OK」ボタンをクリックします。
トリガ定義一覧が表示され、作成したフロートリガ定義が表示されます。
これで IM-LogicDesignerのフロートリガの作成が終わりました。
7.3.8. 動作確認¶
最後に動作確認を行います。 Salesforceのリードに新しいレコードを作成すると IMBoxへその内容が投稿されることを確認します。
Salesforceにログインし、「Expense」タブをクリックします。
「リード」リンクをクリックします。
「新規」ボタンをクリックします。
必要な情報を入力、選択し、「保存」ボタンをクリックします。ここでは以下のような情報入力しました。
姓 サンプル 名 一郎 会社名 XXXカンパニー 役職 課長 電話 03-1234-5678 メール sample.ichiro@xxx.company.co.jp Webサイト http://www.xxx.company.co.jp 「サンプル 一郎」画面が表示され、 Salesforce にデータが登録されたことがわかります。
最後に IMBoxに投稿されたかどうかを確認します。
intra-mart Accel Platformにユーザ tenant でログインします。
グローバルナビから IMBoxをクリックし、 IMBoxを開きます。
先ほど Salesforceに登録した情報が IMBoxに投稿されていることがわかります。
以上で Salesforceに新規リードが登録されたら、 IMBoxのカンパニーボックスにその内容が通知されるという一連の流れが確認できました。
7.3.9. まとめ¶
以上で Salesforce Streaming クライアント のチュートリアルは全て完了です。
これまでのチュートリアルを通して、以下のことを学びました。
- Salesforce で PushTopic を登録する方法
- Salesforceのデータの変更通知を intra-mart Accel Platformで受信する方法
- IM-Propagation が変更通知を伝播すること
- 受信した変更通知を入力値として IM-LogicDesignerのフローを実行する方法