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

Copyright © 2016 NTT DATA INTRAMART CORPORATION

↑Top

1

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

目次
1. 改訂情報
2. はじめに2.1. 本書の目的
2.2. 対象読者
2.3. サンプルコードについて
2.4. 本書の構成
3. 概要
3.1. Salesforce 連携とは
3.2. Salesforce 連携の全体像と、本チュートリアルガイドの説明範囲
3.3. チュートリアルの準備
4. Salesforceオブジェクトのレコード操作
4.1. チュートリアル
4.1.1. ゴールの説明
4.1.2. 準備
4.1.3. カスタムオブジェクトの作成
4.1.4. レコードの登録
4.1.5. レコードの取得
4.1.6. レコードの更新
4.1.7. レコードの削除
4.1.8. まとめ
5. SOQLによるレコードの検索
5.1. チュートリアル
5.1.1. ゴールの説明
5.1.2. 準備
5.1.3. レコードの検索
5.1.4. まとめ
6. Salesforce バッチ定義新規作成
6.1. チュートリアル
6.1.1. ゴールの説明
6.1.2. 準備
6.1.3. レコード「雑誌」の編集
6.1.4. CSV ファイルの作成
6.1.5. CSV ファイルの読み込み
6.1.6. バッチでのレコード Upsert
6.1.7. まとめ
7. Salesforce Streaming クライアント
7.1. Salesforce Streaming クライアント概要
7.2. アーキテクチャ
7.3. チュートリアル
7.3.1. ゴールの説明
7.3.2. 準備
7.3.3. PushTopicの登録
7.3.4. トピック登録
7.3.5. メッセージのフォーマット
7.3.6. フロー定義作成
7.3.7. IM-LogicDesignerフロートリガ作成
7.3.8. 動作確認
7.3.9. まとめ
8. 付録
8.1. 主要クラスとシーケンス
8.1.1. Salesforce連携
8.1.2. Salesforce Streaming クライアント

2intra-mart Accel Platform — Salesforce 連携チュートリアルガイド 第2版 2021-04-01
8.1.3. アクセストークンの流れ
8.1.4. 処理の流れ
8.2. Salesforce Streaming クライアントの動作仕様概要
8.2.1. Salesforce Streaming クライアント
8.2.2. 状態遷移3

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

改訂情報
変更年月日

変更内容

2016-08-01

初版

2021-04-01

第2版 以下を変更しました。
IM-LogicDesignerの「ロジックフロー定義一覧」画面の項目名変更に伴いドキュメント内の文言、および、キャプチャを変更

4

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

はじめに
本書の目的
本書は、Salesforce 連携を利用してビジネスロジックの開発を始める開発者のみなさまの支援を目的としたドキュメントです。

対象読者
本書では次の開発者を対象としています。
Salesforce 連携による開発の一連の流れを知りたい
Salesforce 連携を利用してビジネスロジックを開発したい
なお、本書では次の内容を理解していることが必須となります。
IM-LogicDesignerを理解している。
Salesforceを理解している。
また、次のドキュメントを読了し、Salesforceの設定が完了していることも必須となります。
Salesforce 連携セットアップガイド

サンプルコードについて
本書に掲載されているサンプルコードは可読性を重視しており、性能面や保守性といった観点において必ずしも適切な実装ではありません。
開発においてサンプルコードを参考にされる場合には、上記について十分に注意してください。

本書の構成
本書は次の構成となっています。

概要
本書、および、Salesforce 連携の概要について説明します。
Salesforceオブジェクトのレコード操作
カスタムオブジェクトのレコードを操作する方法を説明します。
SOQLによるレコードの検索
SOQLを利用してオブジェクトのレコードを参照する方法を説明します。
Salesforce バッチ定義新規作成
Salesforce Bulk API を使用したジョブ、バッチの操作について説明します。
Salesforce Streaming クライアント
Salesforce Streaming API を使用した情報連携の方法について説明します。

付録
上記の章では触れていない補足事項です。

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

概要
Salesforce 連携とはSalesforce 連携の全体像と、本チュートリアルガイドの説明範囲
チュートリアルの準備

Salesforce 連携とはSalesforce 連携とは、 intra-mart Accel Platformと Salesforceを連携させる機能です。
Salesforce 連携の特徴は以下の通りです。
Salesforce連携
Salesforceオブジェクト操作定義
Salesforceオブジェクトのレコード作成、取得、更新、削除を行えます。
SalesforceSOQL 定義
SOQL を記述することで Salesforce データを検索することができます。
Salesforceバッチ定義
SalesforceBulk API を利用することで大量データの読み込みや削除などを行えます。
Bulk API ジョブの作成 タスクなどと組み合わせて使用します。
Salesforce Streaming クライアント
SOQL で定義した条件に基づいて Salesforceのデータの変更を intra-mart Accel Platformへ通知することができます。
このチュートリアルガイドでは上記概要の順に、実際の操作方法や実行までの手順を開発者の皆様へ紹介します。

Salesforce 連携の全体像と、本チュートリアルガイドの説明範囲
Salesforce 連携の全体像と、各機能に対する本チュートリアルガイドの説明範囲を以下に示します。

6

intra-mart Accel Platform — Salesforce 連携チュートリアルガイド 第2版 2021-04-01
本書では吹き出しの番号に対応する次のようなチュートリアルを用意しています。
1. Salesforceオブジェクトのレコード操作
Salesforceでカスタムオブジェクトを作成する
オブジェクトのレコードを操作するユーザ定義の作成
2. SOQLによるレコードの検索
SOQL クエリの発行による Salesforceのレコード検索
3. Salesforce バッチ定義新規作成
Salesforceに対するバッチ処理の登録
4. Salesforce Streaming クライアント
Salesforceからのプッシュ通知受信
認証に関しては本書では特に取り上げません。認証の詳細は「 Salesforce 連携セットアップガイド 」を参照してください。 また、 IMLogicDesignerについても詳細は取り上げません。 IM-LogicDesignerの詳細は「 IM-LogicDesigner仕様書 」を参照してください。
Salesforceの API についてはそれぞれのチュートリアルの先頭で参考となる URL を示しています。 詳細はそれぞれの URL を参照してください。

チュートリアルの準備
このチュートリアルガイドに書かれているチュートリアルを行うにはいくつかの準備が必要です。
Salesforceの設定が行われていること
intra-mart Accel Platformと Salesforceとの接続設定が行われていること
IM-LogicDesignerのフローカテゴリ、ユーザ定義カテゴリが少なくとも一つは作成済みであること
チュートリアルの中では SampleCategory というカテゴリを使用します。
これらの準備が行われていることを確認してください。
また、チュートリアルを進める上で Salesforceに相応の権限を持つユーザでログインしてください。
intra-mart Accel Platformにはテナント管理者またはLogicDesigner管理者でログインしてください。

7

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

Salesforceオブジェクトのレコード操作
チュートリアルゴールの説明準備
カスタムオブジェクトの作成
レコードの登録
レコードの取得
レコードの更新
レコードの削除
まとめ

チュートリアル
このチュートリアルが終了すると、次のような事ができます。
Salesforce でカスタムオブジェクトを作成する。
オブジェクトのレコードを操作する。
登録
参照
更新
削除
Salesforce でレコードを確認する
カスタムオブジェクトの詳細は次の URL を参照してください。
カスタムオブジェクト (日本語)Custom Objects (English)
自定

象 (中文)

ゴールの説明このチュートリアルでは、簡単な経費管理オブジェクトの操作を行います。
1. カスタムオブジェクトの作成
操作対象のオブジェクトを作成します。
2. レコードの登録
レコードを登録するユーザ定義タスクを作成します。
動作確認のためのフロー定義を作成します。
動作確認を行います。
3. レコードの取得
レコードを取得するユーザ定義タスクを作成します。
動作確認のためのフロー定義を作成します。
動作確認を行います。
4. レコードの更新
レコードを更新するユーザ定義タスクを作成します。
動作確認は次章で行います。
5. レコードの削除
レコードを削除するユーザ定義タスクを作成します。
動作確認は次章で行います。
このような順番で経費管理オブジェクトの作成と、 Salesforce オブジェクトのレコード操作の操作方法や作業の流れを説明します。

8

intra-mart Accel Platform — Salesforce 連携チュートリアルガイド 第2版 2021-04-01
準備チュートリアルの準備 に書かれている準備が行われていることを確認してください。

カスタムオブジェクトの作成
Salesforce 上でカスタムオブジェクトを作成します。
1. 「設定」から「クイック検索」に「オブジェクト」と入力し、「作成」配下の「オブジェクト」リンクをクリックします。

2. 「カスタムオブジェクト」画面が表示されるので「新規カスタムオブジェクト」ボタンをクリックします。

3. 「表示ラベル」「オブジェクト名」「レコード名」 に「Expense」と入力し、「保存ボタン」をクリックします。

9

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

4. 「Expense」の詳細画面が表示されます。

5. 「Expense」の詳細画面で、「カスタム項目＆リレーション」欄の「新規」ボタンをクリックし、次のカスタム項目を追加します。
外部データ型

項目表示ラベル

数値 (16, 2)

Amount (金額)

テキスト (20)Client (クライアント)

日付/時間

Date (日付)

チェックボックス

Reimbursed (払い戻し済み)

テキスト (20)MatterNumber（案件番号）

ID

✓

10

intra-mart Accel Platform — Salesforce 連携チュートリアルガイド 第2版 2021-04-01
コラム
MatterNumber を外部IDとして使用できるように設定します。
後述の Salesforce バッチ定義新規作成 で使用しますので忘れずに「外部ID」のチェックボックスにチェックを入れてください。
6. 「Expense」レコードを表示するため、カスタムオブジェクトタブを作成します。
1. 「設定」 から、「クイック検索」 ボックスに「タブ」と入力し、「タブ」 を選択します。

2. 「カスタムタブ」で、「新規」ボタンをクリックして「新規カスタムタブ」ウィザードを起動します。
「オブジェクト」で、「Expense」を選択します。
「タブスタイル」 でルックアップアイコンをクリックし、クレジットカードアイコンを選択します。

3. 残りの項目はデフォルト値のままで、「次へ」をクリックします。
4. 「次へ」 および 「保存」 をクリックして、タブの作成を終了します。
5. これで「Expense」タブが画面上部に表示されます。
これでカスタムオブジェクトの作成が完了です。

レコードの登録
次に、 IM-LogicDesignerのユーザ定義タスクを作成します。作成するのは Salesforceオブジェクト操作定義 です。
後述の「操作」を「CREATE」として作成することで Salesforceのレコードの登録を行うようにします。

オブジェクト操作定義の作成
1. intra-mart Accel Platformにテナント管理者またはLogicDesigner管理者でログインします。
2. 「サイトマップ」→「LogicDesigner」→「 Salesforceオブジェクト操作定義新規作成」から、「 Salesforceオブジェクト操作定義編集」を開きます。

11

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

3. Salesforceへ接続するクライアントIDを選択します。ここでは default を選択していますが、ご自分の環境にあったものを選択してください。

4. 「オブジェクト検索」リンクをクリックし、「オブジェクト検索」ダイアログを表示します。

5. 「絞り込み」に「exp」と入力し「検索」ボタンをクリックします。

12

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

コラム
絞り込み検索は大文字小文字の区別なく、部分一致検索を行います。
6. 一覧に表示された「Expense」の行のチェックボックスにチェックを入れ「決定」ボタンをクリックします。

7. その他の項目は以下のように入力してください。
ユーザ定義ID

CreateExpense

ユーザ定義名CreateExpense

ユーザカテゴリID SampleCategory
操作

CREATE

外部IDを使用する 非選択
8. 「登録」ボタンをクリックします。
9. 確認ダイアログで「OK」ボタンをクリックします。
10. ユーザ定義一覧が表示され、作成したユーザ定義が表示されます。

13

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

これで Salesforce オブジェクト操作定義の作成は終了です。

フロー定義の作成
続いてフロー定義の作成を行います。
11. 「サイトマップ」→「LogicDesigner」→「フロー定義一覧」を開きます。

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

14

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

13. 「入出力設定」リンクをクリックし、「入力」に次のような項目を追加し、「決定」ボタンをクリックします。
キー名

型

Name

stringAmountdoubleClientstringDatestringReimbursed

booleanMatterNumber string

14. ロジックフロー定義編集画面のデザイナに、先ほど作成した「CreateExpense」タスクを追加し、「開始」「終了」と接続します。

15

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

15. 「CreateExpense」タスクをクリックし、「マッピング設定」ボタンをクリックします。

16. 「入力」の各項目と、「CreateExpense」の各項目を紐づけ、「決定」ボタンをクリックします。

16

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

17. 「新規保存」リンクをクリックし、新規保存ダイアログを表示します。ダイアログに次のような内容を入力し「決定」ボタンをクリックします。
フロー定義ID

Expense

フロー定義名 標準 Expense
フローカテゴリID SampleCategory

18. 「確認」ダイアログで「決定」ボタンをクリックします。
19. 「ロジックフロー定義一覧」画面に遷移します。ツリー内のカテゴリ「SampleCategory」を展開することで、作成した「Expenes」
フローが表示されていることを確認できます。

17

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

これでフロー定義の作成が終了です。

動作確認
最後に動作確認を行います。 IM-LogicDesignerのデバッグ機能を使ってフローを実行し、 Salesforceにレコードが作成することを確認します。
20. 「Expense」フローを選択後に「編集」ボタンをクリックします。

21. 「ロジックフロー定義編集」画面の「デバッグ」リンクをクリックします。

18

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

22. 「ロジックフロー定義のデバッグ」画面の「実行」リンクをクリックします。

23. 「デバッグの実行」ダイアログが表示されるので、次のように入力し「実行」ボタンをクリックし、「確認」ダイアログで「決定」ボタンをクリックします。
Name

文房具

Amount100

Client

XX文具店

Date

2016-08-01T10:08:00.000+09:00

Reimbursed

false

19

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

24. 「フローの実行が正常終了しました。」とメッセージが表示されます。

これで Salesforceに入力した情報のレコードが作成されました。
本当に作成されたかどうかを確認します。
25. Salesforceにログインし、「Expense」タブをクリックします。

20

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

26. 「ビュー：すべて選択」の「Go!」ボタンをクリックします。

27. 「すべて選択」画面の「文房具」リンクをクリックします。

28. 「文房具」画面が表示され、フローのデバッグ画面で入力した値でレコードが作成されていることを確認できます。

以上で Salesforce のカスタムオブジェクト、 Salesforceオブジェクト操作定義の作成を行い、 IM-LogicDesignerのフロー定義の実行を通じて Salesforceのレコードを作成できました。

21

intra-mart Accel Platform — Salesforce 連携チュートリアルガイド 第2版 2021-04-01
コラム
オブジェクトとして「ドキュメント」を指定すると Salesforceのファイルを扱うことができます。
「ドキュメント」の「Body」にパブリックストレージやセッションスコープストレージのファイルの内容を セットしてレコードの登録を行うと Salesforceにファイルをアップロードすることができます。 ただし「Body」の型は string なので Base64 のエンコード関数を利用してバイナリデータを文字列に変換する必要があります。
なお「ドキュメント」オブジェクトのレコードを取得しても、「Body」にバイナリデータは含まれません。 「Body」にはバイナリデータを取得できる URL がセットされるので、その URL にアクセスしてファイルをダウンロードしてください。

レコードの取得
次に、 レコードを参照する IM-LogicDesignerのユーザ定義タスクを作成します。作成するのは Salesforce オブジェクト操作定義 です。
「操作」を「READ」として作成することで Salesforceのレコードの取得を行うようにします。

オブジェクト操作定義の作成
レコードの登録 の 1 から 6 までの手順を繰り返してください。
1. その他の項目は以下のように入力してください。
ユーザ定義ID

ReadExpense

ユーザ定義名ReadExpense

ユーザカテゴリID SampleCategory
READ

操作

外部IDを使用する 非選択
2. 返却値から不要な項目を削除します。次の項目を選択し、「削除」リンクをクリックします。項目の前に×アイコンが付くことを確認します。
IsDeleted
CreatedDate
CreatedById
LastModifiedDate
LastModifiedById
SystemModstamp
LastViewedDate
LastReferencedDate

コラム
これは SQL で SELECT 文の列名を指定する事に相当します。×アイコンが付いていない項目を選択します。

22

intra-mart Accel Platform — Salesforce 連携チュートリアルガイド 第2版 2021-04-01
コラム
Shiftキーを押しながら項目をクリックすると範囲選択が、Ctrlキーを押しながら項目をクリックすると複数選択ができます。
3. 「登録」ボタンをクリックします。
4. 確認ダイアログで「OK」ボタンをクリックします。
5. ユーザ定義一覧が表示され、作成したユーザ定義が表示されます。

これで Salesforce オブジェクト操作定義の作成は終了です。

フロー定義の作成
続いてフロー定義の作成を行います。
今回は レコードの登録 で作成したフローに、ユーザ定義を追加します。
6. 「サイトマップ」→「LogicDesigner」→「フロー定義一覧」を開きます。

7. 「Expense」フローを選択後に「編集」ボタンをクリックします。

23

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

8. ロジックフロー定義編集画面のデザイナに、先ほど作成した「ReadExpense」タスクを追加し、「CreateExpense」「終了」と接続します。

9. 「ReadExpense」タスクをクリックし、「マッピング設定」ボタンをクリックします。

24

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

10. 「CreateExpense1」を入力に追加し、CreateExpense1/id と ReadExpense1/id を紐づけ、「決定」ボタンをクリックします。

11. 「保存」リンクをクリックし、保存ダイアログを表示します。ダイアログに次のような内容を入力し「決定」ボタンをクリックします。
保存方法

新しいバージョン番号(2)を追加して保存する

フロー定義名 標準

ExpenseフローカテゴリID

SampleCategory

25

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

12. 「確認」ダイアログで「決定」ボタンをクリックします。
13. 「ロジックフロー定義一覧」画面に遷移します。作成した「Expenes」フローが表示されていることを確認できます。

これでフロー定義の作成が終了です。

動作確認
最後に動作確認を行います。 IM-LogicDesignerのデバッグ機能を使ってフローを実行し、指定した情報が取得できることを確認します。
14. 「Expense」フローを選択後に「編集」ボタンをクリックします。

26

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

15. 「ロジックフロー定義編集」画面の「デバッグ」リンクをクリックします。

16. 「ロジックフロー定義のデバッグ」画面の「実行」リンクをクリックします。

27

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

17. 「デバッグの実行」ダイアログが表示されるので、次のように入力し「実行」ボタンをクリックし、「確認」ダイアログで「決定」ボタンをクリックします。
Name

雑誌

Amount980

Client

XXブックスDate

2016-08-01T13:42:00.000+09:00

Reimbursed

false

MatterNumber

null

28

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

18. 「フローの実行が正常終了しました。」とメッセージが表示されます。

19. 「フロー定義の変数情報」の中から「ReadExpense1」を探して確認するとユーザ定義を作成した際に指定した項目が取得できている
ことがわかります。

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

以上でレコードを取得するための Salesforceオブジェクト操作定義の作成を行い、 IM-LogicDesignerのフロー定義の実行を通じてSalesforceのレコードを取得することができました。

レコードの更新
次に、 レコードを更新する IM-LogicDesignerのユーザ定義タスクを作成します。作成するのは Salesforce オブジェクト操作定義 です。
「操作」を「UPDATE」として作成することで Salesforceのレコードの更新を行うようにします。

オブジェクト操作定義の作成
レコードの登録 の 1 から 6 までの手順を繰り返してください。
1. その他の項目は以下のように入力してください。
ユーザ定義ID

UpdateExpense

ユーザ定義名UpdateExpense

ユーザカテゴリID SampleCategory
操作

UPDATE

外部IDを使用する 非選択
2. 入力値から不要な項目を削除します。次の項目を選択し、「削除」リンクをクリックします。項目の前に×アイコンが付くことを確認します。
OwnerId
Name
Amount__c
Client__c
Date__c

3. 「登録」ボタンをクリックします。
4. 確認ダイアログで「OK」ボタンをクリックします。
5. ユーザ定義一覧が表示され、作成したユーザ定義が表示されます。

30

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

以上でレコードを更新するための Salesforceオブジェクト操作定義の作成ができました。実際の動作確認は、SOQLによるレコードの検索 の章で行います。

レコードの削除
最後に、レコードを削除する IM-LogicDesignerのユーザ定義タスクを作成します。作成するのは Salesforce オブジェクト操作定義 です。
「操作」を「DELETE」として作成することで Salesforceのレコードの削除を行うようにします。

オブジェクト操作定義の作成
レコードの登録 の 1 から 6 までの手順を繰り返してください。
1. その他の項目は以下のように入力してください。
ユーザ定義ID

DeleteExpense

ユーザ定義名DeleteExpense

ユーザカテゴリID SampleCategory
操作

DELETE

外部IDを使用する 非選択
2. 「登録」ボタンをクリックします。
3. 確認ダイアログで「OK」ボタンをクリックします。
4. ユーザ定義一覧が表示され、作成したユーザ定義が表示されます。

31

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

以上でレコードを削除するための Salesforceオブジェクト操作定義の作成ができました。実際の動作確認は、SOQLによるレコードの検索 の章で行います。

まとめ
以上で Salesforceオブジェクトのレコード操作 のチュートリアルは全て完了です。
これまでのチュートリアルを通して、以下のことを学びました。
Salesforce でカスタムオブジェクトを作成する。
オブジェクトのレコードを操作する。
登録
参照
更新
削除
Salesforce でレコードを確認する
次章 SOQLによるレコードの検索 では、SOQL クエリを発行し、 Salesforce のレコードを検索するチュートリアルを用意しています。
この章では動作確認を行わなかった レコードの更新 と レコードの削除 で作成したユーザ定義を使用するフロー定義を作成します。

32

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

SOQLによるレコードの検索
チュートリアルゴールの説明準備
レコードの検索まとめ

チュートリアル
このチュートリアルが終了すると、次のような事ができます。
SOQL クエリを発行し、Salesforce のレコードを検索する
SOQL クエリの詳細は次の URL を参照してください。
Force.com SOQL および SOSL リファレンス - Salesforce Object Query Language (SOQL) (日本語)Force.com SOQL and SOSL Reference - Salesforce Object Query Language (SOQL) (English)

ゴールの説明このチュートリアルでは、Salesforceオブジェクトのレコード操作 で作成した Expense オブジェクトを Name で検索し、そのレコードを更新し、Reimbursed（支払い済み）が true であればレコードを削除する、というフローを作成します。

準備
チュートリアルの準備 に書かれている準備が行われていることを確認してください。
また、Salesforceオブジェクトのレコード操作 のチュートリアルが終了していることを確認してください。

レコードの検索IM-LogicDesignerのユーザ定義タスクを作成します。作成するのは SalesforceSOQL定義 です。
1. intra-mart Accel Platformにテナント管理者またはLogicDesigner管理者でログインします。
2. 「サイトマップ」→「LogicDesigner」→「ユーザ定義」→「Salesforce SOQL定義新規作成」から、「 SalesforceSOQL定義編集」
を開きます。

3. Salesforceへ接続するクライアントIDを選択します。ここでは default を選択していますが、ご自分の環境にあったものを選択してく
ださい。

33

intra-mart Accel Platform — Salesforce 連携チュートリアルガイド 第2版 2021-04-01
4. 「バージョン一覧取得」リンクをクリックし、「バージョン」一覧を取得します。「バージョン」一覧の中から使用する「バージョン」
を選択します。ここでは「37.0 - Summer‘16」を選択しています。

5. 「入力値」を以下のように設定します。
name <string>
nextRecordsUrl <string>

6. 「返却値」を以下のように設定します。
records <object[]>
Id <string>
Name <string>Amount__c <double>
Id <string>
Client__c <string>
Date__c <date>
Reimbursed__c <boolean>
MatterNumber__c <string>
totalSize <integer>
done <boolean>
nextRecordsUrl <string>

コラム
records に追加するキーは次の SOQL クエリの列名です。
7. 「クエリ」に以下のように入力します。

34

intra-mart Accel Platform — Salesforce 連携チュートリアルガイド 第2版 2021-04-01
SELECT
Id, Name, Amount__c, Client__c, Date__c, Reimbursed__c, MatterNumber__c
FROM
Expense__c
WHERE
Name LIKE /*name*/'dummy'
ORDER By Id ASC

コラム
SOQL のユーザ定義タスクは、SQL のユーザ定義タスクと異なりテスト実行ができません。 Salesforceで正常に動作することを確認した SOQL をこのユーザ定義タスクに指定します。 Salesforceで SOQL の動作を確認するにはいくつかの方法があります。
1. 「開発者コンソール」の “Query Editor” を利用する
2. “workbench” の “SOQL Query” を利用する
これらの方法を利用して動作を確認した SOQL を指定してください。
7. その他の項目は以下のように入力してください。
ユーザ定義ID

SearchExpense

ユーザ定義名SearchExpense

ユーザカテゴリID SampleCategory
9. 「登録」ボタンをクリックします。
10. 確認ダイアログで「OK」ボタンをクリックします。
11. ユーザ定義一覧が表示され、作成したユーザ定義が表示されます。

図：ユーザ定義一覧

35

intra-mart Accel Platform — Salesforce 連携チュートリアルガイド 第2版 2021-04-01
12. 「サイトマップ」→「LogicDesigner」→「フロー定義一覧」を開きます。

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

14. 「入出力設定」リンクをクリックし、「入力」に次のような項目を追加し、「決定」ボタンをクリックします。
キー名

型

name

stringReimbursed boolean

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

15. ロジックフロー定義編集画面のデザイナに、先ほど作成した「SearchExpense」タスクと、レコードの更新 と レコードの削除 で作成した「UpdateExpense」「DeleteExpense」、「分岐」「繰り返し」を追加し、下の画像のように接続します。

16. 「SearchExpense」タスクをクリックし、「マッピング設定」ボタンをクリックします。

37

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

17. 「入力」の name と、「SearchExpense1」の name を紐づけ、「決定」ボタンをクリックします。

18. 「繰り返し開始」タスクをクリックし、繰り返し対象の「選択」リンクをクリックします。

38

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

19. 「SearchExpense1/records」をクリックし、「決定」ボタンをクリックします。

20. 「UpdateExpense」タスクをクリックし、「マッピング設定」ボタンをクリックします。

39

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

21. 「im_startLoop1」を追加した上で、「入力」の Reimbursed と UpdateExpense1/body/Reimbursed__c 、
im_startLoop1/item/id と UpdateExpense1/id を紐づけ、「決定」ボタンをクリックします。

22. 「ReadExpense」タスクをクリックし、「マッピング設定」ボタンをクリックします。

40

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

23. 「im_startLoop1」を追加した上で、im_startLoop1/item/id と ReadExpense1/id を紐づけ、「決定」ボタンをクリックします。

24. 「分岐」タスクをクリックします。

41

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

25. 「条件式（EL式）」に ${ReadExpense1.Reimbursed__c==true} と入力します。

26. 「DeleteExpense」タスクをクリックし、「マッピング設定」ボタンをクリックします。

42

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

27. 「im_startLoop1」を追加した上で、im_startLoop1/item/id と DeleteExpense1/id を紐づけ、「決定」ボタンをクリックします。

28. 「新規保存」リンクをクリックし、新規保存ダイアログを表示します。ダイアログに次のような内容を入力し「決定」ボタンをクリックします。
フロー定義ID

UpdateExpense

フロー定義名 標準 UpdateExpense
フローカテゴリID SampleCategory

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

29. 「確認」ダイアログで「決定」ボタンをクリックします。
30. 「ロジックフロー定義一覧」画面に遷移します。作成した「UpdateExpense」フローが表示されていることを確認できます。

これでフロー定義の作成が終了です。
最後に動作確認を行います。 IM-LogicDesignerのデバッグ機能を使ってフローを実行し、 Salesforceのレコードが更新、削除されることを確認します。
31. 「UpdateExpense」フローを選択後に「編集」ボタンをクリックします。

44

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

32. 「ロジックフロー定義編集」画面の「デバッグ」リンクをクリックします。

33. 「ロジックフロー定義のデバッグ」画面の「実行」リンクをクリックします。

45

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

34. 「デバッグの実行」ダイアログが表示されるので、次のように入力し「実行」ボタンをクリックし、「確認」ダイアログで「決定」ボタンをクリックします。
name

文房具

Reimbursed true

35. 「フローの実行が正常終了しました。」とメッセージが表示されます。

46

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

Reimbursed を true として更新したので、 Salesforce上のレコードが削除されました。
本当に削除されたかどうかを確認します。
36. Salesforceにログインし、「Expense」タブをクリックします。

37. 「ごみ箱」リンクをクリックします。

47

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

38. 「ごみ箱」画面に「文房具」の行が表示されているのがわかります。

以上で Salesforceのレコード検索と、オブジェクトの更新、削除が行えました。

まとめ
以上で SOQLによるレコードの検索 のチュートリアルは全て完了です。
これまでのチュートリアルを通して、以下のことを学びました。
SOQL クエリを発行し、Salesforce のレコードを検索する
次章 Salesforce バッチ定義新規作成 では、大量データを登録するチュートリアルを用意しています。

48

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

Salesforce バッチ定義新規作成
チュートリアルゴールの説明準備
レコード「雑誌」の編集
CSV ファイルの作成
CSV ファイルの読み込み
バッチでのレコード Upsert
まとめ

チュートリアル
このチュートリアルが終了すると、次のような事ができます。
Salesforce に対して大量データの処理を行う
InsertUpdateDeleteHardDelete
Upsert
大量データの処理を行うのに Salesforce Bulk API を利用します。
Salesforce Bulk API の詳細は次の URL を参照してください。
Salesforce Bulk API 開発者ガイド (日本語)
Bulk API Developer Guide (English)

ゴールの説明このチュートリアルでは、Salesforceオブジェクトのレコード操作 で作成した経費管理オブジェクトの大量データUpsert（登録または更新）を行います。
1. SOQLによるレコードの検索 までに作成したレコード「雑誌」に外部IDを指定します。
2. Salesforceへ登録・更新するデータを、CSV ファイルとしてパブリックストレージに配置します。
3. IM-LogicDesignerのフローでは、CSV ファイルを読み込み1行毎にバッチをジョブに登録します。
4. バッチを登録し終わったらジョブを終了し、ジョブやバッチの情報を取得する、という処理を行います。

コラム
大量データと謳っていますが、このチュートリアルでは5件だけ処理を行います。これはリソースの浪費を押さえるためです。

コラム
このチュートリアルでは、サンプルのため CSV ファイルを1行毎にバッチとしてジョブに登録していますが、CSV ファイルの各行を追加したオブジェクト配列をバッチ定義にマッピングすれば1つのバッチで大量データを連携することができます。
また、Salesforce Bulk API では、1日に送信可能なバッチ数や1つのバッチで送信可能な件数などの制限があります。
Salesforce Bulk API の制限については次の URL を参照してください。
Bulk API の制限 (日本語)
Bulk API Limits (English)

準備49

intra-mart Accel Platform — Salesforce 連携チュートリアルガイド 第2版 2021-04-01
チュートリアルの準備 に書かれている準備が行われていることを確認してください。
また、Salesforceオブジェクトのレコード操作 と SOQLによるレコードの検索 のチュートリアルが終了していることを確認してください。
特に カスタムオブジェクトの作成 で「MatterNumber」に「外部ID」が指定されていることを確認してください。指定されていない場合、レ
コードの更新ではなくレコードの追加が行われてしまいます。

レコード「雑誌」の編集
Upsert は指定した外部IDを持つレコードが存在しなければレコードの登録を、存在すればレコードの更新を行う、という処理です。
これまでのチュートリアルで作成したレコード「雑誌」に外部IDをセットし、更新対象とします。
1. Salesforceにログインし、「Expense」タブをクリックします。

2. 「ビュー：すべて選択」の「Go!」ボタンをクリックします。

3. 「雑誌」リンクをクリックします。

50

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

4. 「編集」ボタンをクリックします。

5. 「MatterNumber」に「00002」と入力し、「保存」ボタンをクリックします。

以上でレコード「雑誌」を更新対象にできました。

CSV ファイルの作成
Salesforceへ登録するデータファイルを作成します。
以下の内容の CSV ファイルを作成し、パブリックストレージのルートに sample.csv として配置してください。
"昼食","500", "XXストア", "20160801T12:00:00.000+09:00", "00001""はがき", "80", "YY商店","20160801T18:00:00.000+09:00", "00002""夕食","1080", "ABC Co.", "20160801T19:00:00.000+09:00", "00003""書籍","1980", "XXブックス", "20160801T20:00:00.000+09:00", "00004""タクシー", "2000", "ZZタクシー", "20160801T21:00:00.000+09:00", "00005"

51

intra-mart Accel Platform — Salesforce 連携チュートリアルガイド 第2版 2021-04-01
ここでは以下のような設定で作成したこととします。
文字コード

UTF-8

行の終端文字列 LF

レコード「雑誌」の編集 でレコード「雑誌」の MatterNumber を 00002 に修正しました。
従いまして、レコード「雑誌」は同じ MatterNumber を持つレコード「はがき」に更新されます。

CSV ファイルの読み込み先ほど作成した CSV ファイルをフローの中で読み込むため、IM-LogicDesignerのユーザ定義タスクを作成します。作成するのはCSV Fetch
定義です。
1. intra-mart Accel Platformにテナント管理者またはLogicDesigner管理者でログインします。
2. 「サイトマップ」→「LogicDesigner」→「CSV Fetch定義新規作成」から、「CSV Fetch定義編集」を開きます。

3. 「返却値」に次のような項目を追加してください。
キー名

型

Name

stringAmountdoubleClientstringDate

date

MatterNumber string

4. その他の項目は以下のように入力してください。
ユーザ定義ID

CSV_Fetch

ユーザ定義名CSV_Fetch

ユーザカテゴリID

SampleCategory

文字コード

UTF-8

引用文字

“

52

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

その他（,）

行の終端文字

LF

ヘッダー行をスキップする

非選択

返却値と列数が一致しない場合エラーにする 非選択
文字コードや行の区切り文字は CSV ファイルを作成したときのものを指定してください。
5. 「登録」ボタンをクリックします。
6. 確認ダイアログで「OK」ボタンをクリックします。
7. ユーザ定義一覧が表示され、作成したユーザ定義が表示されます。

これで CSV Fetch 定義の作成は終了です。

バッチでのレコード Upsert
IM-LogicDesignerのユーザ定義タスクを作成します。作成するのは Salesforceバッチ定義 です。
1. intra-mart Accel Platformにテナント管理者またはLogicDesigner管理者でログインします。
2. 「サイトマップ」→「LogicDesigner」→「 Salesforceバッチ定義新規作成」から、「 Salesforceバッチ定義編集」を開きます。

3. Salesforceへ接続するクライアントIDを選択します。ここでは default を選択していますが、ご自分の環境にあったものを選択してく53

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

4. 「オブジェクト検索」リンクをクリックし、「オブジェクト検索」ダイアログを表示します。

5. 「絞り込み」に「exp」と入力し「検索」ボタンをクリックします。

コラム
絞り込み検索は大文字小文字の区別なく、部分一致検索を行います。
6. 一覧に表示された「Expense」の行のチェックボックスにチェックを入れ「決定」ボタンをクリックします。

54

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

7. その他の項目は以下のように入力してください。
ユーザ定義ID

UpsertExpense

ユーザ定義名UpsertExpense

ユーザカテゴリID SampleCategory
操作

Upsert8. 「登録」ボタンをクリックします。
9. 確認ダイアログで「OK」ボタンをクリックします。
10. ユーザ定義一覧が表示され、作成したユーザ定義が表示されます。

これで Salesforce バッチ定義の作成は終了です。

55

intra-mart Accel Platform — Salesforce 連携チュートリアルガイド 第2版 2021-04-01
続いてフロー定義の作成を行います。
11. 「サイトマップ」→「LogicDesigner」→「フロー定義一覧」を開きます。

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

13. 「定数設定」リンクをクリックし、次のような項目を追加し、「決定」ボタンをクリックします。
定数ID

定数値

Filenamesample.csv

clientId

default

備考

ここでは default を選択していますが、ご自分の環境にあったものを選択してください。

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

定数値

objectExpense__coperation

upsertuserCdxxxxx

version37.0

備考

salesforce-client-config.xml に指定したユーザを指定してください

14. ロジックフロー定義編集画面のデザイナに、先ほど作成した「UpsertExpense」「CSV_Fetch」タスクと、「パブリックストレージ取得」「ジョブの作成」「ジョブの終了」「ジョブ情報の取得」「バッチ情報配列の取得」「バッチ情報の取得」「バッチ結果の取得」「繰り返し」を追加し、下の画像のように接続します。

15. 「パブリックストレージ取得」タスクをクリックし、「マッピング設定」ボタンをクリックします。

57

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

16. 「定数」の Filename と、「im_publicStorage1」を紐づけ、「決定」ボタンをクリックします。

58

intra-mart Accel Platform — Salesforce 連携チュートリアルガイド 第2版 2021-04-01
17. 「ジョブの作成」タスクをクリックし、「マッピング設定」ボタンをクリックします。

18. 「定数」の clientId から version と、「im_salesforce_create_job1」の同じキー名の項目を紐づけ、「決定」ボタンをクリックします。

19. 「[開始]CSV_Fetch」タスクをクリックし、「マッピング設定」ボタンをクリックします。

59

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

20. 「im_publicStorage1」を追加した上で「im_publicStorage1」と、「CSV_Fetch」の file を紐づけ、「決定」ボタンをクリックします。

21. 「UpsertExpense」タスクをクリックし、「マッピング設定」ボタンをクリックします。

60

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

22. 次の表のように各項目を紐付け、「決定」ボタンをクリックします。
im_salesforce_create_job1

id

CSV_Fetch1

item

jobId
Name

Name

AmountAmount__c

ClientClient__c

Date

Date__c

MatterNumber

matterNumber__c

61

body

UpsertExpense1

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

23. 「ジョブの終了」タスクをクリックし、「マッピング設定」ボタンをクリックします。

24. 「im_salesforce_create_job1」を追加した上で、「定数」の clientId, userCd, version と「im_salesforce_close_job1」の同じ
キー名の項目を、また「im_salesforce_create_job1」の id と 「im_salesforce_close_job1」の jobId を紐づけ、「決定」ボタンをクリックします。

62

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

25. 「ジョブ情報の取得」タスクをクリックし、「マッピング設定」ボタンをクリックします。

26. 「im_salesforce_create_job1」を追加した上で、「定数」の clientId, userCd, version と「im_salesforce_get_job_information1」の同じキー名の項目を、また「im_salesforce_create_job1」の id と
「im_salesforce_get_job_information1」の jobId を紐づけ、「決定」ボタンをクリックします。

63

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

27. 「バッチ情報配列の取得」タスクをクリックし、「マッピング設定」ボタンをクリックします。

28. 「im_salesforce_create_job1」を追加した上で、「定数」の clientId, userCd, version と「im_salesforce_get_batch_information_list1」の同じキー名の項目を、また「im_salesforce_create_job1」の id と
「im_salesforce_get_batch_information_list1」の jobId を紐づけ、「決定」ボタンをクリックします。

64

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

29. 「繰り返し開始」タスクをクリックし、繰り返し対象の「選択」リンクをクリックします。

30. 「im_salesforce_get_batch_information_list1/batchInfo」をクリックし、「決定」ボタンをクリックします。

65

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

31. 「バッチ情報の取得」タスクをクリックし、「マッピング設定」ボタンをクリックします。

32. 「im_startLoop1」を追加した上で、「定数」の clientId, userCd, version と「im_salesforce_get_batch_information_list1」の同じキー名の項目を、また「im_startLoop1」の id と 「im_salesforce_get_batch_information1」の batchId、「im_startLoop1」の jobId と 「im_salesforce_get_batch_information1」の jobId を紐づけ、「決定」ボタンをクリックします。

66

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

33. 「バッチ結果の取得」タスクをクリックし、「マッピング設定」ボタンをクリックします。

34. 「im_startLoop1」を追加した上で、「定数」の clientId, userCd, version と「im_salesforce_get_batch_information_list1」の同じキー名の項目を、また「im_startLoop1」の id と 「im_salesforce_get_batch_information1」の batchId、「im_startLoop1」の jobId と 「im_salesforce_get_batch_information1」の jobId を紐づけ、「決定」ボタンをクリックします。

67

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

35. 「新規保存」リンクをクリックし、新規保存ダイアログを表示します。ダイアログに次のような内容を入力し「決定」ボタンをクリックします。
フロー定義ID

UpsertExpense

フロー定義名 標準 UpsertExpense
フローカテゴリID SampleCategory

28. 「確認」ダイアログで「決定」ボタンをクリックします。
29. 「ロジックフロー定義一覧」画面に遷移します。作成した「UpsertExpense」フローが表示されていることを確認できます。

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

これでフロー定義の作成が終了です。
最後に動作確認を行います。 IM-LogicDesignerのデバッグ機能を使ってフローを実行し、 Salesforceにレコードが作成されたり更新された
りすることを確認します。
30. 「UpsertExpense」フローを選択後に「編集」ボタンをクリックします。

31. 「ロジックフロー定義編集」画面の「デバッグ」リンクをクリックします。

69

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

32. 「ロジックフロー定義のデバッグ」画面の「実行」リンクをクリックします。

33. 「確認」ダイアログで「決定」ボタンをクリックします。
34. 「フローの実行が正常終了しました。」とメッセージが表示されます。

70

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

これで Salesforceにレコードが作成されたり更新されたりしました。
本当に作成されたかどうかを確認します。
35. Salesforceにログインし、「Expense」タブをクリックします。

36. 「ビュー：すべて選択」の「Go!」ボタンをクリックします。

71

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

37. レコードが5件だけ存在し、「雑誌」がないことがわかります。

以上で Salesforceのレコードを作成したり更新したりできました。このチュートリアルではたった5件の操作でしたが、CSV ファイルにより多くのデータを保存しておくことで大量のデータを Salesforceに登録することがで来ます。

まとめ
以上で Salesforce バッチ定義新規作成 のチュートリアルは全て完了です。
これまでのチュートリアルを通して、以下のことを学びました。
Salesforce に対して大量データの処理を行う

72

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

Salesforce Streaming クライアント
Salesforce Streaming クライアント概要
アーキテクチャチュートリアルゴールの説明準備
PushTopicの登録
トピック登録メッセージのフォーマット
フロー定義作成
IM-LogicDesignerフロートリガ作成
動作確認
まとめ

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 側のサーバが停止した場合などにメッセージを受信できない可能性があります。

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

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

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

チュートリアル
このチュートリアルが終了すると、次のような事ができます。
Salesforceで PushTopic を登録する
Salesforceのデータの変更通知を intra-mart Accel Platformで受信する受信した変更通知を入力値として IM-LogicDesignerのフローを実行するゴールの説明このチュートリアルでは、Salesforce に新規リードが登録されたら、 IMBox のカンパニーボックスにその内容が通知されるという一連の流れを作成します。

準備
チュートリアルの準備 に書かれている準備が行われていることを確認してください。
また、 IMBoxへ投稿を行いますので IMBoxを使用できるようになっていることも確認してください。 IMBoxのセットアップは intra-mart
Accel Platform セットアップガイド の IMBox を参照してください。
サンプルのユーザ、会社、組織の情報を使用します。

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

74

intra-mart Accel Platform — Salesforce 連携チュートリアルガイド 第2版 2021-04-01
コラム
Workbench ではなく開発者コンソールを使用して PushTopic を作成することもできます。お好みの方法で作成してください。

コラム
Apex とは Salesforceの独自言語です。詳細は以下の URL を参照してください。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_intro.htm (日本語)https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_intro.htm (English)

1. Workbench にログインする
https://developer.salesforce.com/page/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 の作成が終わりました。

トピック登録次に Salesforce Streaming クライアントのトピックを登録します。
1. 「サイトマップ」→「Salesforce」→「トピック一覧」をクリックします。

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

75

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

3. 次のように入力、選択し「登録」ボタンをクリックします。
クライアントID 接続したいクライアント
ID
トピック

SampleLeadTopic

詳細

サンプルのトピックです。

ステータス

有効

4. トピック一覧に SampleLeadTopic の行が追加されます。

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

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

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

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

メッセージのフォーマット
次に IMBoxのカンパニーボックスに投稿するメッセージをフォーマットするユーザ定義タスクを作成します。作成するのは JavaScript 定義です。
1. intra-mart Accel Platformにテナント管理者またはLogicDesigner管理者でログインします。
2. 「サイトマップ」→「LogicDesigner」→「JavaScript定義新規作成」から、「JavaScript定義編集」を開きます。

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

3. 入力値を以下のように指定します。
キー名

型

Name

stringTitle

stringCompany string
StatusstringPhone

stringEmailstringWebsitestring

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
};
}

78

intra-mart Accel Platform — Salesforce 連携チュートリアルガイド 第2版 2021-04-01
5. その他の項目は以下のように入力してください。
ユーザ定義ID

Formatユーザ定義名FormatユーザカテゴリID SampleCategory
3. 「登録」ボタンをクリックします。
4. 確認ダイアログで「OK」ボタンをクリックします。
5. ユーザ定義一覧が表示され、作成したユーザ定義が表示されます。

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

フロー定義作成
次に IM-LogicDesignerのフロー定義を作成します。
1. 「サイトマップ」→「LogicDesigner」→「フロー定義」を開きます。

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

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

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

型

Name

stringTitle

stringCompany

stringStatusstringPhone

stringEmailstringWebsitestringtopicName string

4. 「定数設定」リンクをクリックし、次のような項目を追加し、「決定」ボタンをクリックします。

80

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

定数値

companyCd

comp_sample_01 投稿先の会社コードを指定します。ここではサンプルデータに含まれる「サンプル会社」の備考

会社コードを指定しています。
postUserCd

tenant

投稿者のユーザコードを指定します。

5. ロジックフロー定義編集画面のデザイナに、先ほど作成した「Format」と「分岐」「カンパニーボックスへ投稿」タスクを追加し、以下のように接続します。

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

81

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

7. 「条件式（EL式）」に ${$input.topicName==’SampleLeadTopic’} と入力します。

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

82

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

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

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

83

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

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

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

PostToCompanyBox

フロー定義名 標準 PostToCompanyBox
フローカテゴリID SampleCategory

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

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

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

IM-LogicDesignerフロートリガ作成
次に IM-LogicDesignerのフロートリガを作成します。
1. 「サイトマップ」→「LogicDesigner」→「トリガ定義一覧」を開きます。

85

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

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

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

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

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

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

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

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

87

intra-mart Accel Platform — Salesforce 連携チュートリアルガイド 第2版 2021-04-01
Title
Company
StatusPhone
EmailWebsiteコラム
fields に追加するキーは、PushTopic を登録する時に指定した SOQL クエリの列名です。
pushTopic.Query = ‘SELECT Id, Name, Title, Company, Status, Phone, Email, Website FROM Lead’;
8. その他の項目は以下のように入力してください。
トリガ定義ID

CreateSalesforceRecord

トリガ定義名CreateSalesforceRecord

9. 「登録」ボタンをクリックします。
10. 確認ダイアログで「OK」ボタンをクリックします。
11. トリガ定義一覧が表示され、作成したフロートリガ定義が表示されます。

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

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

動作確認
最後に動作確認を行います。 Salesforceのリードに新しいレコードを作成すると IMBoxへその内容が投稿されることを確認します。
1. Salesforceにログインし、「Expense」タブをクリックします。

2. 「リード」リンクをクリックします。

89

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

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

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

サンプル

名

一郎

会社名

XXXカンパニー

役職

課長

電話

03-1234-5678

メール

sample.ichiro@xxx.company.co.jp

Webサイト

http://www.xxx.company.co.jp

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

5. 「サンプル 一郎」画面が表示され、 Salesforce にデータが登録されたことがわかります。

最後に IMBoxに投稿されたかどうかを確認します。
1. intra-mart Accel Platformにユーザ tenant でログインします。
2. グローバルナビから IMBoxをクリックし、 IMBoxを開きます。

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

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

91intra-mart Accel Platform — Salesforce 連携チュートリアルガイド 第2版 2021-04-01
まとめ
以上で Salesforce Streaming クライアント のチュートリアルは全て完了です。
これまでのチュートリアルを通して、以下のことを学びました。
Salesforce で PushTopic を登録する方法
Salesforceのデータの変更通知を intra-mart Accel Platformで受信する方法
IM-Propagation が変更通知を伝播すること受信した変更通知を入力値として IM-LogicDesignerのフローを実行する方法

92

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

付録
主要クラスとシーケンス
Salesforce連携
Salesforce 連携に関連する主なクラスのクラス図を下に示します。

Salesforce Streaming クライアント
Salesforce Streaming クライアントに関連する主なクラスのクラス図を下に示します。

アクセストークンの流れ
OAuth 認証の場合のシーケンス図を下に示します。

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

パスワード認証の場合のシーケンス図を下に示します。

処理の流れ
Salesforce オブジェクト操作で CREATE を実行した際のシーケンス図を下に示します。

Salesforce Streaming クライアントの動作仕様概要
Salesforce Streaming クライアントは Salesforce Streaming API を利用して、Salesforce データの変更通知を受け取る機能を提供します。
Salesforce Streaming API は次のような順序で動作します。
1. Salesforceで SOQL に基づいて PushTopic を作成します。
2. intra-mart Accel Platformで PushTopic を購読します。
3. Salesforceでレコードの操作を行います。

94

intra-mart Accel Platform — Salesforce 連携チュートリアルガイド 第2版 2021-04-01
4. レコードの操作が SOQL の条件に合致した場合、 intra-mart Accel Platformへ変更が通知されます。
Salesforceは通知を送るのに Bayeuxプロトコル、CometD を利用したプッシュ技術を利用します。 詳細については 以下の URL を参照してください。
Force.com ストリーミング API 開発者ガイド - Bayeux プロトコル、CometD、および long polling （日本語）Force.com Streaming API Developer Guide - Bayeux Protocol, CometD, and Long Polling(English)

Salesforce Streaming クライアント
Salesforce Streaming クライアントは「Salesforce Streaming Client Service」という名前の サービス仕様書 として動作します。このサービス仕様書 が Salesforceとの接続を維持するためのスレッドの生成や管理を行います。
「Salesforce Streaming Client Service」は１つのサーバで起動するサービスとして実装されています。複数のサーバ上で同時に起動することはありません。また、分散環境が構築されている場合はサービスが起動しているサーバが停止すると自動的にサービスの再選出が行われます。

サービス仕様書 の起動時やトピックをデータベースに登録すると サービス仕様書 は自身が管理するスレッドを生成します。
このスレッドは、データベースに登録されているトピックに対応する Salesforceの PushTopicチャネルを購読します。 セッション一覧に表示されるのはこのスレッドが保持する情報です。スレッドは Salesforceとの接続を維持するために long polling を利用します。

状態遷移
スレッドが生成され Salesforceとの通信が確立するまで次のように状態が遷移します。

95

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

RUNNING の状態から停止するまでは次のように状態が遷移します。

96