本記事は
Salesforce Winter'17リリースノートから
開発 -> API の部分を(適当に)抜粋したものです。
新規追加分
オブジェクト
-
ISV系のオブジェクト
ISV系のAPI機能強化に伴って関連するオブジェクトが追加されたオブジェクト 概要 PackagePushError 転送要求中に発生したエラーを表します。作成される PackagePushError レコードの数は、エラーになった要 求での転送ジョブ数に基づきます。 PackagePushJob 組織で、あるバージョンから別のバージョンへパッケージをアップグレードするための個々の転送ジョブ を表します。 PackagePushRequest 1 つまたは複数の組織で、あるバージョンから別のバージョンへパッケージをアップグレードするための転 送要求を表します。 PackageSubscriber 組織でのパッケージのインストールを表します。
など
-
フィールドサービス系
フィールドサービス製品強化に伴って関連するオブジェクトが追加されたオブジェクト 概要 ServiceResource フィールドサービスのサービス技術者または派遣担当者を表します。 ServiceTerritory フィールドサービス作業を実行できる地域を表します。
など
変更分
オブジェクト
- Account/Contact/Lead
- クリーンアップルールによる地理位置情報項目の更新
- Profile系
- 既存のカスタムプロファイルのオブジェクト権限、項目権限、および設定オブジェクトへのアクセスが可能
- データローダを使用して、いくつかのプロファイルの項目レベル権限を一括更新可能
- Apexクラスを作成して、プロファイルを更新可能
// 例: オブジェクト権限を追加する
PermissionSet ps = [Select Id
From PermissionSet
Where ProfileId IN (Select Id From Profile Where Name = 'std')];
ObjectPermissions o = new ObjectPermissions(
parentid = ps.Id,
permissionscreate = true,
permissionsdelete = true,
permissionsedit = true,
permissionsread = true,
sobjecttype = 'ABC__c' // <- 事前に定義したカスタムオブジェクトAPI
);
insert o;
Chatter REST API
- 投稿とコメントを不適切またはスパムとしてフラグ設定が可能
- コメントにリッチテキストやインライン画像を追加可能
パイロット版
REST API
- Flow / Flow Interview
- VisualWorkFlowの独自ランタイム環境を作成できるとか
- Composite
- 1回のコールで複数要求を実行できて、あるサブ要求の結果を後続のサブ要求で参照可能
- 現行のBatchリソースではできない
- クライアントとサーバー間の通信回数を減らせる
- 例えばモバイルアプリでは有効
- 1回のコールで複数要求を実行できて、あるサブ要求の結果を後続のサブ要求で参照可能
Messaging
- プラットフォームイベントを定義して、Salesforce内または外部ソースからカスタム通知を配信できるようにする
- プラットフォームイベントの定義はClassicでのみ
- パブリッシャーは、Apex or API経由でイベントを発行可能
- サブスクライバは、Apex or CometDクライアントを使って、イベント通知に対するアクションを実行する
プラットフォームイベントの定義と制約
- プラットフォームイベントはSオブジェクトであり、カスタムオブジェクトを定義するのとほぼ同じ
- サフィックスは
__e
(例:Low_Ink__e
など) - プラットフォームイベントのインスタンスがイベント通知に相当する
- インスタンスは、作成のみで更新不可
- 画面から参照できない
- SOQLでクエリできない
-
EventBusSubscriber
を使ってクエリ可能
-
// 例
Select ExternalId,Name,Position,Status,Type,Topic
From EventBusSubscriber
Where Topic = 'Low_Ink__e'
-
EventBus.publish
を使ってインスタンスを作成する
Apex内での利用(イベント発行)
プラットフォームイベントのインスタンスを作成する
List<Low_Ink__e> inkEvents = new List<Low_Ink__e>();
inkEvents.add(
new Low_Ink__e(
Printer_Model__c = 'xxx',
Ink_Percentage__c = 0.2
)
);
// イベント発行
List<Database.SaveResult> res = EventBus.publish(inkEvents);
Apex内での利用(イベント応答)
プラットフォームイベントのトリガを実装することで応答する
trigger LowInkTrigger on Low_Ink__e (after insert) {
for(Low_Ink__e e : Trigger.new){
System.debug('printer: ' + e.Printer_Model__c);
if(e.Ink_Percentage__c < 0.3){
// 何か特定のアクション: Caseを作成するとか
}
}
Apex内での利用(リトライ)
-
EventBus.RetryableException
を投げると、システム側でイベントを再通知する- プラットフォームイベントの標準フィールド
ReplayID
を新規採番してイベントを再発行する模様
- プラットフォームイベントの標準フィールド
※従来のカスタムオブジェクトとは異なるポイント
API経由での利用(イベント発行)
REST APIを使ってプラットフォームイベントのインスタンスを作成することでイベント発行する
REST EndPoint:
/services/data/v37.0/sobjects/Low_Ink__e
Request Body:
{
"Printer_Model__c": "xxx",
"Ink_Percentage__c: 0.3
}
CometDを使ったイベントのサブスクライブ
項目 | 値 |
---|---|
Channel |
/event/<プラットフォームイベントAPI> 例: /event/Low_Ink__e
|
Streaming EndPoint | /cometd/37.0 |
(認証情報) | セッションID or UserName/Password ? |
※PushTopicを準備する必要はない模様