trailhead

プラットフォーム開発者向けの新機能の学習

学習の目的

この単元を完了すると、次のことができるようになります。

  • 非同期 Apex コードから Salesforce API に HTTP コールアウトを実行する。
  • Apex メソッドをキャッシュ可能としてマークする。
  • iframe を使用して Visualforce ページ内の信頼されないサードパーティコンテンツを隔離する。
  • ロック解除済みパッケージの連動関係情報を抽出する。

概要

Winter '19 リリースに含まれるその他の重要な Platform デベロッパー向け機能強化をいくつか確認していきましょう。

Apex コードから組織への API コールの合理化

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

[私のドメイン] の有無に関係なく、組織で getOrgDomainUrl() を使用して、Apex コードを実行している組織の 正規 URL を取得できます。たとえば、https://yourDomain.my.salesforce.com、[私のドメイン] が有効な組織、または [私のドメイン] が無効な組織の場合は https://yourInstance.salesforce.com が返されます。

次の例では、ユーザインターフェース API を使用してデフォルト値を取得し、レコードをコピーできるようにします。

Http h = new Http();
HttpRequest req = new HttpRequest();
req.setEndpoint(Url.getOrgDomainUrl().toExternalForm() + '/services/data/v44.0/limits');
req.setMethod('GET');
req.setHeader('Authorization', 'Bearer ' + UserInfo.getSessionId());
HttpResponse res = h.send(req);

API コールにはセッション ID と URL が必要な場合があります。更新された System.UserInfo.getSessionId() メソッドを使用して、そのセッション ID を取得できます。同期と非同期の両方で getSessionId() を使用できます。非同期 Apex (一括処理、future、Queueable、またはスケジュール済み Apex) では、このメソッドはコードが有効なユーザによって実行されている場合にのみセッション ID を返します。コードが内部ユーザ (自動化プロセスユーザやプロキシユーザなど) によって実行されている場合、このメソッドは null を返します。

Lightning コンポーネントの JavaScript コード (関連する Apex コントローラコードを含む) から API コールを実行することはできません。この動作は以前のリリースと同じです。

メモ

メモ

この変更は、Professional Edition、Enterprise Edition、Performance Edition、Unlimited Edition、Developer Edition、および Database.com Edition の Lightning Experience、Salesforce Classic、およびすべてのバージョンの Salesforce アプリケーションに適用されます。

関連情報:

キャッシュ可能としての Apex メソッドのマーク

Winter '19 より前では、Apex メソッドから返されるデータをキャッシュするには、Apex メソッドをコールするアクションごとに JavaScript コードで setStorable() をコールする必要がありました。現在のリリースでは、Apex メソッドを保存可能 (キャッシュ可能) としてマークできるようになり、JavaScript コードで setStorable() をコールする必要がなくなりました。

メソッドを保存可能としてマークすると、サーバとの往復を待たずにクライアント側ストレージのキャッシュデータをすばやく表示できるようになり、コンポーネントのパフォーマンスが向上します。キャッシュデータが古くなっている場合、フレームワークによってサーバから最新データが取得されます。特に、待ち時間の長い接続、低速の接続、信頼性の低い接続 (3G ネットワークなど) のユーザの場合には、キャッシュが役立ちます。

この変更はバージョン設定されています。API バージョン 43.0 以前の既存のコンポーネントコードは、変更なしで引き続き機能します。

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 メソッドに付加します。このようにしないと、アクションでエラー応答が返されます。

メモ

メモ

この変更は、Lightning Experience、Salesforce Classic、およびすべてのバージョンの Salesforce アプリケーションの Lightning コンポーネントを使用する組織に適用されます。

 

iframe を使用した信頼されないサードパーティコンテンツの隔離によるセキュリティの向上

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

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

メモ

メモ

この機能は、Contact Manager Edition、Group Edition、Professional Edition、Enterprise Edition、Performance Edition、Unlimited Edition、および Developer Edition の Lightning Experience、Salesforce Classic、およびすべてのバージョンの Salesforce アプリケーションに適用されます。

関連情報:

ロック解除済みパッケージの連動関係情報の抽出

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

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

パッケージ B にはパッケージ A との連動関係があります。パッケージ D はパッケージ B と C に連動します。パッケージバージョンの作成時に指定されたサンプルの sfdx-project.json を次に示します。パッケージ D の連動関係はパッケージ A、B および C として記述されています。

{    "packageDirectories": [ 
       {
            "path": "pkg-a-workspace",
            "package": "pkgA",
            "versionName": "ver 4.9",
            "versionNumber": "4.9.0.NEXT",
            "default": true
        },
        {
            "path": "pkg-b-workspace",
            "package": "pkgB",
            "versionName": "ver 3.17",
            "versionNumber": "3.17.0.NEXT",
            "default": false,
            "dependencies": [
                {
                    "package": "pkgA",
                    "versionNumber": "3.3.0.LATEST"
                }
            ]
        },
        {
            "path": "pkg-c-workspace",
            "package": "pkgC",
            "versionName": "ver 2.1",
            "versionNumber": "2.1.0.NEXT",
            "default": false
        },
        {
            "path": "pkg-d-workspace",
            "package": "pkgD",
            "versionName": "ver 1.1",
            "versionNumber": "1.1.0.NEXT",
            "default": false,
            "dependencies": [
                {
                    "package": "pkgA",
                    "versionNumber": "3.3.0.LATEST"
                },
                {
                    "package": "pkgB",
                    "versionNumber": "3.12.0.LATEST"
                },
                {
                    "package": "pkgC",
                    "versionNumber": "2.1.0.LATEST"
                }
            ]
        }
    ],
    "namespace": "",
    "sfdcLoginUrl": "https://login.salesforce.com",
    "sourceApiVersion": "44.0",
    "packageAliases": {
        "pkgA": "0HoB00000008Oq6KAE",
        "pkgB": "0HoB00000008OqBKAU",
        "pkgC": "0HoB00000008OqGKAU",
        "pkgD": "0HoB00000008OqGKAQ"
    }
}

pkgD (ID=04txx000000082hAAA) をインストールする前に次の SOQL クエリを実行して連動関係を確認します。

sfdx force:data:soql:query -u {USERNAME} -t
   -q "SELECT Dependencies FROM SubscriberPackageVersion
       WHERE Id='04txx000000082hAAA'" --json

クエリを実行すると、pkgA、pkgB、pkgC の (04t) ID がこの順序で含まれている次の出力が表示されます。

"Dependencies":{"Ids":[
   {"subscriberPackageVersionId":"04txx000000080vAAA"},
   {"subscriberPackageVersionId":"04txx000000082XAAQ"},
   {"subscriberPackageVersionId":"04txx0000000AiGAAU"}]}
メモ

メモ

この変更は、Group Edition、Professional Edition、Enterprise Edition、Performance Edition、Unlimited Edition、および Developer Edition の Lightning Experience、Salesforce Classic、およびすべてのバージョンの Salesforce アプリケーションに適用されます。

これらは、重要な Platform デベロッパー向け機能強化のほんの一部です。「リリース」セクションにある完全な『Winter '19 リリースノート』を必ず確認してください。さらに、次の単元で Lightning 地図コンポーネントを使用してスキルも試してみましょう。

リソース

retargeting