Classic と Lightning Experience 間での Visualforce ページの共有
学習の目的
Classic と Lightning Experience 間の Visualforce ページの共有
とはいえ、ページを実行しているユーザーエクスペリエンスコンテキストに応じて動作やスタイル設定をわずかに、あるいは大幅に変えたいと思う状況も当然ながら存在します。この単元では、すべてのユーザーエクスペリエンスで正しく機能するページを作成するさまざまな方法と、コードで特定のコンテキストを検出して変更する方法を見ていきます。
Visualforce マークアップでのユーザーエクスペリエンスコンテキストの検出と対応
- Theme1 — 古い Salesforce テーマ
- Theme2 — Salesforce Classic 2005 ユーザーインターフェースのテーマ
- Theme3 — Salesforce Classic 2010 ユーザーインターフェースのテーマ
- Theme4d — 最新の「Lightning Experience」 Salesforce のテーマ
- Theme4t — Salesforce モバイルアプリケーションのテーマ
- Theme4u — Lightning コンソールのテーマ
- PortalDefault — Salesforce カスタマーポータルのテーマ
- Webstore — Salesforce AppExchange のテーマ
高度な操作
これは、作成された変数の値を使用しないため、<apex:variable> の使用方法としては普通ではありません。他にも、独自の出力を表示しないコンポーネントであれば、<apex:stylesheet> コンポーネントをラップできます。この方法は、<apex:variable> が、ラップされている <apex:stylesheet> コンポーネントにその rendered 属性を「貸している」ようなものだと考えてください。
<apex:variable> コンポーネントで他のコンポーネントをラップする場合、変数そのものは使用しないことをお勧めします。変数は実際には作成されないからです! これは機能なのか、それともバグなのか? とりあえず未定義の動作と呼びましょう。そして他の場所で uiTheme 変数を使用するのは避けてください。
JavaScript でのユーザーエクスペリエンスコンテキストの検出と応答
ユーザーに表示されている内容を JavaScript で検出するには、Visualforce で現在のユーザーエクスペリエンスコンテキストを検出するのと似た方法を使用します。UITheme.getUITheme() グローバル変数をコールして、現在のユーザーインターフェーステーマを識別する値を返します。
次のコードは、現在のユーザーエクスペリエンスコンテキストが Lightning Experience テーマかどうかを確認します。
Apex でのユーザーエクスペリエンスコンテキストの判定
- Theme1 — 古い Salesforce テーマ
- Theme2 — Salesforce Classic 2005 ユーザーインターフェースのテーマ
- Theme3 — Salesforce Classic 2010 ユーザーインターフェースのテーマ
- Theme4d — 最新の「Lightning Experience」 Salesforce のテーマ
- Theme4t — Salesforce モバイルアプリケーションのテーマ
- Theme4u — Lightning コンソールのテーマ
- PortalDefault — Salesforce カスタマーポータルのテーマ
- Webstore — Salesforce AppExchange のテーマ
これらのメソッドをサーバー側のコントローラーコードで使用することはまれで、異なる Visualforce マークアップまたは JavaScript コードを提供する方が一般的です。コントローラーおよびコントローラー拡張コードは UX コンテキストに関して中立にすることがベストプラクティスです。ユーザーインターフェースの違いは、Visualforce であっても JavaScript であってもフロントエンドコードで処理することをお勧めします。
SOQL および API アクセスを使用した Lightning Experience のクエリ
ユーザーの Lightning Experience の選好を直接照会することはお勧めしません。結果からわかるのはユーザーが現在選好する設定で、画面上の実際のユーザーエクスペリエンスではありません。いくつかの使用事例では、実際に行われているユーザーエクスペリエンスが選好値に反映されない場合があります。現在の要求で実際に行われているユーザーエクスペリエンスを判別するには、$User.UIThemeDisplayed または UserInfo.getUiThemeDisplayed() を使用します。