キャンバスアプリケーションの動作の制御
署名付き要求のデフォルトの動作を変更するには、Canvas.CanvasLifecycleHandler.onRender() を実装する Apex クラスを指定し、このクラスをキャンバスアプリケーションに関連付ける必要があります。onRender() 実装では、カスタムコードを使用してアプリケーションの動作を制御できます。
Salesforce は、アプリケーションが表示される直前に onRender() の実装をコールします。現在のコンテキスト情報は、Canvas.RenderContext パラメータでこのメソッドに渡されます。
onRender() 実装では、次のコンテキスト情報を取得できます。
- アプリケーションコンテキストデータ (キャンバスアプリケーション名、URL、バージョン、名前空間など)。
- 環境コンテキストデータ (表示場所、下位の表示場所、オブジェクト項目名、カスタムパラメータ)。
- キャンバスアプリケーション URL のアプリケーションドメイン以降の部分。
- キャンバスアプリケーションがオブジェクトページに表示される場合に Salesforce が Record コンテキストデータを返すオブジェクト項目のリスト。<apex:canvasApp> コンポーネントを使用してキャンバスアプリケーションが Visualforce ページに表示され、その Visualforce ページがオブジェクトに関連付けられている場合などにキャンバスアプリケーションがオブジェクトページに表示されます。
- キャンバスアプリケーションに渡されるカスタムパラメータ。
次の処理を行う onRender() 実装の例を以下に示します。
- アプリケーションのバージョン情報をチェックし、サポートされていないバージョンの場合は CanvasRenderException を発生させます。
- 「/alternatePath」を元の URL のドメイン部分に追加して、現在のキャンバスアプリケーション URL を上書きします。
- キャンバスアプリケーションが取引先ページに表示されることを予測して、Name、BillingAddress、および YearStarted を含めるようにオブジェクト項目のリストを設定します。
- 新しい「newCustomParam」パラメータを追加して、カスタムパラメータのセットを上書きします。現在のパラメータのセットは、最初にローカルで取得されてキャッシュされます。setParametersAsJSON() をコールするときに現在のカスタムパラメータのセットが失われないように、新しいパラメータがキャッシュリストに追加されます。
1public void onRender(Canvas.RenderContext renderContext) {
2
3 // Get the Application and Environment context from the RenderContext
4 Canvas.ApplicationContext app = renderContext.getApplicationContext();
5 Canvas.EnvironmentContext env = renderContext.getEnvironmentContext();
6
7 // Check the application version
8 Double currentVersion = Double.valueOf(app.getVersion());
9 if (currentVersion <= 5){
10 // Versions lower than 5 are no longer supported in this example
11 throw new Canvas.CanvasRenderException('Error: Versions earlier than 5 are no longer supported.');
12 }
13
14 // Override app URL, replacing portion after domain with '/alternatePath'
15 app.setCanvasUrlPath('/alternatePath');
16
17 // Add Name, BillingAddress and YearStarted to fields
18 // (assumes we'll run from a component on the Account detail page)
19 Set<String> fields = new Set<String>{'Name','BillingAddress','YearStarted'};
20 env.addEntityFields(fields);
21
22 // Add a new custom param to the set of custom params
23 // First, get the current custom params
24 Map<String, Object> previousParams =
25 (Map<String, Object>) JSON.deserializeUntyped(env.getParametersAsJSON());
26 // Add a 'newCustomParam' to our Map
27 previousParams.put('newCustomParam','newValue');
28 // Now, replace the parameters
29 env.setParametersAsJSON(JSON.serialize(previousParams));
30}