LoginSignup
5
5

More than 5 years have passed since last update.

Salesforce Winter'17 リリースノートより(API)

Posted at
1 / 16

本記事は
Salesforce Winter'17リリースノートから
開発 -> API の部分を(適当に)抜粋したものです。


新規追加分

オブジェクト

  • ISV系のオブジェクト
    ISV系のAPI機能強化に伴って関連するオブジェクトが追加された

    オブジェクト 概要
    PackagePushError 転送要求中に発生したエラーを表します。作成される PackagePushError レコードの数は、エラーになった要 求での転送ジョブ数に基づきます。
    PackagePushJob 組織で、あるバージョンから別のバージョンへパッケージをアップグレードするための個々の転送ジョブ を表します。
    PackagePushRequest 1 つまたは複数の組織で、あるバージョンから別のバージョンへパッケージをアップグレードするための転 送要求を表します。
    PackageSubscriber 組織でのパッケージのインストールを表します。

    など


  • フィールドサービス系
    フィールドサービス製品強化に伴って関連するオブジェクトが追加された

    オブジェクト 概要
    ServiceResource フィールドサービスのサービス技術者または派遣担当者を表します。
    ServiceTerritory フィールドサービス作業を実行できる地域を表します。

    など


変更分

オブジェクト

  • Account/Contact/Lead
    • クリーンアップルールによる地理位置情報項目の更新 sfdc_CleanRules.png

  • 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リソースではできない
    • クライアントとサーバー間の通信回数を減らせる
      • 例えばモバイルアプリでは有効

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を準備する必要はない模様

5
5
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5