Salesforce Winter '19資格更新まとめ

#[概要]
SalesforceのCoreサービスについてWinter '19の資格更新をTrailheadで実施したので
内容を簡単にまとめたいと思います。
対象は以下の3資格となります。
アドミニストレーター資格の更新 (Winter '19)
https://trailhead.salesforce.com/ja/content/learn/modules/admin_cert_maintenance_winter19/learn-whats-new-in-winter-19
Platform アプリケーションビルダー資格の更新 (Winter '19)
https://trailhead.salesforce.com/ja/content/learn/modules/platform-app-builder-cert-maintenance-wi19
Platform デベロッパー資格の更新 (Winter '19)
https://trailhead.salesforce.com/ja/content/learn/modules/platform-developer-i-certification-maintenance-winter-19


#[アドミニストレーター]
・リストビューの一括アクションで、[所有者の変更] ページレベルボタンを使用して、最大 200 件の選択したリード、ケース、カスタムオブジェクトに新規所有者を割り当てることができるようになりました。
・新しい検索バーを使用して、リストビューの項目データを検索し、必要なレコードをヒットさせることができるようになりました。g+fのショットカットキーで検索バーを選択することができる。
・ダッシュボードのグラフ、テーブル、総計値で表示される小数部の桁数 (0 ～ 5) を選択することができるようになりました。
・[レポート] または [ダッシュボード] タブから直接レポート、ダッシュボード、フォルダを検索できるようになりました。
・ドラフト投稿は、未公開のフィード項目をすべて自動的に保存する新しいオプションを設定できるようになりました。

#[Platform アプリケーションビルダー]
・プロセスとフローを継続的インテグレーションおよび継続的配信モデルの一部として、手動で有効化せずにリリースできるようになった。以前は、プロセスとフローは常に無効としてリリースされていました。新しい設定では、変更セットまたはメタデータ API を使用して新しい有効バージョンのプロセスまたはフローをリリースできます。

・アンケートへの招待のレコードでアンケートへの招待に関連する有益な情報を表示できるようになりました。参加者がアンケートを開いたり、開始したり、完了したりしたかどうかを確認します。参加者がアンケートを完了したら、[アンケートへの招待] 関連リストから直接回答を確認します。これらの改善により、複雑なレポートを構築したり、API にアクセスしたりせずに状況に応じたアンケートデータを取得できます。
#
・公開リンクでの 1 つのファイルの共有よりも優れていることは、多数のファイルを一度に共有することです。共有フォルダへの公開リンクを作成し、社内と社外の受信者にファイルセットへのアクセス権を付与できます。公開リンクは暗号化された URL です。Lightning Experience のフォルダ共有は、Classic のコンテンツパックの代替機能を提供します
・コンプライアンスの目標を達成したり、ビジネスルールを満たしたりするために必要なステップを完了するようにエージェントに通知します。エージェントが、必須のガイド付きアクションを起動した後にタブまたはウィンドウを閉じようとすると、完了を促す警告が表示されます。
・ページを表示するユーザの権限 (組織の標準権限またはカスタム権限) に基づいてコンポーネントの表示条件を設定することで、Lightning ページをより動的にすることができるようになりました。たとえば、[リードの取引の開始] 権限を持つユーザにはコンポーネントが表示されるが、その他のユーザには表示されないようにするルールを作成できます。コンポーネントの表示条件は、標準コンポーネント、カスタムコンポーネント、AppExchange のコンポーネントでサポートされています。

#[Platform デベロッパー]
## メソッドが新規追加された既存の Apex クラス
- Schema.DescribeFieldResult クラス
    - isAiPredictionField()
        - Einstein 予測データを表示するように項目が有効化されているかどうかを示す Boolean を返します。
- Schema.DescribeSObjectResult クラス
    - getRecordTypeInfosByDeveloperName()
        - 関連付けられたレコードタイプに API 参照名を照合する対応付けを返します。
- Schema.RecordTypeInfo クラス
    - getDeveloperName()
        - このレコードタイプの API 参照名を返します。
- System.Crypto クラス
    - verify(String algorithmName, Blob data, Blob signature, Blob publicKey)
        - 指定アルゴリズムと供給された公開鍵を使用して、暗号化されたデータのデジタル署名を確認する Boolean を返します。
    - verify(String algorithmName, Blob data, Blob signature, String certDevName)
        - 指定アルゴリズムと certDevName に関連付けられた公開鍵を使用して、データのデジタル署名を確認する Boolean を返します。
    - verifyMac(String algorithmName, Blob input, Blob privateKey, Blob macToVerify)
        - 指定アルゴリズム、入力データ、非公開鍵、MAC アドレスを使用して、データの HMAC 署名を確認する Boolean を返します。
- System.Url クラス
    - getOrgDomainUrl()
        - 組織の正規 URL を返します。たとえば、https://yourDomain.my.salesforce.com、または [私のドメイン] が無効な組織の場合は https://yourInstance.salesforce.com が返されます。

##メソッドが変更された既存の Apex クラス
- System.UserInfo クラス
    - getSessionId()
        - 非同期 Apex (一括処理、future、Queueable、またはスケジュール済み Apex) で getSessionId() を使用できるようになりました。以前は、このメソッドは非同期実行時に null を返していました。
        - 非同期 Apex では、このメソッドはコードが有効なユーザによって実行されている場合にのみセッション ID を返します。コードが内部ユーザ (自動化プロセスユーザやプロキシユーザなど) によって実行されている場合、このメソッドは null を返します。

##変更された Apex Enum
Winter '19 リリースでは、次の列挙が更新されています。

- Auth.Auth.VerificationMethodEnum Enum
    - ユーザがログイン時に自分自身を識別できるさまざまな方法が含まれます。モバイルで使いやすいパスワードなしのログインページの実装や、検証方法のセルフ登録 (および登録解除) のために使用できます。
    - この Enum に新しい値 Password が追加されました。パスワードで ID を確認できます。
- Metadata.PlatformActionListContextEnum Enum
    - アクションリストの各種コンテキストを説明します。
    - この Enum に新しい値 ActionDefinition が追加されました。この値は、将来の使用のために予約されています。

##新規 Apex 例外
Winter '19 リリースでは、次の例外が導入されています。

- Auth 名前空間
    - LoginDiscoveryException
        - 例外を発生させて、ログイン検出ハンドラを実行しているときにエラーが発生したことを示します。
    - DiscoveryCustomErrorException
        - ログイン、検証、およびセルフ登録ページに表示するエラーメッセージをカスタマイズするための例外を発生させます。

##新規 Apex インターフェース
Winter '19 リリースでは、次の新規インターフェースが導入されています。

- Auth.ConfigurableSelfRegHandler インターフェース
    - ユーザ名とパスワードの代わりにメールアドレスまたは電話番号でユーザを登録するには、Auth.ConfigurableSelfRegHandler を実装するクラスを作成します。設定可能なセルフ登録ページでコミュニティのセルフ登録を設定すると、Salesforce によってデフォルトの AutocreatedConfigSelfReg Apex クラスが生成されます。このクラスを修正して機能を拡張し、ユーザが作成される方法の変更などを行うことができます。
- createUser(accountId, profileId, registrationAttributes, password)
    - コミュニティのセルフ登録ページで訪問者が提供した情報を使用して、コミュニティメンバーを作成します。
- Auth.LoginDiscoveryHandler インターフェース
    - ユーザ名とパスワード以外の確認方法に基づいてユーザのログインを行うには、Auth.LoginDiscoveryHandler を実装するクラスを作成します。ユーザはメール、電話番号、または統合 ID やデバイス識別子などの他の識別子を使用して、自分自身を識別できます。ログイン検出ページでコミュニティのログインページを設定すると、Salesforce によってデフォルトの AutocreatedDiscLoginHandler が生成されます。このクラスを修正し、シングルサインオン (SSO) のサポートの追加などを行うことができます。
- login(identifier, startUrl, requestAttributes)
    - メールや電話番号などの識別子が指定された外部ユーザのログインを行います。成功した場合、開始 URL で指定されたコミュニティページにユーザをリダイレクトします。
- System.Callable インターフェース
    - 開発者が共通インターフェースを使用して、異なるパッケージ内のコードでも Apex クラスまたはトリガ間の疎結合インテグレーションを作成できます。共通インターフェースについて合意することで、異なる会社や異なる部署の開発者が相互のソリューションに基づいてソリューションを作成できます。コミュニティの規模を拡大し、当初の予定とは異なるソリューションが必要になる場合、このインターフェースを実装してコードの機能を拡張します。
- call(action, args)
    - 他のクラスまたはパッケージで利用したり作成時の基盤としたりできる機能を提供します。

##変更された Apex の SOAP API コール

- runTests() コールが変更されました。
- RunTestsResult オブジェクトに次の 2 つの新規項目が追加されました。
- flowCoverage
    - フローを実行したテスト実行の結果の配列。
- flowCoverageWarnings
    - フローを実行したテスト実行によって生成された警告の配列。

##Apex コードから組織への API コールの合理化
新しい System.Url.getOrgDomainUrl() メソッドを使用して、API コードで Salesforce の REST API と SOAP API を操作します。以前は、[私のドメイン] が有効な組織が Apex コードから一部の API 機能にアクセスできるのは、リモートサイト設定または指定ログイン情報の設定後のみでした。DatedExchangeRate などの一部のオブジェクトは、API でのみアクセス可能です。Apex コードを使用して getOrgDomainUrl() メソッドでエンドポイントを作成することで、それらのオブジェクトを操作できるようになりました。また、エンドポイントを使用して、組織の制限情報へのアクセス、フローの呼び出し、リストビューの操作、選択リスト値セットとカスタム項目の作成やカスタマイズなどを行うこともできます。

##キャッシュ可能としての Apex メソッドのマーク
Winter '19 より前では、Apex メソッドから返されるデータをキャッシュするには、Apex メソッドをコールするアクションごとに JavaScript コードで setStorable() をコールする必要がありました。現在のリリースでは、Apex メソッドを保存可能 (キャッシュ可能) としてマークできるようになり、JavaScript コードで setStorable() をコールする必要がなくなりました。
API バージョン 44.0 以降のコンポーネントの Apex メソッドから返されるデータをキャッシュするには、Apex メソッドに @AuraEnabled(cacheable=true) アノテーションを付加します。次に例を示します。

@AuraEnabled(cacheable=true)
public static Account getAccount(Id accountId) {
    // your code here
}
既存のコンポーネントを API バージョン 44.0 に更新するには、JavaScript コードの setStorable() コールを削除します。@AuraEnabled ではなく @AuraEnabled(cacheable=true) アノテーションを Apex メソッドに付加します。このようにしないと、アクションでエラー応答が返されます。

##iframe を使用した信頼されないサードパーティコンテンツの隔離によるセキュリティの向上
iframe を使用して、別個のドメインに HTML 静的リソースを隔離できるようになりました。信頼されないソースからの情報を取り込む別個のドメインを使用して、Visualforce のコンテンツを保護します。

別個のドメインの静的 HTML ファイルを参照するには、差し込み項目として $IFrameResource.<resource_name> を使用します。このとき、resource_name は、静的リソースをアップロードしたときに指定した名前です。

##ロック解除済みパッケージの連動関係情報の抽出
インストールされたロック解除済みパッケージに対して簡単な SOQL クエリを実行し、その連動関係情報を抽出できるようになりました。また、スクリプトを作成し、連動関係を持つロック解除済みパッケージのインストールを自動化することもできます。

SubscriberPackageVersion Tooling API オブジェクトで連動関係情報が提供されるようになりました。SubscriberPackageVersion に対する SOQL クエリを使用して、ロック解除済みパッケージの連動元のパッケージを特定できます。これらのパッケージのID と、正しいインストール順序を取得できます。

##継承された共有を使用した Apex コードの保護
Apex クラスで inherited sharing キーワードを指定できるようになりました。このキーワードでは、クラスがそのコール元のクラスの共有モードを実行できます。inherited sharing を使用することでセキュリティレビューに合格でき、予期しない方法や安全でない方法での特権 Apex コードの使用を防止できます。inherited sharing のある Apex クラスは、Visualforce ページコントローラ、Apex REST サービス、または Apex トランザクションの開始ポイントとして使用する場合、with sharing として実行されます。

共有宣言のない Apex は、デフォルトでは安全ではありません。実行時に with sharing または without sharing モードで実行可能な Apex クラスの設計は高度な手法であり、特定の共有宣言が誤って省略されている場所を特定することは困難な場合があります。明示的な inherited sharing 宣言は意図が明確なため、省略された宣言による曖昧さやセキュリティ分析ツールの誤検出を回避できます。

inherited sharing のある Apex クラスと省略された共有宣言のある Apex クラスには、明確な違いがあります。クラスが Apex トランザクションの開始点として使用されている場合、省略された共有宣言は without sharing として実行されます。一方、inherited sharing ではデフォルトで確実に with sharing として実行されます。inherited sharing として宣言されたクラスが without sharing として実行されるのは、すでに確立されている without sharing コンテキストから明示的にコールされた場合のみです。

##lightning:empApi
lightning:empApi コンポーネントをカスタム Lightning コンポーネントに埋め込み、ストリーミングイベントチャネルへの登録とイベント通知の受信を行います。Lightning プラットフォームの任意のイベントチャネル種別 (プラットフォームイベント、PushTopic、汎用イベント、変更データキャプチャ (開発者プレビュー) イベントのチャネルなど) に登録できます。lightning:empApi コンポーネントは、共有 CometD ベースストリーミング API 接続を使用して、ブラウザで複数のストリーミングアプリケーションを実行できるようにします。

##lightning:map
lightning:map コンポーネントは、Google マップを使用して 1 つ以上のロケーションの地図を安全に表示します。マーカーをこのコンポーネントに渡して、地図を表示するロケーションを定義できます。マーカーは、緯度と経度の座標ペアや、住所要素 (市区郡、国、郵便番号、都道府県、町名・番地) のセットになります。

##lightning:menuDivider
このコンポーネントは、lightning:buttonMenu の子コンポーネントとして使用されます。lightning:menuDivider を使用して、メニュー項目の後に区切り線を作成します。デフォルトでは、区切り線の上下にスペースが追加されます。lightning:menuDivider で variant="compact" を使用して、スペースを狭くします。

##lightning:menuSubheader
このコンポーネントは、lightning:buttonMenu の子コンポーネントとして使用されます。lightning:menuSubheader を使用して、メニュー項目のリストにサブヘッダーを作成します。label 属性を使用してヘッダーのテキストを指定します。