Canvas 開発者ガイド - Salesforce.com

Canvas 開発者ガイド
バージョン 37.0, Summer ’16
@salesforcedocs
最終更新日: 2016/04/22
本書の英語版と翻訳版で相違がある場合は英語版を優先するものとします。
© Copyright 2000–2016 salesforce.com, inc. All rights reserved. Salesforce およびその他の名称や商標は、salesforce.com,
inc. の登録商標です。本ドキュメントに記載されたその他の商標は、各社に所有権があります。
目次
はじめよう
.......................................................1
第 1 章: Force.com Canvas の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Force.com Canvas のシナリオ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
キャンバスアプリケーションの表示場所 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
サポートされるブラウザ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
サポート対象の Salesforce のエディション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
必要なユーザ権限 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
ユーザインターフェースの考慮事項 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
キャンバスアプリケーションのプロセス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
キャンバス個人用アプリケーション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
キャンバス個人用アプリケーションのプロセス . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
組織でのキャンバス個人用アプリケーションの有効化 . . . . . . . . . . . . . . . . . . . . . 10
キャンバス個人用アプリケーションへのアプリケーションの変更 . . . . . . . . . . . . . 11
キャンバス個人用アプリケーションのアンインストール . . . . . . . . . . . . . . . . . . . . 12
第 2 章: クイックスタート . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
前提条件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
アプリケーションの作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
アプリケーションの場所の設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
第 3 章: クイックスタート — 詳細 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
前提条件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
GitHub からのプロジェクトのコピー . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
ローカルでの Web アプリケーションの実行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
キャンバスアプリケーションの作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
キャンバスアプリケーションにアクセスできるユーザの設定 . . . . . . . . . . . . . . . . . . . . 25
Heroku への Web アプリケーションのリリース . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
キャンバスアプリケーションの更新 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
キャンバスアプリケーションのパッケージ化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
キャンバスアプリケーションパッケージのアップロード . . . . . . . . . . . . . . . . . . . . . . . 30
キャンバスアプリケーションのインストール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
インストール済みキャンバスアプリケーションにアクセスできるユーザの設定 . . . . . . . 31
Force.com Canvas の使用
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
第 4 章: Force.com Canvas SDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Force.com Canvas SDK の参照 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
認証 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
目次
署名付き要求認証 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
OAuth 認証 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
キャンバスアプリケーションの SAML シングルサインオン . . . . . . . . . . . . . . . . . . 47
キャンバスアプリケーションでのコンテキストの取得 . . . . . . . . . . . . . . . . . . . . . . . . . 47
クロスドメイン XHR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Chatter ユーザリストの取得 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Chatter フィードへの投稿 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
キャンバスアプリケーションのサイズ変更 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
自動的なキャンバスアプリケーションのサイズ変更 . . . . . . . . . . . . . . . . . . . . . . . 50
明示的なキャンバスアプリケーションのサイズ変更 . . . . . . . . . . . . . . . . . . . . . . . 51
キャンバスアプリケーションのサイズの取得 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
親イベントの登録 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
キャンバスアプリケーションの方向の変更の処理 . . . . . . . . . . . . . . . . . . . . . . . . 53
キャンバスアプリケーションイベントの実装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
キャンバスアプリケーションイベントの考慮事項 . . . . . . . . . . . . . . . . . . . . . . . . 54
キャンバスアプリケーションイベントの作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
キャンバスアプリケーションイベントの登録 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
キャンバスアプリケーションイベントからの登録解除 . . . . . . . . . . . . . . . . . . . . . 57
キャンバスアプリケーションでのストリーミング API の使用 . . . . . . . . . . . . . . . . . . . . 57
ストリーミング API イベントの使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
ストリーミング API イベントの登録 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
ストリーミング API イベントからの登録解除 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
キャンバスアプリケーションのデバッグ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
キャンバスアプリケーションでの <select> タグの使用 . . . . . . . . . . . . . . . . . . . . . . . . . 60
第 5 章: キャンバスアプリケーションと Visualforce ページ . . . . . . . . . . . . . . . . . . 61
Visualforce ページのコード例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Visualforce の考慮事項 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
apex:canvasApp コンポーネント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
レコードオブジェクトで返される項目 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Visualforce ページとキャンバスアプリケーション間でのイベントの使用 . . . . . . . . . . . . 68
Visualforce ページからのキャンバスイベントの公開 . . . . . . . . . . . . . . . . . . . . . . . 69
Visualforce ページでのキャンバスアプリケーションのサイズ変更 . . . . . . . . . . . . . 70
イベントの登録 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Visualforce ページでのイベントからの登録解除 . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
第 6 章: ページレイアウトまたはモバイルカードのキャンバスアプリケーショ
ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
ページレイアウトでのキャンバスアプリケーションの表示場所 . . . . . . . . . . . . . . . . . . 73
ページレイアウトへのキャンバスアプリケーションの追加 . . . . . . . . . . . . . . . . . . . . . 73
第 7 章: パブリッシャーのキャンバスアプリケーション . . . . . . . . . . . . . . . . . . . . 75
キャンバスアプリケーションの場所の設定とアクションの作成 . . . . . . . . . . . . . . . . . . 76
アクションの手動作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
目次
Force.com Canvas SDK のパブリッシャーイベント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
パブリッシャーのコンテキストに関する考慮事項 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
パブリッシャーのキャンバスアプリケーションアクセスに関する考慮事項 . . . . . . . . . . 80
第 8 章: Chatter フィードのキャンバスアプリケーション . . . . . . . . . . . . . . . . . . . 81
Chatter フィードのコンテキストに関する考慮事項 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Chatter フィードのキャンバスアプリケーションアクセスに関する考慮事項 . . . . . . . . . 83
第 9 章: Salesforce1 アプリケーションのキャンバス . . . . . . . . . . . . . . . . . . . . . . . 84
キャンバスアプリケーションの場所の設定とナビゲーションメニューへの追加 . . . . . . 86
Salesforce1 のコンテキストに関する考慮事項 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Salesforce1 のアクセスに関する考慮事項 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Salesforce1 カスタムアイコン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
キャンバスアプリケーションで使用する Salesforce1 の navigation メソッド . . . . . . . . . . 89
第 10 章: アプリケーションライフサイクルのカスタマイズ . . . . . . . . . . . . . . . . . 93
CanvasLifecycleHandler の作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
CanvasLifecycleHandler とアプリケーションの関連付け . . . . . . . . . . . . . . . . . . . . . . . . . 94
CanvasRequest コンテキストデータの絞り込み . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
キャンバスアプリケーションの動作の制御 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
ユーザエラーメッセージの表示 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
CanvasLifecycleHandler 実装のテスト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
CanvasLifecycleHandler クラスの配布 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
リファレンス
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
第 11 章: オブジェクト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
CanvasRequest
Client . . . .
Context . .
Controller . . . .
SignedRequest .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
100
103
104
120
120
第 12 章: Force.com Canvas の制限 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
はじめよう
第1章
トピック:
•
Force.com Canvas の
シナリオ
•
キャンバスアプリ
ケーションの表示
場所
•
サポートされるブ
ラウザ
•
サポート対象の
Salesforce のエディ
ション
•
必要なユーザ権限
•
ユーザインター
フェースの考慮事
項
•
キャンバスアプリ
ケーションのプロ
セス
•
キャンバス個人用
アプリケーション
Force.com Canvas の概要
Force.com Canvas を使用すると、サードパーティのアプリケーションを Salesforce に簡
単に統合することができます。Force.com Canvas は、アプリケーションをキャンバス
アプリケーションとして公開するために使用できるツールと JavaScript API のセットで
す。これを活用することで、ユーザは任意の新しいアプリケーションまたは既存の
アプリケーションを Salesforce の一部として使用できるようになります。
外部アプリケーションを再設計して再統合する代わりに、これらのツールを使用し
て、Force.com Canvas 内の独自技術を統合できるようになりました。Force.com Canvas に
は、次の項目を処理するためのツールが用意されています。
• 認証 — アプリケーションで認証が必要な場合、署名付き要求または OAuth 2.0 を
使用してそれを実装できます。
• コンテキスト — キャンバスアプリケーションが実行されている環境に関するコ
ンテキスト情報を取得できる API サポート。
• クロスドメイン XHR — クロスドメイン XML HTTP 要求を Salesforce ドメインに戻す
ための JavaScript サポート。
• サイズ変更 — キャンバスアプリケーションをサイズ変更する機能をサポートす
る方法。
• イベント — イベントは、キャンバスアプリケーション間でイベントを送受信す
るための JavaScript ベースの方法を提供します。イベントを使用すると、単一ペー
ジ上の複数のキャンバスアプリケーション間のコミュニケ ションが可能になり
ます。
• Visualforce のキャンバスアプリケーション — キャンバスアプリケーションを
Visualforce ページで公開できる Visualforce コンポーネント。
• パブリッシャーのキャンバスアプリケーション — キャンバスアプリケーション
をカスタムアクションとして追加し、キャンバスアプリケーションを含むように
パブリッシャーを拡張できます。
• Chatter フィードのキャンバスアプリケーション — キャンバスアプリケーション
をフィード項目として公開できます。
• Salesforce1 アプリケーションのキャンバス — Salesforce1 でキャンバスアプリケー
ションを使用可能にします。
1
Force.com Canvas の概要
キャンバスアプリケーションとして公開するサードパーティアプリケーションは、
どの言語でも作成できます。唯一の要件として、アプリケーションに安全な URL
(HTTPS) がある必要があります。
関連トピック:
Force.com Canvas のシナリオ
キャンバスアプリケーションのプロセス
クイックスタート
2
Force.com Canvas の概要
Force.com Canvas のシナリオ
Force.com Canvas のシナリオ
Force.com Canvas が実装される一般的なシナリオとして、大まかに次の 2 つの例があります。
• アプリケーション統合 — クラウドアプリケーションを作成するパートナー、システムインテグレータ、ま
たは顧客で、Salesforce を使用してこれらのアプリケーションを統合したいと思っている場合。
• アプリケーション合理化/エンタープライズデスクトップ — Salesforceのほかにもユーザがアクセスする多数
の既存のアプリケーションを持つ大規模組織に属していて、ユーザが 1 つの場所ですべてのタスクを完了
できるように、これらのアプリケーションを Salesforce に統合したいと思っている場合。
関連トピック:
Force.com Canvas の概要
キャンバスアプリケーションの表示場所
キャンバスアプリケーションの表示場所
次のように、キャンバスアプリケーションはいくつかの場所に表示されます。
• キャンバスアプリケーションが作成された組織のキャンバスアプリケーションのプレビューア内
• キャンバスアプリケーションがChatterフィードに表示されるようにコーディングされ、現在のユーザにキャ
ンバスアプリケーションへのアクセス権がある場合は、Chatter フィード内
• Chatter タブの Chatter アプリケーションリストへのアクセス権をユーザが持つ場合、そのリスト内
• アクセス権を持つすべてのユーザに対して、Salesforce1 内にナビゲーションメニューのオプションとして
• コールセンターの定義ファイルに Open CTI 通話制御ツールを追加した後、そのツール内
• クイックアクションとして表示するよう設定した場合、Chatter パブリッシャーおよび Salesforce1 アクション
バー内
• カスタムコンソールコンポーネントとして追加した後、Salesforce コンソール内
• Visualforce ページに追加され、ユーザに対してそのページが有効化された後、そのページ内
• Chatter アプリケーションリストにアクセスできるユーザには、Chatter アプリケーションリストの [プロファ
イル] ページ内
• キャンバスアプリケーションをページレイアウトに追加した後、標準オブジェクトまたはカスタムオブジェ
クトのページレイアウト内。キャンバスアプリケーションをページレイアウトのどこに配置したかに応じ
て、キャンバスアプリケーションはレコード詳細ページまたは Salesforce1 のモバイルカードに表示されま
す。
インストール済みのキャンバスアプリケーションの表示場所は、Salesforceに接続アプリケーションを作成する
ときに、Locations 項目で選択する値によって異なります。
• Chatter フィード — キャンバスアプリケーションをフィードに表示します。このオプションが選択されてい
る場合、CanvasPost フィード項目を作成し、現在のユーザがキャンバスアプリケーションにアクセスできる
ようにする必要があります。
3
Force.com Canvas の概要
サポートされるブラウザ
• [Chatter] タブ — キャンバスアプリケーションを Chatter タブのアプリケーションナビゲーションリストに表
示します。このオプションを選択すると、キャンバスアプリケーションはその場所に自動的に表示されま
す。
• コンソール — キャンバスアプリケーションを Salesforce コンソールのフッターまたはサイドバーに表示しま
す。このオプションを選択した場合、キャンバスアプリケーションをカスタムコンソールコンポーネント
として追加して、コンソールのどこにキャンバスアプリケーションを表示するのかを選択する必要があり
ます。
• レイアウトおよびモバイルカード — キャンバスアプリケーションをページレイアウトまたはモバイルカー
ドに表示できます。このオプションを選択した場合、ページレイアウトに追加してキャンバスアプリケー
ションが表示される場所を選択します。
• モバイルナビゲーション — キャンバスアプリケーションを Salesforce1 のナビゲーションメニューからアク
セス可能にします。
• Open CTI — キャンバスアプリケーションを通話制御ツールに表示します。このオプションを選択した場合、
キャンバスアプリケーションを表示するにはコールセンターの定義ファイルにキャンバスアプリケーショ
ンを指定する必要があります。
• パブリッシャー — キャンバスアプリケーションを Chatter パブリッシャーおよび Salesforce1 アクションバー
に表示します。このオプションが選択されている場合は、キャンバスカスタムアクションを作成して、グ
ローバルパブリッシャーレイアウトまたはオブジェクトのページレイアウトに追加する必要もあります。
• Visualforce ページ — キャンバスアプリケーションを Visualforce ページに表示できます。Visualforce ページに
キャンバスアプリケーションを公開するために <apex:canvasApp> コンポーネントを追加する場合、キャ
ンバスアプリケーションの表示場所にこの場所を必ず選択してください。これ以外の場所を選択するとエ
ラーになります。
関連トピック:
Force.com Canvas の概要
アプリケーションの場所の設定
サポートされるブラウザ
サポートされるブラウザ
Force.com Canvas では、次のブラウザの最新のバージョンがサポートされます。
• Mozilla® Firefox® (推奨)
• Google Chrome™
• Microsoft® Internet Explorer® (互換モードは必ず無効にしてください)
• Apple® Safari® ([Cookie をブロック] の設定が [しない] に設定されていることを確認してください)
特定のバージョンと重要な考慮事項については、Salesforceヘルプのサポートされるブラウザに関するトピック
を参照してください。
4
Force.com Canvas の概要
サポート対象の Salesforce のエディション
アプリケーションでセッション Cookie が使用される場合、サードパーティの Cookie を許可するように P3P ヘッ
ダーを設定するか、すべてのセッション Cookie を許可するようにブラウザの設定を変更する必要が生じること
があります。
関連トピック:
サポートされるブラウザ
Force.com Canvas の概要
サポート対象の Salesforce のエディション
サポート対象の Salesforce のエディション
Force.com Canvas では、次の Salesforce エディションをサポートしています。
エディション
キャンバスアプリケーショ キャンバスアプリケーショ キャンバスアプリケーショ
ンの作成
ンの公開
ンのインストール
Group
○*
×
○*
Professional
○*
×
○*
Enterprise
○
×
○
Unlimited
○
×
○
Performance
○
×
○
Developer
○
○
○
* Group Edition と Professional Edition は、組織でプロファイルとページレイアウトが有効な場合にのみ、許可され
ているユーザの値が [管理者が承認したユーザは事前承認済み] のキャンバスアプリケーションを使用または作
成できます。
関連トピック:
Force.com Canvas の概要
必要なユーザ権限
必要なユーザ権限
キャンバスアプリケーションの作成、およびキャンバスアプリケーションのプレビューアでの表示には、次の
ユーザ権限が必要です。
• 「アプリケーションのカスタマイズ」
5
Force.com Canvas の概要
ユーザインターフェースの考慮事項
• 「すべてのデータの編集」
関連トピック:
Force.com Canvas の概要
キャンバスアプリケーションにアクセスできるユーザの設定
インストール済みキャンバスアプリケーションにアクセスできるユーザの設定
ユーザインターフェースの考慮事項
キャンバスのサイズ
キャンバスアプリケーションのフレームサイズはアプリケーションが表示されている場所によって異なりま
す。SDK を使用する場合、これらの値は Dimensions オブジェクトで返されます。
メモ: キャンバスアプリケーションを Salesforce1 で使用する場合は、モバイルデバイスの画面サイズを考
慮してください。詳細は、「Salesforce1 アプリケーションのキャンバス」を参照してください。
場所
説明
Chatter タブ
デフォルトのサイズは 800 ピクセル (幅) × 900 ピクセル (高
さ) です。最大サイズは 1,000 ピクセル (幅) × 2,000 ピクセル
(高さ) です。
Chatter フィード
デフォルトのサイズは 420 ピクセル (幅) × 100 ピクセル (高
さ) です。最大サイズは 420 ピクセル (幅) × 400 ピクセル (高
さ) です。
Open CTI
デフォルトのサイズと最大サイズはカスタムコンソールコ
ンポーネントの設定方法によって決まります。
パブリッシャー
デフォルトの高さは、キャンバスパブリッシャーアクショ
ンの設定方法によって決まります。デフォルトの幅は 522
ピクセルです。最大サイズは 522 ピクセル (幅) × 500 ピクセ
ル (高さ) です。
Salesforce コンソール
デフォルトのサイズと最大サイズはカスタムコンソールコ
ンポーネントの設定方法によって決まります。
Visualforce ページ
デフォルトのサイズは 800 ピクセル (幅) × 900 ピクセル (高
さ) です。開発者は apex:canvasApp Component の属性を変更
することで、これらのサイズを変更できます。
6
Force.com Canvas の概要
キャンバスアプリケーションのプロセス
ロゴ画像
キャンバスアプリケーションに関連付けられたロゴ画像は、ユーザがそのキャンバスアプリケーションをイン
ストールするときか、アプリケーションの実行を許可するように要求され、OAuth 認証を行っている間に表示
されます。256 ピクセル (高さ) × 256 ピクセル (幅) のサイズの画像を使用することをお勧めします。
アイコン画像
キャンバスアプリケーションに関連付けられたアイコン画像は、次の場所に表示されます。
• Chatter タブの Chatter アプリケーションリストにある、自分のキャンバスアプリケーションへのリンクの左
側
• キャンバスアプリケーションのプレビューアにある、自分のキャンバスアプリケーションへのリンクの左
側
• Salesforce1 のナビゲーションメニュー
Salesforce1 と Salesforce の両方でアイコンが適切に表示されるように、60 ピクセル (幅) × 60 ピクセル (高さ) のサ
イズの画像を使用することをお勧めします。Salesforce1 でアイコンを表示しない場合は、16 ピクセル (幅) × 16
ピクセル (高さ) よりも小さいサイズのアイコンを使用できます。
サムネイル画像
キャンバスアプリケーションのフィード項目に関連付けられたサムネイル画像は、フィードのキャンバスアプ
リケーションにアクセスすると表示されます。指定されている場合は、この画像はフィード項目のタイトルと
説明の横に表示されます。
120 ピクセル (幅) × 120 ピクセル (高さ) 以下のサイズの画像を使用することをお勧めします。
関連トピック:
Force.com Canvas の概要
キャンバスアプリケーションのサイズ変更
キャンバスアプリケーションのプロセス
キャンバスアプリケーションのプロセス
キャンバスアプリケーションを作成、公開、インストール、実行するプロセスでは、開発者、システム管理
者、ユーザが、次の図のようにアクションを実行する必要があります。
7
Force.com Canvas の概要
キャンバスアプリケーションのプロセス
関連トピック:
Force.com Canvas の概要
クイックスタート
クイックスタート — 詳細
キャンバス個人用アプリケーションのプロセス
組織でのキャンバス個人用アプリケーションの有効化
キャンバスアプリケーションのパッケージ化
8
Force.com Canvas の概要
キャンバス個人用アプリケーション
キャンバス個人用アプリケーション
キャンバス個人用アプリケーションでは、複数の組織にわたるエンドユーザ向けに、専用に設計した接続アプ
リケーションを作成できます。キャンバス個人用アプリケーションを使用すると、作成したアプリケーション
をインストール可能にすることができます。各組織のシステム管理者がアプリケーションを配布する必要はあ
りません。
以前は、システム管理者のみがキャンバスアプリケーションをインストールできました。システム管理者は引
き続きキャンバスアプリケーションをインストールできますが、エンドユーザが自分でインストールできる
キャンバス個人用アプリケーションを開発者が作成できるようになりました。
エンドユーザは、Chatter タブから直接キャンバス個人用アプリケーションをインストールして使用します
(Salesforceの適切な権限を持つ場合)。エンドユーザがアプリケーションをインストールすると、アプリケーショ
ンによる Salesforce データの使用を許可するように求められます。
キャンバス個人用アプリケーションの作成は、次の点を除いて、キャンバスアプリケーションの作成と似てい
ます。
• ユーザは、アクセス方法として OAuth と署名付き要求のどちらを使用しているかに関係なく、最初にアプ
リケーションにアクセスしたときにキャンバス個人用アプリケーションを承認または拒否するように求め
られます。これは、最初のアクセスで OAuth 承認フローがトリガされるためです。最初のアクセスの後は、
ユーザは透過的に識別され、承認や資格情報は求められません (Salesforce にログインしている限り)。
• キャンバス個人用アプリケーションでは、アプリケーションのメタデータのみがインストールされ、他の
パッケージコンポーネント (Apex クラスや Visualforce コンポーネントなど) はインストールされません。これ
によって、アプリケーションを容易に広範囲にインストールでき、アプリケーションの機能をエンドユー
ザが必要とする内容に制限できます。
管理パッケージと未管理パッケージについての詳細は、『ISVforce ガイド』の「パッケージの概要」を参照し
てください。
キャンバス個人用アプリケーションのプロセス
キャンバス個人用アプリケーションの作成は、キャンバスアプリケーションの作成と似ています。ただし、
キャンバス個人用アプリケーションはエンドユーザに直接配布します。エンドユーザは、指定されたリンクか
らそのアプリケーションをインストールし、アプリケーションを Salesforce データと統合します。アプリケー
ションをインストールしたら、エンドユーザは Chatter タブから直接実行します。
キャンバス個人用アプリケーションをエンドユーザが使用できるようにする手順は次のとおりです。
1. 組織のシステム管理者が対象組織内の個人用アプリケーションを有効にしていることを確認します。詳細
は、「組織でのキャンバス個人用アプリケーションの有効化」 (ページ 10)を参照してください。
2. アプリケーションを作成し、これをキャンバス個人用アプリケーションとして指定します。詳細は、「キャ
ンバス個人用アプリケーションへのアプリケーションの変更」 (ページ 11)を参照してください。
3. エンドユーザは、指定されたアプリケーションリンクをクリックします。たとえば、リンクは Web サイト
に表示されるボタンであったり、リンクがメールで送信されたりします。リンクをクリックすると、アプ
9
Force.com Canvas の概要
組織でのキャンバス個人用アプリケーションの有効化
リケーションの OAuth 承認プロセスが呼び出されます。たとえば、アプリケーションへのリンクは、次の
ように表示されます。
https://login.salesforce.com/services/oauth2/authorize?response_type=code&client_id=<your_client_id>&redirect_uri=<your_redirect_uri>
4. プロンプトが表示されたら、エンドユーザはアプリケーションを承認し、Salesforce データへのアクセスを
許可します。
5. OAuth 承認フローは非同期モードでキャンバスインストーラをトリガします。キャンバスインストーラは
API からアプリケーションのコンテキスト情報を取得し、アプリケーションのメタデータをインストールし
ます。アプリケーションはバックグラウンドでインストールされ、インストールが完了するとエンドユー
ザにメールが送信されます。
メモ: キャンバス個人用アプリケーションのメタデータのみがインストールされます。キャンバスア
プリケーションのパッケージに通常含まれる追加のコンポーネントは、アプリケーションと一緒には
インストールされません。これは、ユーザが必要な機能のみを取得し、すばやく軽快にインストール
できることを意味します。ただし、システム管理者が組織全体にキャンバス個人用アプリケーション
をインストールするように選択すると、キャンバスアプリケーションと同様に、追加のパッケージコ
ンポーネントがインストールされます。
6. ユーザは、Chatter タブからアプリケーションのアイコンをクリックして、キャンバス個人用アプリケーショ
ンの使用を開始します。
関連トピック:
キャンバスアプリケーションのプロセス
キャンバス個人用アプリケーションへのアプリケーションの変更
組織でのキャンバス個人用アプリケーションの有効化
組織のシステム管理者は、その組織内でユーザがキャンバス個人用アプリケーションをインストールできるか
どうかを制御します。キャンバス個人用アプリケーションを作成する前に、組織のシステム管理者がキャンバ
ス個人用アプリケーションを有効にしていることを確認してください。
組織のシステム管理者がキャンバス個人用アプリケーションを有効にする手順は次のとおりです。
1. [設定] から、[クイック検索] ボックスに「接続アプリケーション」と入力し、接続アプリケーションを管理
するオプションを選択します。
2. [アプリケーションアクセス設定] の横にある [編集] をクリックします。
3. [キャンバス個人用アプリケーションのインストールをユーザに許可する] チェックボックスをオンにしま
す。
10
Force.com Canvas の概要
キャンバス個人用アプリケーションへのアプリケーショ
ンの変更
4. [保存] をクリックします
システム管理者がこれらの手順を完了したら、開発者はキャンバスアプリケーションをキャンバス個人用アプ
リケーションとして指定できます。詳細は、「キャンバス個人用アプリケーションへのアプリケーションの変
更」 (ページ 11)を参照してください。
関連トピック:
必要なユーザ権限
キャンバス個人用アプリケーションのプロセス
キャンバス個人用アプリケーションへのアプリケーションの変更
アプリケーションの開発者は、アプリケーションを最初に作成するときにキャンバス個人用アプリケーション
として有効にすることも、既存のキャンバスアプリケーションをキャンバス個人用アプリケーションにするこ
ともできます。このプロセスには、組織設定が有効であることの確認と、アプリケーションの詳細ページの設
定を有効にする手順が含まれます。
アプリケーションをキャンバス個人用アプリケーションにする手順は次のとおりです。
• アプリケーションの対象組織のシステム管理者は、その組織のキャンバス個人用アプリケーションを有効
にする必要があります。これを行うには、[設定] から [クイック検索] ボックスに「接続アプリケーション」
と入力し、接続アプリケーションを管理するオプションを選択します。
• 次のように、アプリケーションをキャンバス個人用アプリケーションとして有効にします。
1. [場所] 項目で、[[Chatter] タブ]を選択します。キャンバス個人用アプリケーションがある場合、Chatter タ
ブのみにキャンバス個人用アプリケーションが表示されます。
2. [キャンバスアプリケーション設定] で、[キャンバス個人用アプリケーションとして有効化]チェックボッ
クスをオンにします。この設定は、[[Chatter] タブ] がアプリケーションの場所として選択されていると
きのみ使用できます。
11
Force.com Canvas の概要
キャンバス個人用アプリケーションのアンインストール
キャンバス個人用アプリケーションを作成し、そのアプリケーションへのリンクを指定すると、エンドユーザ
はそのアプリケーションにアクセスして自分でインストールできます。
関連トピック:
キャンバス個人用アプリケーションのプロセス
キャンバス個人用アプリケーションのアンインストール
ユーザがキャンバス個人用アプリケーションをインストールして許可すると、更新トークンが作成され、この
更新トークンが OAuth トークンを生成します。エンドユーザによるこのアプリケーションへのアクセスを停止
するには、この更新トークンを取り消す必要があります。このアクションによって、キャンバス個人用アプリ
ケーションが事実上アンインストールされます。
キャンバス個人用アプリケーションをアンインストールする手順は次のとおりです。
• 組織のシステム管理者が、[設定] の [接続アプリケーションの OAuth の利用状況] ページで、組織の 1 人また
はすべてのユーザの更新トークンを削除します。
• エンドユーザが、[接続アプリケーション] リストのキャンバス個人用アプリケーションを取り消します。
• システム管理者が、[設定] の [アプリケーションを管理する] ページで、組織からキャンバス個人用アプリ
ケーションを明示的にアンインストールします。このアクションによって、アプリケーションが組織から
削除されます。
キャンバス個人用アプリケーションがインストールされた後に組織のシステム管理者が組織内のキャンバス個
人用アプリケーションを無効にした場合、キャンバス個人用アプリケーションは引き続き機能します。これ
は、組織のキャンバス個人用アプリケーションの設定に関係なく、アプリケーションのバージョン番号と URL
が保持されるためです。
12
Force.com Canvas の概要
キャンバス個人用アプリケーションのアンインストール
ただし、システム管理者はアプリケーションを明示的にアンインストールして、組織内で使用できないように
完全に削除できます。
関連トピック:
署名付き要求認証
13
第2章
トピック:
•
前提条件
•
アプリケーション
の作成
•
アプリケーション
の場所の設定
クイックスタート
ここでは、Heroku のクイックスタートを使用して、Force.com Canvas の使用を簡単に
開始する方法を説明します。Heroku のクイックスタートでは、選択したテンプレー
トに応じて Java または Ruby で「hello world」アプリケーションが Heroku に作成されま
す。同時に、対応するキャンバスアプリケーションが Salesforce に作成されます。
Heroku アプリケーションは、Force.com Canvas SDK をコールする「hello world」Web ペー
ジです。これにより、現在のユーザに関する情報を表示したり、現在のユーザの
Chatter フィードを投稿したりできます。
関連トピック:
前提条件
アプリケーションの作成
アプリケーションの場所の設定
14
クイックスタート
前提条件
前提条件
クイックスタートの手順を実行するには、適切なアクセス権とツールが必要です。
• Developer Edition 組織にアクセスします。
まだ Force.com 開発者コミュニティのメンバーでない場合、developer.salesforce.com/signup にアク
セスし、Developer Edition 組織のサインアップの説明に従ってください。すでに Enterprise Edition、Unlimited
Edition、または Performance Edition を所有している場合でも、組織の使用中のデータを保護するために、サン
プルデータに対するソリューションの開発、ステージングおよびテストには Developer Edition を使用します。
これは、特に、(データをただ参照するだけのアプリケーションに対し) データを挿入、更新または削除す
るアプリケーションの場合に該当します。
既存の Developer Edition 組織があるにもかかわらず [キャンバスアプリケーションのプレビューア] メニュー
項目が [設定] に表示されない場合、Salesforce にお問い合わせください。
• 「アプリケーションのカスタマイズ」および「すべてのデータの編集」ユーザ権限。ほとんどの場合、管
理者にはすでにこれらの権限があります。管理者以外の場合、キャンバスアプリケーションのプレビュー
アを表示してキャンバスアプリケーションを作成できるようにこれらの権限を追加する必要があります。
• Heroku アカウント。https://api.heroku.com/signup に移動し、Heroku アカウントを作成します。
• 作成した「hello world」アプリケーションのローカルインスタンスを実行する Java バージョン 1.6 または 1.7
(アプリケーションの Heroku インスタンスでは、正しいバージョンの Java が自動的にダウンロードされま
す)。
関連トピック:
クイックスタート
サポート対象の Salesforce のエディション
アプリケーションの作成
アプリケーションの作成
ここでは、Heroku「hello world」アプリケーションおよびそれに関連付けられたキャンバスアプリケーションを
Salesforce 組織で作成する手順を説明します。
1. Salesforce で、[設定] から [クイック検索] ボックスに「キャンバスアプリケーションのプレビューア」と入力
し、[キャンバスアプリケーションのプレビューア] を選択します。
2. [Heroku のクイックスタート] をクリックします。
3. [テンプレート] 項目で、[Java – クイックスタートテンプレート] を選択します。
4. [キャンバスアプリケーション名] 項目に、30 文字までの一意の名前を入力します。
5. [Heroku アプリケーション名] 項目に、文字で始まり、小文字、数字、ダッシュのみを含む 30 文字までの
一意の名前を入力します。newappName は、すべての Heroku アプリケーションで一意である必要がありま
す。この名前は、newappName.herokuapp.com のようにアプリケーションの URL の一部になります。
6. [認証種別] 項目で、[ユーザ名/パスワード] を選択します。
15
クイックスタート
アプリケーションの場所の設定
7. [Heroku ユーザ名] 項目に、Heroku にログインするために使用するアカウントのユーザ名を入力します。
通常、これはメールアドレスになります。Heroku アプリケーションは、このユーザのログイン情報に基づ
いて作成されます。
メモ: この項目には、最大で 30 文字を含めることができます。Heroku ユーザ名が 30 文字を超える場
合、アカウントに関連付けられた API キーを使用する必要があります。この値は、Heroku [私の取引先]
ページで確認できます。
8. [Heroku パスワード] 項目に、Heroku にログインするために使用するアカウントのパスワードを入力しま
す。
ヒント: Heroku アカウントのユーザ名とパスワードを使用する代わりに、アカウントの関連付けられ
ている API キーを使用することもできます。この値は、Heroku [取引先] ページで確認できます。また
は、Heroku OAuth を介して Heroku OAuth フローを開始するか、現在 Heroku にログインしている場合は
Heroku トークンを使用することができます。
9. [作成] をクリックします。アプリケーションが左側のナビゲーションペインに表示されます。
「Heroku コピーである REST サービスへの POST を実行中にエラーが発生しました: 読み取りタイムアウト。」
のようなエラーが表示された場合、Heroku への接続操作がタイムアウトしたことを意味します。
http://status.heroku.com で Heroku の状況を確認できます。
10. 左側にある新しいアプリケーションへのリンクをクリックします。
アプリケーションが表示され、Hello User.FullName というメッセージと現在のユーザに関するその他
の情報が表示されます。
キャンバスアプリケーションが作成されました。「アプリケーションの場所の設定」の手順に従って、アプリ
ケーションを表示できる場所を設定するまで、キャンバスアプリケーションを表示できる場所はキャンバスア
プリケーションのプレビューアに限定されます。この手順では、各組織にアプリケーションをインストールし
た後で、ユーザがアプリケーションを参照する場所を定義します。
Heroku のクイックスタートにより、バックグラウンドでキャンバスアプリケーションの [許可されているユー
ザ] が設定されます。これには、システム管理者が承認したユーザとプロファイルが含まれます。たとえば、
ユーザプロファイルがシステム管理者の場合、そのプロファイルが作成したキャンバスアプリケーションに追
加され、そのプロファイルが設定された任意のユーザがキャンバスアプリケーションにアクセスできるように
なります。
関連トピック:
クイックスタート
前提条件
Force.com Canvas の制限
アプリケーションの場所の設定
アプリケーションの場所の設定
ここでは、Salesforce のユーザにキャンバスアプリケーションを表示する場所を指定する手順を説明します。
16
クイックスタート
アプリケーションの場所の設定
1. Salesforce アプリケーションで、[設定] から [クイック検索] ボックスに「アプリケーション」と入力し、[ア
プリケーション] を選択します。
2. [接続アプリケーション] 関連リストで、作成したアプリケーションをクリックして [編集] をクリックしま
す。
3. [キャンバスアプリケーション設定] セクションの [場所] 項目で、キャンバスアプリケーションをユーザに
表示する場所を選択します。このステップでは、[[Chatter] タブ] を選択します。
• Chatter フィード — キャンバスアプリケーションをフィードに表示します。このオプションが選択され
ている場合、CanvasPost フィード項目を作成し、現在のユーザがキャンバスアプリケーションにアクセ
スできるようにする必要があります。
• [Chatter] タブ: キャンバスアプリケーションを Chatter タブのアプリケーションナビゲーションリストに
表示します。このオプションを選択すると、キャンバスアプリケーションはその場所に自動的に表示さ
れます。
• コンソール — キャンバスアプリケーションを Salesforce コンソールのフッターまたはサイドバーに表示
します。このオプションを選択した場合、キャンバスアプリケーションをカスタムコンソールコンポー
ネントとして追加して、コンソールのどこにキャンバスアプリケーションを表示するのかを選択する必
要があります。
• レイアウトおよびモバイルカード — キャンバスアプリケーションをページレイアウトまたはモバイル
カードに表示できます。このオプションを選択した場合、ページレイアウトに追加してキャンバスアプ
リケーションが表示される場所を選択します。
• モバイルナビゲーション — キャンバスアプリケーションを Salesforce1 のナビゲーションメニューからア
クセス可能にします。
• Open CTI — キャンバスアプリケーションを通話制御ツールに表示します。このオプションを選択した場
合、キャンバスアプリケーションを表示するにはコールセンターの定義ファイルにキャンバスアプリ
ケーションを指定する必要があります。
• パブリッシャー — キャンバスアプリケーションを Chatter パブリッシャーおよび Salesforce1 アクション
バーに表示します。このオプションが選択されている場合は、キャンバスカスタムアクションを作成し
て、グローバルパブリッシャーレイアウトまたはオブジェクトのページレイアウトに追加する必要もあ
ります。
• Visualforce ページ — キャンバスアプリケーションを Visualforce ページに表示できます。Visualforce ページ
にキャンバスアプリケーションを公開するために <apex:canvasApp> コンポーネントを追加する場
合、キャンバスアプリケーションの表示場所にこの場所を必ず選択してください。これ以外の場所を選
択するとエラーになります。
4. [保存] をクリックします。
17
クイックスタート
アプリケーションの場所の設定
[[Chatter] タブ] を選択したため、Chatter タブの左側のナビゲーションペインにキャンバスアプリケーション
が表示されます。
関連トピック:
クイックスタート
アプリケーションの作成
キャンバスアプリケーションの表示場所
クイックスタート — 詳細
18
第3章
トピック:
•
前提条件
•
GitHub からのプロ
ジェクトのコピー
•
ローカルでの Web
アプリケーション
の実行
•
•
•
キャンバスアプリ
ケーションの作成
キャンバスアプリ
ケーションにアク
セスできるユーザ
の設定
Heroku への Web ア
プリケーションの
リリース
•
キャンバスアプリ
ケーションの更新
•
キャンバスアプリ
ケーションのパッ
ケージ化
•
キャンバスアプリ
ケーションパッ
ケージのアップ
ロード
•
キャンバスアプリ
ケーションのイン
ストール
•
インストール済み
キャンバスアプリ
ケーションにアク
セスできるユーザ
の設定
クイックスタート — 詳細
この詳細クイックスタートでは、Force.com Canvas のさまざまな機能を開始する方法
について説明します。キャンバスアプリケーションの作成、パッケージ、アップロー
ド、インストール、実行の各プロセスをステップごとに説明します。サンプルのキャ
ンバスアプリケーションとして、Force.com Canvas SDK をコールして現在のユーザ名を
表示する「hello world」という Web ページを使用します。
この例では、次の操作を実行します。
• GitHub から「hello world」アプリケーションをコピーする
• アプリケーションをローカル Web サーバで実行する
• Web アプリケーションをSalesforce開発組織でキャンバスアプリケーションとして
公開し、キャンバスアプリケーションのプレビューアでテストする
• Web アプリケーションを Heroku にリリースする
• キャンバスアプリケーションをパッケージ化およびアップロードする
• キャンバスアプリケーションを別のSalesforce組織にインストールし、ユーザが行
うように実行する
このクイックスタートの手順では、Windows を使用することを想定しています。別
の OS も使用できますが、手順が多少異なる場合もあります。
関連トピック:
Force.com Canvas の概要
前提条件
19
クイックスタート — 詳細
前提条件
前提条件
クイックスタートの手順を実行するには、適切なアクセス権とツールが必要です。
• キャンバスアプリケーションを作成するための Developer Edition 組織へのアクセス権。キャンバスアプリケー
ションをインストールするには、キャンバスアプリケーションを作成するために使用する Developer Edition
組織以外の Developer Edition 組織が必要になります。
まだ Force.com 開発者コミュニティのメンバーでない場合、developer.salesforce.com/signup にアク
セスし、Developer Edition 組織のサインアップの説明に従ってください。すでに Enterprise Edition、Unlimited
Edition、または Performance Edition を所有している場合でも、組織の使用中のデータを保護するために、サン
プルデータに対するソリューションの開発、ステージングおよびテストには Developer Edition を使用します。
これは、特に、(データをただ参照するだけのアプリケーションに対し) データを挿入、更新または削除す
るアプリケーションの場合に該当します。
既存の Developer Edition 組織があるにもかかわらず [キャンバスアプリケーションのプレビューア] メニュー
項目が [設定] に表示されない場合、Salesforce にお問い合わせください。
• 「アプリケーションのカスタマイズ」および「すべてのデータの編集」ユーザ権限。ほとんどの場合、管
理者にはすでにこれらの権限があります。管理者以外の場合、キャンバスアプリケーションのプレビュー
アを表示してキャンバスアプリケーションを作成できるようにこれらの権限を追加する必要があります。
• Git のインストール。https://help.github.com/articles/set-up-git に移動し、Git をインストール
して設定します。
Git のインストール後、keygen ツールを使用した SSH の設定が必要になることがあります。詳細は、
https://help.github.com/articles/generating-ssh-keysを参照してください。Windows を使用し
ている場合、このツールは Git \bin ディレクトリにあります。このディレクトリは、Git をインストールし
てもパスに追加されません。コントロールパネルを使用してパスに \bin ディレクトリを追加します。イ
ンストールディレクトリに応じて、パスは C:\Program Files (x86)\Git\bin のようになります。
• コード例をコピーする GitHub アカウント。https://github.com/plans に移動し、GitHub アカウントを設
定します。
• サンプルアプリケーションをパッケージ化する Maven 3.0 以降のインストール。
http://maven.apache.org/download.html に移動し、Maven をダウンロードしてインストールします。
• Heroku アカウント (Heroku からアプリケーションを実行する場合)。https://api.heroku.com/signup に
移動し、Heroku アカウントを作成します。
• Heroku Toolbelt (コマンドラインから Heroku アプリケーションを管理する場合)。
https://toolbelt.heroku.com に移動し、Heroku Toolbelt をダウンロードしてインストールします。
関連トピック:
クイックスタート — 詳細
サポート対象の Salesforce のエディション
GitHub からのプロジェクトのコピー
20
クイックスタート — 詳細
GitHub からのプロジェクトのコピー
GitHub からのプロジェクトのコピー
「hello world」サンプルプロジェクトは、GitHub にある Force.com Canvas SDK の一部です。ここでは、このプロジェ
クトのコピーをローカルマシンに作成する手順を説明します。
1. https://github.com にログインします。
2. https://github.com/forcedotcom/SalesforceCanvasFrameworkSDK にアクセスして、Force.com Canvas
SDK およびコード例を含むプロジェクトを検索します。
3. [Zip] をクリックし .zip ファイルをダウンロードして、プロジェクトをコピーします。
4. zip ファイルに含まれるすべてのファイルを c:\SalesforceCanvasFrameworkSDK ローカルディレクトリ
に抽出します。または、Git コマンドラインを使用し git clone
[email protected]:forcedotcom/SalesforceCanvasFrameworkSDK.git コマンドを発行して、プロジェ
クトをダウンロードすることもできます。
5. コマンドウィンドウを開き、c:\SalesforceCanvasFrameworkSDK に移動します。
6. コマンド git submodule init を入力します。
7. コマンド git submodule update を入力します。これにより、他のプロジェクトが現在のプロジェクト
に追加されます。ファイル c:\SalesforceCanvasFrameworkSDK\.gitmodules に、サブモジュールと
して含まれるプロジェクトが示されます。
プロジェクトをコピーすると、src という名前のサブディレクトリと、pom.xml および README.md という
ファイルが c:\SalesforceCanvasFrameworkSDK ディレクトリに含まれます。
関連トピック:
クイックスタート — 詳細
前提条件
ローカルでの Web アプリケーションの実行
ローカルでの Web アプリケーションの実行
ここでは、Maven で Web アプリケーションをパッケージ化し、Jetty を使用してローカルで実行する手順を説明
します。Web アプリケーションをパッケージ化する場合、このプロセスにより、Web アプリケーションの実行
に必要なすべてのコンポーネント (Jetty を含む) がダウンロードされます。
1. コマンドウィンドウを開き、c:\SalesforceCanvasFrameworkSDK に移動します。
2. コマンド mvn package を入力します。Maven によってアプリケーションとその連動コンポーネントがパッ
ケージ化されると、コマンドウィンドウに出力が表示されます。このプロセスが正常に完了すると、次の
ような出力が表示されます。
[INFO]
[INFO]
[INFO]
[INFO]
[INFO]
-----------------------------------------------------------------------BUILD SUCCESS
-----------------------------------------------------------------------Total time: 28.016s
Finished at: Tue Jul 03 08:00:42 PDT 2012
21
クイックスタート — 詳細
ローカルでの Web アプリケーションの実行
[INFO] Final Memory: 8M/59M
[INFO] ------------------------------------------------------------------------
3. Jetty を使用してアプリケーションを実行するには、ローカル SSL サポートを有効にする必要があります。こ
の手順はアプリケーションごとに 1 回実行すれば済むため、すでに実行している場合はスキップします。
コマンドウィンドウが開いていて、現在の場所がディレクトリ c:\SalesforceCanvasFrameworkSDK で
あることを確認します。
4. コマンド keytool -keystore keystore -alias jetty -genkey -keyalg RSA を実行します。
このコマンドを実行すると、次の情報の入力を要求されます。キーストアのパスワードとして 123456 と
入力し、最後に yes と入力して確定します。「Enter key password for <jetty>」というメッセージが表示された
場合、Enter を押してキーストアのパスワードを使用します。その他の情報については、値を入力しても空
白のままにしても問題ありません。
Enter keystore password: <Choose Your Password>
Re-enter new password: <Choose Your Password>
What is your first and last name?
[Unknown]: <Enter First and Last Name>
What is the name of your organizational unit?
[Unknown]: <Enter an Org Unit>
What is the name of your organization?
[Unknown]: <Enter an Org>
What is the name of your City or Locality?
[Unknown]: <Enter a City>
What is the name of your State or Province?
[Unknown]: <Enter a State>
What is the two-letter country code for this unit?
[Unknown]: <Enter a Country>
Is CN=XXXX, OU=XXXX, O=XXXX, L=XXXX, ST=XX, C=XX correct?
[no]: yes
Enter key password for <jetty>
(RETURN if same as keystore password):
これにより、ディレクトリ c:\SalesforceCanvasFrameworkSDK に keystore という名前のファイルが
作成されます。キーストアは、SSL をサポートするために Jetty で使用されます。
5. target\bin\webapp.bat コマンド (Windows) または sh target/bin/webapp コマンド (Unix/OS X) を実行
して Web サーバを実行します。
Unix/OS X を使用している場合は、必要に応じて実行前に実行権限を webapp に追加します。これを行うに
は、chmod +x target/bin/webapp コマンドを使用します。
6. ブラウザを開いて https://localhost:8443/examples/hello-world/index.jsp の URL に移動し、
アプリケーションが実行されていることを確認します。
署名されていない SSL 証明書でサイトを実行しているため、ブラウザやセキュリティ設定によってはセキュ
リティ例外を追加する必要が生じる場合もあります。
「This App must be invoked via a signed request!」というメッセージが表示されます。これは、Web アプリケーショ
ンがローカルで実行されていることを意味します。このメッセージが表示されるのは、Salesforce から署名
22
クイックスタート — 詳細
キャンバスアプリケーションの作成
付き要求を受信するようにアプリケーションが設計されているためです。そのため、アプリケーションは
Salesforce キャンバス環境外では実行されません。
関連トピック:
クイックスタート — 詳細
GitHub からのプロジェクトのコピー
キャンバスアプリケーションの作成
キャンバスアプリケーションの作成
ここでは、Salesforce組織でキャンバスアプリケーションを作成する手順を説明します。キャンバスアプリケー
ションを作成するユーザには、「アプリケーションのカスタマイズ」権限と「すべてのデータの編集」権限が
必要です。
1. Salesforce で、[設定] から [クイック検索] ボックスに「アプリケーション」と入力し、[アプリケーション] を
選択します。
2. [接続アプリケーション] 関連リストで、[新規] をクリックします。
3. [接続アプリケーション名] 項目で、「Hello World」と入力します。
4. Hello_World のデフォルトの [API 名] を受け入れます。これは、キャンバスアプリケーションの内部名で
あり、保存後に変更することはできません。
5. [取引先責任者 メール] 項目で、メールアドレスを入力します。
6. [ロゴ画像 URL] 項目で、https://localhost:8443/images/salesforce.png と入力します。これは、
Salesforceのデフォルトの「ソフトウェアなし」画像です。この画像は、インストール画面とアプリケーショ
ンの詳細画面に表示されます。
7. [アイコン URL] 項目で、https://localhost:8443/examples/hello-world/logo.png と入力しま
す。これは、Salesforce のデフォルトの「ソフトウェアなし」画像です。
これは、ユーザインターフェースでアプリケーション名の横に表示される画像です。この項目を空白のま
まにすると、デフォルトの雲の画像がアプリケーション名の横に表示されます。
8. API ([OAuth 設定の有効化]) セクションで、[OAuth 設定の有効化] 項目を選択します。
9. [コールバック URL] 項目で、https://localhost:8443/sdk/callback.html と入力します。
10. [選択した OAuth 範囲] 項目で、[基本情報へのアクセス] を選択します。
11. [キャンバスアプリケーション設定] セクションで、[Force.com キャンバス] を選択します。
12. [キャンバスアプリケーションの URL] 項目で、
https://localhost:8443/examples/hello-world/index.jsp と入力します。
13. [アクセス方法] 項目で、[署名付き要求 (POST)] を選択します。
14. [場所] 項目で、Chatter タブを選択します。
15. [保存] をクリックします。キャンバスアプリケーションを保存すると、詳細ページが表示されます。
23
クイックスタート — 詳細
キャンバスアプリケーションの作成
16. キャンバスアプリケーションの詳細ページで、[コンシューマの秘密] 項目の横にある [クリックして公開]
リンクをクリックします。アプリケーションでは、コンシューマの秘密を使用して認証が行われます。
17. コンシューマの秘密の値を選択し、Ctrl+C を押してコピーします。
18. コマンドウィンドウに移動し、Ctrl+C を押して Jetty Web サーバを停止します。メッセージに従って、「Y」
と入力します。
19. CANVAS_CONSUMER_SECRET という環境変数を作成し、コピーしたコンシューマの秘密にその値を設定し
ます。この操作を Windows で行うには、コマンドウィンドウで set
CANVAS_CONSUMER_SECRET=value_you_just_copied と入力します。
Unix/OS X を使用している場合は、コマンド export CANVAS_CONSUMER_SECRET=value_you_just_copied
で環境変数を設定します。
次のコードに示すように、「hello world」ページ
(c:\SalesforceCanvasFrameworkSDK\src\main\webapp\examples\hello-world\index.jsp) でコ
ンシューマの秘密が使用されます。
<%@ page import="canvas.SignedRequest" %>
<%@ page import="java.util.Map" %>
<%
// Pull the signed request out of the request body and verify and decode it.
Map<String, String[]> parameters = request.getParameterMap();
String[] signedRequest = parameters.get("signed_request");
if (signedRequest == null) {%>
This app must be invoked via a signed request!<%
return;
}
String yourConsumerSecret=System.getenv("CANVAS_CONSUMER_SECRET");
String signedRequestJson = SignedRequest.verifyAndDecodeAsJson(signedRequest[0],
yourConsumerSecret);
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<title>Hello World Canvas Example</title>
<link rel="stylesheet" type="text/css" href="/sdk/css/connect.css" />
<script type="text/javascript" src="/sdk/js/canvas-all.js"></script>
<!-- Third part libraries, substitute with your own -->
<script type="text/javascript" src="/scripts/json2.js"></script>
<script>
if (self === top) {
// Not in an iFrame.
alert("This canvas app must be included within an iFrame");
}
Sfdc.canvas(function() {
24
クイックスタート — 詳細
キャンバスアプリケーションにアクセスできるユーザの
設定
var sr = JSON.parse('<%=signedRequestJson%>');
Sfdc.canvas.byId('username').innerHTML = sr.context.user.fullName;
});
</script>
</head>
<body>
<br/>
<h1>Hello <span id='username'></span></h1>
</body>
</html>
20. target\bin\webapp.bat コマンド (Windows) または sh target/bin/webapp (Unix/OS X) コマンドを実行
して、Web サーバを再起動します。
関連トピック:
クイックスタート — 詳細
ローカルでの Web アプリケーションの実行
キャンバスアプリケーションの表示場所
必要なユーザ権限
Force.com Canvas の制限
キャンバスアプリケーションにアクセスできるユーザの設定
キャンバスアプリケーションにアクセスできるユーザの設定
Salesforce でキャンバスアプリケーションを作成しました。次に、特定のユーザのアクセス権を設定しましょ
う。
1. Salesforce で、[設定] から [クイック検索] ボックスに 「接続アプリケーション」と入力し、接続アプリケー
ションの管理のオプションを選択します。
2. Hello World アプリケーションをクリックし、[編集] をクリックします。
3. [許可されているユーザ] 項目で、[管理者が承認したユーザは事前承認済み] を選択します。表示されるポッ
プアップメッセージで [OK] をクリックします。
[管理者が承認したユーザは事前承認済み] を選択したので、ユーザには、権限を付与するまでキャンバス
アプリケーションは表示されません。[すべてのユーザは自己承認可能] を選択すると、ユーザにはキャン
バスアプリケーションが表示されますが、ユーザがそのアクセスを承認または拒否する必要があります。
4. [保存] をクリックします
ここで、キャンバスアプリケーションにアクセスできるユーザを定義します。これを行うには、プロファ
イルと権限セットを使用します。この例では、プロファイルがシステム管理者であると想定しています。
5. [プロファイル] 関連リストで、[プロファイルを管理する] をクリックします。
6. [システム管理者] プロファイルを選択し、[保存] をクリックします。
25
クイックスタート — 詳細
Heroku への Web アプリケーションのリリース
7. Salesforce で、[設定] から [クイック検索] ボックスに「キャンバスアプリケーションのプレビューア」と入力
し、[キャンバスアプリケーションのプレビューア] を選択します。キャンバスアプリケーションのプレ
ビューアを使用して、キャンバスアプリケーションを公開する前にテストできます。
8. 左側の [Hello World] リンクをクリックします。
アプリケーションが表示され、Hello User.FullName というメッセージが表示されます。プレビューア
でアプリケーション名をクリックすると署名付き要求がエンドポイント
https://localhost:8443/examples/hello-world/index.jsp に送信され、このコンテキストでキャ
ンバスアプリケーションが動作します。
アクセスを設定すると、キャンバスアプリケーションのプレビューアおよび開発組織のChatterタブにキャンバ
スアプリケーションが表示されます。
関連トピック:
クイックスタート — 詳細
キャンバスアプリケーションの作成
Heroku への Web アプリケーションのリリース
Heroku への Web アプリケーションのリリース
ここまでのステップでは、「hello world」Web アプリケーションをローカルで実行し、キャンバスアプリケー
ションとして追加して、テストを実施しました。キャンバスアプリケーションがローカルで動作しているの
で、「hello world」Web アプリケーションを Heroku にリリースしてそこから実行します。これを行う手順は、次
のとおりです。
1. Heroku へのログインと Heroku Toolbelt のインストールをまだ行っていない場合は、「前提条件」に記載され
ているリンクからこれらを実行します。
2. コマンドウィンドウを開き、c:\SalesforceCanvasFrameworkSDK に移動して、コマンド git init を
入力します。これにより、ディレクトリが Git リポジトリとして再初期化されます。
3. コマンドウィンドウで、コマンド heroku create を入力します。これにより、新しい「シェル」アプリ
ケーションが Heroku に作成されます。
アプリケーションが作成されたことを示す次のような確認メッセージが表示されます。
Creating deep-samurai-7923... done, stack is cedar
http://deep-samurai-7923.herokuapp.com/ | [email protected]:deep-samurai-7923.git
Git remote heroku added
4. この Heroku アプリケーションの名前を変更するには、コマンドウィンドウでコマンド heroku rename
newAppName -—app oldAppName を入力します。
この例では、oldAppName は deep-samurai-7923 です。作成する newAppName は、文字で始まる必要があり、
小文字、数字、ダッシュのみを使用できます。残りの確認メッセージは次のようになります。
http://newappName.herokuapp.com/ | [email protected]:newappName.git
26
クイックスタート — 詳細
Heroku への Web アプリケーションのリリース
newappName は、すべての Heroku アプリケーションで一意である必要があります。この名前は、
newappName.herokuapp.com のようにアプリケーションの URL の一部になります。
5. コマンドウィンドウで、コマンド git add -A を実行します。これにより、SalesforceCanvasFrameworkSDK プ
ロジェクト全体が Git リポジトリに追加されます。Windows 環境で作業している場合、CRLF (行頭復帰/改行)
で置き換えられた LF (改行) に関するメッセージが表示されることがあります。
6. コマンドウィンドウで、コメントと共にコマンド git commit —m “MyChangeComments” を入力して、
変更をコミットします。
7. コマンドウィンドウで、コマンド git push heroku master を入力して、変更を Heroku にリリースしま
す。
このプロセスが正常に完了すると、次のような出力が表示されます。
[INFO]
[INFO]
[INFO]
[INFO]
[INFO]
[INFO]
[INFO]
------------------------------------------------BUILD SUCCESS
------------------------------------------------Total time: 13.188s
Finished at: Sat Feb 09 21:14:23 UTC 2013
Final Memory: 11M/490M
-------------------------------------------------
「権限が拒否されました」というエラーメッセージが表示された場合、必要に応じて SSH キーを設定して
Heroku に追加します。https://devcenter.heroku.com/articles/keys を参照してください。
8. コマンドウィンドウを開き、コンシューマの秘密を含む Heroku 環境変数を設定します。これを行うには、
コマンド heroku config:add CANVAS_CONSUMER_SECRET=consumer_secret_value を入力して
consumer_secret_value を、コピーした値に置き換えます。
キャンバスアプリケーションのコンシューマの秘密を取得するには、[設定] から [クイック検索] ボックス
に「アプリケーション」と入力し、[アプリケーション] を選択して Hello World アプリケーションをクリック
します。[OAuth 設定] セクションに [コンシューマの秘密] 項目が表示されます。
9. ブラウザを開いて https://newappName.herokuapp.com/examples/hello-world/index.jsp の URL
に移動し、Heroku でアプリケーションが実行されていることを確認します。
「This App must be invoked via a signed request!」というメッセージが表示されます。これは、アプリケーション
が Heroku で実行されていることを意味します。このメッセージが表示されるのは、Salesforce から署名付き
要求を受信するようにアプリケーションが設計されているためです。そのため、アプリケーションはSalesforce
キャンバス環境外では実行されません。
関連トピック:
クイックスタート — 詳細
キャンバスアプリケーションにアクセスできるユーザの設定
キャンバスアプリケーションの更新
27
クイックスタート — 詳細
キャンバスアプリケーションの更新
キャンバスアプリケーションの更新
ここでは、Heroku で実行されている「hello world」アプリケーションを実行するようにキャンバスアプリケー
ションを更新する手順を説明します。
1. Salesforce で、[設定] から [クイック検索] ボックスに「アプリケーション」と入力し、[アプリケーション] を
選択します。
2. [接続アプリケーション] 関連リストで、[Hello World] をクリックします。
3. [編集] をクリックします。
4. [ロゴ画像 URL] 項目で、https://appName.herokuapp.com/images/salesforce.png と入力します。
これは、Salesforce のデフォルトの「ソフトウェアなし」画像です。この画像は、インストール画面とアプ
リケーションの詳細画面に表示されます。appName は、作成した Heroku アプリケーションの名前です。
5. [アイコン URL] 項目で、https://appName.herokuapp.com/examples/hello-world/logo.png と入
力します。これは、Salesforce のデフォルトの「ソフトウェアなし」画像です。
これは、Chatter タブまたはキャンバスアプリケーションのプレビューアのアプリケーション名の横に表示
される画像です。この項目を空白のままにすると、デフォルトの雲の画像がアプリケーション名の横に表
示されます。appName は、作成した Heroku アプリケーションの名前です。
6. [コールバック URL] 項目で、https://appName.herokuapp.com/sdk/callback.html と入力します。
appName は、作成した Heroku アプリケーションの名前です。
7. [キャンバスアプリケーションの URL] 項目で、
https://appName.herokuapp.com/examples/hello-world/index.jsp と入力します。appName は、
作成した Heroku アプリケーションの名前です。
8. [保存] をクリックします。キャンバスアプリケーションを保存すると、詳細ページが表示されます。
9. Salesforce で、[設定] から [クイック検索] ボックスに「キャンバスアプリケーションのプレビューア」と入力
し、[キャンバスアプリケーションのプレビューア] を選択します。キャンバスアプリケーションのプレ
ビューアを使用して、再度パッケージ化する前にキャンバスアプリケーションをテストできます。
10. 左側の [Hello World] リンクをクリックします。
アプリケーションが表示されて、Hello User.FullName というメッセージが表示されます。プレビュー
アでアプリケーション名をクリックすると署名付き要求がエンドポイント
https://appName.herokuapp.com/examples/hello-world/index.jsp に送信され、このコンテキス
トでキャンバスアプリケーションが動作します。
この例では、作成したキャンバスアプリケーションと同じキャンバスアプリケーションを使用しますが、Heroku
で実行されている「hello world」Web アプリケーションを指し示すように更新します。そのため、以前に「hello
world」アプリケーションに追加したコンシューマの秘密を更新する必要はありません。
28
クイックスタート — 詳細
キャンバスアプリケーションのパッケージ化
Heroku で実行されている「hello world」アプリケーションを表示する新しいキャンバスアプリケーションを
Salesforceに作成する場合、「キャンバスアプリケーションの作成」に進み、新しいアプリケーションを作成し
てアプリケーションのコンシューマの秘密を更新し、変更を Heroku にリリースします。
関連トピック:
クイックスタート — 詳細
Heroku への Web アプリケーションのリリース
キャンバスアプリケーションのパッケージ化
キャンバスアプリケーションのパッケージ化
キャンバスアプリケーションの作成、キャンバスアプリケーションのプレビューアでのテスト、Heroku へのリ
リースが完了し、キャンバスアプリケーションをパッケージ化して配布する準備ができました。パッケージ化
は、キャンバスアプリケーションを別の組織にインストールできるようにするための最初のステップです。
パッケージ化についての詳細は、『ISVforce ガイド』 を参照してください。
1. Salesforce で、[設定] から [クイック検索] ボックスに「パッケージ」と入力し、[パッケージ] を選択して [新
規] をクリックします。
ヒント: キャンバスアプリケーションをパッケージ化して別の組織にインストールするには、名前空
間プレフィックスを作成する必要があります。名前空間プレフィックスは、Developer Edition 組織での
み定義できます。詳細は、オンラインヘルプの「名前空間プレフィックスの登録」トピックを参照し
てください。
2. [パッケージ名] 項目を「Hello World Package」に設定し、他の項目はデフォルトを使用します。
3. [管理] 項目を選択して、パッケージを組織の管理パッケージにします。
4. 管理パッケージは 1 つのみ有効であることを示すメッセージが表示されます。[OK] をクリックします。
5. [保存] をクリックします。
6. パッケージは空であるため、[追加] をクリックします。
7. [コンポーネントの種類] 項目で、[接続アプリケーション] を選択します。
8. Hello World アプリケーションの横にあるチェックボックスをオンにし、[パッケージに追加] をクリックしま
す。[パッケージの詳細] 画面が表示されます。[設定] から、[クイック検索] ボックスに「パッケージ」と入
力し、[パッケージ] を選択して新しい管理パッケージを表示します。
29
クイックスタート — 詳細
キャンバスアプリケーションパッケージのアップロード
これで、作成したパッケージをアップロードし、インストールリンクを取得する準備ができました。インス
トールリンクを使用して、キャンバスアプリケーションを別の組織にインストールします。
関連トピック:
クイックスタート — 詳細
キャンバスアプリケーションの更新
http://www.salesforce.com/us/developer/docs/packagingGuide/index_Left.htm#StartTopic=Content/packaging_about_packages.htm
キャンバスアプリケーションパッケージのアップロード
CanvasLifecycleHandler クラスの配布
キャンバスアプリケーションパッケージのアップロード
キャンバスアプリケーションのパッケージ化が完了し、パッケージをアップロードする準備ができました。こ
れにより、インストールリンクが作成されます。このインストールリンクは、キャンバスアプリケーションを
組織にインストールする必要のある任意のユーザに提供できます。
1. Salesforce で、[設定] から [クイック検索] ボックスに「パッケージ」と入力し、[パッケージ] を選択します。
2. [パッケージ] リストで、[Hello World パッケージ] リンクをクリックします。
3. [パッケージの詳細] ページで、[アップロード] をクリックして管理パッケージを公開します。
4. [バージョン名] 項目に「Winter 2014 Beta」と入力します。デフォルトのバージョン番号 (1.0) とリリース種別
([管理—ベータ]) をそのまま使用します。
5. [アップロード] をクリックします。
メモ: キャンバスアプリケーションを作成していない組織にのみ、キャンバスアプリケーションをイ
ンストールできます。
アップロードが完了したら、[バージョンの詳細] ページが表示されます。[インストール URL] 項目には、別の組
織にキャンバスアプリケーションをインストールするために使用できる URL が表示されます。また、インス
トール URL が記載された通知メールも受信します。
関連トピック:
クイックスタート — 詳細
キャンバスアプリケーションのパッケージ化
http://www.salesforce.com/us/developer/docs/packagingGuide/index_Left.htm#StartTopic=Content/packaging_distributing.htm
キャンバスアプリケーションのインストール
キャンバスアプリケーションのインストール
パッケージ化されたキャンバスアプリケーションをアップロードすると、インストールリンクが作成されま
す。このリンクを使用して、キャンバスアプリケーションを別の組織にインストールできます。ベータパッ
30
クイックスタート — 詳細
インストール済みキャンバスアプリケーションにアクセ
スできるユーザの設定
ケージは、Sandbox 組織または Developer Edition 組織にのみインストールできます。他の組織にインストールす
ると、エラーになります。
1. ブラウザを開き、ブラウザのアドレスバーにキャンバスアプリケーションのインストール URL を入力しま
す。キャンバスアプリケーションを開発中の場合は、アプリケーションをインストールする前に開発組織
から必ずログアウトしてください。
インストール URL は、
https://login.instance.salesforce.com/services/packaging/installPackage.apexp?p0=04eU0000000AWNA
のようになります。
2. メッセージが表示されたら、パッケージをインストールしている組織のログイン情報を入力します。
3. [パッケージインストールの詳細] ページが表示されます。[パッケージコンポーネント] リストに、Hello World
キャンバスアプリケーションが表示されます。[次へ] をクリックします。
4. [次へ] をクリックし、さらに [インストール] をクリックします。
パッケージのインストールが正常に完了すると、メール通知が送信されます。
関連トピック:
クイックスタート — 詳細
キャンバスアプリケーションパッケージのアップロード
サポート対象の Salesforce のエディション
インストール済みキャンバスアプリケーションにアクセスできるユーザの設定
インストール済みキャンバスアプリケーションにアクセスできる
ユーザの設定
キャンバスアプリケーションをSalesforce組織にインストールしても、ユーザアクセスを設定するまでは、誰も
アプリケーションを表示することはできません。
1. Salesforce で、[設定] から [クイック検索] ボックスに 「接続アプリケーション」と入力し、接続アプリケー
ションの管理のオプションを選択します。
2. Hello World アプリケーションをクリックし、[編集] をクリックします。
3. [許可されているユーザ] 項目で、[管理者が承認したユーザは事前承認済み] を選択します。表示されるポッ
プアップメッセージで [OK] をクリックします。
4. [保存] をクリックします。
ここで、キャンバスアプリケーションを表示できるユーザを定義します。これを行うには、プロファイル
と権限セットを使用します。この例では、「システム管理者」権限を持つユーザにアプリケーションへの
アクセスを許可します。
5. [接続アプリケーションの詳細] ページの [プロファイル] 関連リストで、[プロファイルを管理する] をクリッ
クします。
6. [システム管理者] プロファイルを選択し、[保存] をクリックします。
31
クイックスタート — 詳細
インストール済みキャンバスアプリケーションにアクセ
スできるユーザの設定
7. Chatter タブをクリックします。
8. 左側の [Hello World] リンクをクリックします。
アプリケーションが表示され、Hello User.FullName というメッセージが表示されます。
関連トピック:
クイックスタート — 詳細
キャンバスアプリケーションのインストール
32
Force.com Canvas の使用
第4章
トピック:
•
Force.com Canvas
SDK の参照
•
認証
•
キャンバスアプリ
ケーションでのコ
ンテキストの取得
•
クロスドメイン
XHR
•
キャンバスアプリ
ケーションのサイ
ズ変更
•
キャンバスアプリ
ケーションイベン
トの実装
•
Force.com Canvas SDK
Force.com Canvas は、Salesforce 内でアプリケーションを統合できるツールセットです。
このフレームワークには SDK が含まれており、これを使用してアプリケーションを
認証し、Salesforce からデータを取得できます。Force.com Canvas SDK とコード例は、
https://github.com/forcedotcom/salesforcecanvasframeworksdk の GitHub
で入手できます。
Force.com Canvas SDK にはバージョンが設定されており、各リリースの API のバージョ
ンと一致します。現在のバージョンは37.0です。所有している SDK のバージョンは、
version メソッドをコールして確認できます。この開発者ガイドの以前のバージョ
ンは、
https://developer.salesforce.com/page/Earlier_Reference_Documentation
にあります。
関連トピック:
Force.com Canvas SDK の参照
認証
キャンバスアプリ
ケーションでのス
トリーミング API の
使用
キャンバスアプリケーションでのコンテキストの取得
•
キャンバスアプリ
ケーションのデ
バッグ
キャンバスアプリケーションイベントの実装
•
キャンバスアプリ
ケーションでの
<select> タグの使用
クロスドメイン XHR
キャンバスアプリケーションのサイズ変更
33
Force.com Canvas SDK の参照
Force.com Canvas SDK
Force.com Canvas SDK の参照
Force.com Canvas SDK は GitHub から入手できます。また、キャンバスアプリケーションから参照するには次の 2
つの方法があります。
• SDK を自分の Web サーバでホストして、そこからアクセスする
• Salesforce サーバにホストされた SDK にアクセスする
SDK を自分の Web サーバでホストする場合の include ステートメントの例は次のとおりです。
<script type="text/javascript" src="/sdk/js/canvas-all.js"></script>
ホストされた SDK を参照する場合の include ステートメントの例は次のとおりです。
<script type="text/javascript"
src="https://<instance>.salesforce.com/canvas/sdk/js/37.0/canvas-all.js"></script>
Salesforce サーバにある SDK を参照する機能は、Web アプリケーションにある SDK ファイル、あるいは Visualforce
ページを含める場合に便利です。
関連トピック:
Force.com Canvas SDK
認証
認証
キャンバスアプリケーションを作成する場合は、次のいずれかの認証方法を使用できます。
• 署名付き要求 — キャンバスアプリケーションのデフォルトの認証方法。署名付き要求認証フローは、シス
テム管理者がキャンバスアプリケーションへのアクセス権をユーザに付与できるようにキャンバスアプリ
ケーションを設定しているかどうか、またはユーザが自己承認できるかどうかによって異なります。シス
テム管理者がユーザのキャンバスアプリケーションへのアクセスを許可した場合、またはユーザが承認/拒
否 OAuth フローでキャンバスアプリケーションを承認した場合、コンシューマキー、アクセストークン、
およびその他のコンテキスト情報を含む署名付き要求がキャンバスアプリケーションに提供されます。
• OAuth 2.0 — キャンバスアプリケーションでは、認証とアクセストークンの取得に OAuth 2.0 プロトコルを使
用できます。OAuth と Force.com プラットフォームについての詳細は、
https://developer.salesforce.com/page/Digging_Deeper_into_OAuth_2.0_on_Force.com を
参照してください。
関連トピック:
Force.com Canvas SDK
http://www.salesforce.com/us/developer/docs/api_rest/index_Left.htm#StartTopic=Content/intro_understanding_authentication.htm
キャンバスアプリケーションのユーザフロー — 署名付き要求
キャンバスアプリケーションのユーザフロー — OAuth
34
署名付き要求認証
Force.com Canvas SDK
署名付き要求認証
これは、キャンバスアプリケーションのデフォルトの認証方法です。署名付き要求認証フローは、キャンバス
アプリケーションの [許可されているユーザ] 項目が [管理者が承認したユーザは事前承認済み] と [すべてのユー
ザは自己承認可能] のどちらに設定されているかによって異なります。
許可されているユーザの
値
キャンバスアプリ ユーザがキャンバス
ケーションのアク アプリケーションを
セシビリティ
承認する必要がある
タイミング
POST または GET の動作
管理者が承認したユーザ システム管理者が
は事前承認済み
アプリケーション
を組織にインス
トールし、参照権
限を付与するユー
ザを設定すれば、
ユーザはすぐにア
プリケーションへ
アクセスできるよ
うになります。
ユーザによるアク
セスの承認や拒否
は必要ありませ
ん。
不要
Salesforce は、更新トークンを含む、署
名付き要求のボディに含まれるすべて
の認証情報を使用してキャンバスアプ
リケーションへの POST を実行します。
すべてのユーザは自己承 すべてのユーザが
認可能
アプリケーション
にアクセスできま
すが、ユーザはア
プリケーションへ
のアクセスを承認
または拒否するよ
うに要求されま
す。
• ユーザがアプリ
ケーションを初
めて開いたとき
ユーザが以前にアプリケーションを承
認していて、アクセスが取り消された
り期限切れになったりしていない場合、
Salesforce は署名付き要求ペイロードを
使用してキャンバスアプリケーション
への POST を実行します。
• システム管理者
によってアクセ
ストークンが取
り消された場合
• システム管理者
がトークンに時
間制限を設定し
ていてその時間
制限を超えた場
合
35
ユーザがアプリケーションを承認して
いない場合、またはアクセスが取り消
されているか期限切れになっている場
合、Salesforce はキャンバスアプリケー
ション URL への GET を実行します。キャ
ンバスアプリケーションは、コールを
受け入れて URL パラメータ
_sfdc_canvas_authvalue を検索し、
GET を処理する必要があります。このパ
ラメータ値を受け取ったキャンバスア
署名付き要求認証
Force.com Canvas SDK
許可されているユーザの
値
キャンバスアプリ ユーザがキャンバス
ケーションのアク アプリケーションを
セシビリティ
承認する必要がある
タイミング
POST または GET の動作
プリケーションは、OAuth フローの承認
または拒否を開始する必要があります。
_sfdc_canvas_authvalue =
user_approval_required
OAuth フローが開始されてユーザがアプ
リケーションを承認したら、キャンバ
スアプリケーションは true のパラメー
タを使用して repost() メソッドを
コールし、署名付き要求を取得する必
要があります。
署名付き要求情報は、クライアントの秘密を使用して検証でき、アプリケーションのカスタマイズと、Salesforce
への後続のコールを行うために使用されます。
署名付き要求は、次の要素を連結した文字列です。
• HMAC SHA–256 アルゴリズムで暗号化されたキャンバスアプリケーションのコンシューマの秘密
• ピリオド ( . )
• Base64 で JSON 符号化されたコンテキストおよび認証トークン
署名付き要求は、次のように非常に長くなります。
9Rpl6rE7R2bSNjoSfYdERk8nffmgtKQNhr5U/5eSJPI=.eyJjb250ZXh0Ijp7InVzZXIiOnsibGFuZ3V....。
署名付き要求の考慮事項
• Salesforce は、キャンバスアプリケーション URL を呼び出すときに、[許可されているユーザ] の値や、更新
トークンが返されるかどうかに応じて、HTTP POST または GET を実行します。
• 要求の検証と復号化には、サーバ側のコードが必要です。
• 署名付き要求は、アプリケーションを呼び出した後に SDK を使用してオンデマンドで要求できます。
関連トピック:
認証
署名付き要求の検証および復号化
キャンバスアプリケーションのユーザフロー — 署名付き要求
署名付き要求の要求
キャンバスアプリケーションのユーザフロー — 署名付き要求
以下は、署名付き要求認証を使用するキャンバスアプリケーションのユーザフローを図解したものです。
36
署名付き要求認証
Force.com Canvas SDK
関連トピック:
署名付き要求認証
SignedRequest
署名付き要求の検証および復号化
署名付き要求の検証および復号化
署名付き要求を使用している場合、Salesforceはユーザコンテキストと認証情報をキャンバスアプリケーション
の URL に送信します。署名付き要求を有効にするには、キャンバスアプリケーションの特定のコンシューマの
秘密を使用して、署名付き要求が署名されたことを確認する必要があります。正しいコンシューマの秘密が使
用されていた場合はそのコンテキストを信頼できますが、そうでない場合、その要求がSalesforceによって開始
されなかったと想定できます。署名付き要求を検証および復号化するには、アプリケーションで次の操作を行
う必要があります。
1. Salesforce からの最初の署名付き要求を含む POST メッセージを受信します。
37
署名付き要求認証
Force.com Canvas SDK
2. 最初の期間で、署名付き要求を分割します。この結果、コンシューマの秘密で署名されたハッシュ済み
Based64 コンテキストと、Base64 で符号化されたコンテキスト自体という 2 つの文字列が生成されます。
3. HMAC SHA-256 アルゴリズムを使用して、Base64 で符号化されたコンテキストをハッシュし、コンシューマ
の秘密を使用してそれに署名します。
4. 前のステップで作成した文字列を Base64 で符号化します。
5. Base64 で符号化された文字列と、ステップ 2 で受け取ったコンシューマの秘密で署名されたハッシュ済み
Base64 コンテキストを比較します。
2 つの値が同じである場合、署名付き要求は自分のコンシューマの秘密で署名されたものであり、信頼できる
ことがわかります。これで、符号化されたコンテキストを Base64 で復号化し、必要な値を解析できるようにな
ります。これらの値についての詳細は、「CanvasRequest」を参照してください。2 つの文字列が異なる場合、
その要求は自分のコンシューマの秘密を使用してハッシュおよび署名されていなかったことになります。この
場合、ユーザに適切なメッセージを返す必要があります。
検証および復号化用の関数
Force.com Canvas SDK (SalesforceCanvasFrameworkSDK\src\main\java\canvas\SignedRequest.java 内)
にある次のいずれかの関数をコールして、署名付き要求を検証できます。
• verifyAndDecode — Java オブジェクトとして、検証および復号化されたバージョンの署名付き要求を返
します。
• verifyAndDecodeAsJson — JSON 形式の文字列として、検証および復号化されたバージョンの署名付き要
求を返します。
次のコード例に、SDK の関数を使用して署名付き要求を検証および復号化する方法を示します。このコード
は、署名された秘密と Base64 JSON 文字列を解析するときに、署名付き要求の文字列を分割します。次に、HMAC
SHA-256 アルゴリズムを使用して署名されたキャンバスアプリケーションのコンシューマの秘密を暗号化し、
その暗号化された値と、Salesforce によって送信された、暗号化された値を比較します。
2 つの値が同じである場合、そのコンテキストは有効で、Salesforce から生成されたことがわかります。2 つの
値が異なる場合、その要求は Salesforce から行われたものではありません。
/**
*
* The utility method can be used to validate/verify the signed request.
* In this case, the signed request is verified that it's from Salesforce and that
* it has not been tampered with.
*
* This utility class has two methods. One verifies and decodes the request
* as a Java object, the other as a JSON String.
*
*/
public class SignedRequest {
public static CanvasRequest verifyAndDecode(String input, String secret)
throws SecurityException {
String[] split = getParts(input);
String encodedSig = split[0];
String encodedEnvelope = split[1];
// Deserialize the JSON body.
38
署名付き要求認証
Force.com Canvas SDK
String json_envelope = new String(new Base64(true).decode(encodedEnvelope));
ObjectMapper mapper = new ObjectMapper();
ObjectReader reader = mapper.reader(CanvasRequest.class);
CanvasRequest canvasRequest;
String algorithm;
try {
canvasRequest = reader.readValue(json_envelope);
algorithm = canvasRequest.getAlgorithm() == null ?
"HMACSHA256" : canvasRequest.getAlgorithm();
} catch (IOException e) {
throw new SecurityException(String.format("Error [%s] deserializing JSON to
Object [%s]", e.getMessage(), CanvasRequest.class.getName()), e);
}
verify(secret, algorithm, encodedEnvelope, encodedSig);
// If we got this far, then the request was not tampered with.
// Return the request as a Java object.
return canvasRequest;
}
public static String verifyAndDecodeAsJson(String input, String secret)
throws SecurityException {
String[] split = getParts(input);
String encodedSig = split[0];
String encodedEnvelope = split[1];
String json_envelope = new String(new Base64(true).decode(encodedEnvelope));
ObjectMapper mapper = new ObjectMapper();
String algorithm;
StringWriter writer;
TypeReference<HashMap<String,Object>> typeRef
= new TypeReference<HashMap<String, Object>>() { };
try {
HashMap<String,Object> o = mapper.readValue(json_envelope, typeRef);
writer = new StringWriter();
mapper.writeValue(writer, o);
algorithm = (String)o.get("algorithm");
} catch (IOException e) {
throw new SecurityException(String.format("Error [%s] deserializing
JSON to Object [%s]", e.getMessage(),
typeRef.getClass().getName()), e);
}
verify(secret, algorithm, encodedEnvelope, encodedSig);
// If we got this far, then the request was not tampered with.
// Return the request as a JSON string.
return writer.toString();
}
private static String[] getParts(String input) {
if (input == null || input.indexOf(".") <= 0) {
throw new SecurityException(String.format("Input [%s] doesn't
look like a signed request", input));
}
String[] split = input.split("[.]", 2);
return split;
}
39
署名付き要求認証
Force.com Canvas SDK
private static void verify(String secret, String algorithm,
String encodedEnvelope, String encodedSig )
throws SecurityException
{
if (secret == null || secret.trim().length() == 0) {
throw new IllegalArgumentException("secret is null, did you
set your environment variable CANVAS_CONSUMER_SECRET?");
}
SecretKey hmacKey = null;
try {
byte[] key = secret.getBytes();
hmacKey = new SecretKeySpec(key, algorithm);
Mac mac = Mac.getInstance(algorithm);
mac.init(hmacKey);
// Check to see if the body was tampered with.
byte[] digest = mac.doFinal(encodedEnvelope.getBytes());
byte[] decode_sig = new Base64(true).decode(encodedSig);
if (! Arrays.equals(digest, decode_sig)) {
String label = "Warning: Request was tampered with";
throw new SecurityException(label);
}
} catch (NoSuchAlgorithmException e) {
throw new SecurityException(String.format("Problem with algorithm [%s]
Error [%s]", algorithm, e.getMessage()), e);
} catch (InvalidKeyException e) {
throw new SecurityException(String.format("Problem with key [%s]
Error [%s]", hmacKey, e.getMessage()), e);
}
// If we got here and didn't throw a SecurityException then all is good.
}
}
verifyAndDecode 関数のコール
次のコードに、署名付き要求を取得し、verifyAndDecode 関数を使用して要求を検証および復号化する例を
示します。
// From a JSP or servlet.
<%@ page import="canvas.SignedRequest" %>
<%@ page import="java.util.Map" %>
<%
// Pull the signed request out of the request body and verify/decode it.
Map<String, String[]> parameters = request.getParameterMap();
String[] signedRequest = parameters.get("signed_request");
if (signedRequest == null) {%>
This app must be invoked via a signed request!<%
return;
}
String yourConsumerSecret=System.getenv("CANVAS_CONSUMER_SECRET");
String signedRequest = SignedRequest.verifyAndDecode(signedRequest[0],
yourConsumerSecret);
%>
...
40
署名付き要求認証
Force.com Canvas SDK
// From JavaScript, you can handle the signed request as needed.
var signedRequest = '<%=signedRequestJson%>';
verifyAndDecodeAsJson 関数のコール
次のコードに、署名付き要求を取得し、verifyAndDecodeAsJson 関数を使用して要求を検証および復号化
して、返された JSON 結果を解析する例を示します。
// From a JSP or servlet.
<%@ page import="canvas.SignedRequest" %>
<%@ page import="java.util.Map" %>
<%
// Pull the signed request out of the request body and verify/decode it.
Map<String, String[]> parameters = request.getParameterMap();
String[] signedRequest = parameters.get("signed_request");
if (signedRequest == null) {%>
This App must be invoked via a signed request!<%
return;
}
String yourConsumerSecret=System.getenv("CANVAS_CONSUMER_SECRET");
String signedRequestJson = SignedRequest.verifyAndDecodeAsJson(signedRequest[0],
yourConsumerSecret);
%>
...
// From JavaScript, you can parse with your favorite JSON library.
var signedRequest = JSON.parse('<%=signedRequestJson%>');
関連トピック:
署名付き要求認証
SignedRequest
署名付き要求の要求
認証に署名付き要求を使用するようにキャンバスアプリケーションが設定されている場合、SDK を使用して署
名付き要求をオンデマンドで要求できます。アプリケーションの読み込み時に使用された署名付き要求の再送
信、または新しい署名付き要求の送信を Salesforce に要求できます。署名付き要求の送信要求は、期限切れの
セッションを更新する場合や、アプリケーションがリダイレクトされた後に認証情報を取得する場合に役立ち
ます。
署名付き要求は、SDK の refreshSignedRequest() または repost() JavaScript メソッドを使用してオンデマ
ンドで要求できます。refreshSignedRequest() は、コールバックを介して新しい署名付き要求を返しま
す。repost() は、キャンバスアプリケーションに対する新しい POST の開始を親ウィンドウに要求し、更新
された署名付き要求を含むアプリケーションページを再読み込みします。
アプリケーションの署名付き要求を更新する必要がある場合は、常にこれらの方法を使用します。次に、署名
付き要求情報を更新する必要が生じる可能性のあるシナリオ例を示します。
• 通常、署名付き要求内の OAuth トークンは、2 時間後に有効期限が切れます。OAuth トークンの有効期限が
切れているが、追加の API 要求を実行する必要がある場合、refreshSignedRequest() をコールすること
で、ユーザの作業を中断することなく新しい OAuth トークンを取得できます。
41
署名付き要求認証
Force.com Canvas SDK
• 特に複数のシステムでシングルサインオン機能を提供する場合、キャンバスアプリケーションでリダイレ
クトを使用する必要が生じることがあります。キャンバスアプリケーションでリダイレクトを使用すると、
最初の署名付き要求情報を含む元のリクエストボディはリダイレクト URL で受信されません。新しいメソッ
ドを使用して、署名付き要求を再試行できます。
• Summer '14 以降では、キャンバスアプリケーションはユーザ承認アプリケーションになる可能性がありま
す。ユーザ承認アプリケーションがユーザによって承認されていない場合、最初の署名付き要求 POST はア
プリケーションで取得されません。代わりに、OAuth でアプリケーションを承認する必要があります。その
後、repost() をコールして署名付き要求を取得できます。
これらの方法を使用するには、認証で署名付き要求を使用するようにキャンバスアプリケーションを設定する
必要があります。また、「Force.com Canvas SDK の参照」で説明されているように JavaScript コードで
canvas-all.js を参照する必要もあります。
要求が成功したら、返された SignedRequest 情報をキャンバスアプリケーションで検証する必要があります。
Salesforceから受信する署名付き要求情報の検証についての詳細は、「署名付き要求の検証および復号化」を参
照してください。
refreshSignedRequest() を使用した署名付き要求の取得
refreshSignedRequest() を使用して、指定のコールバックを介して新しい署名付き要求を行います。この
例では、応答コードをチェックするコールバックで refreshSignedRequest() がコールされ、署名付き要
求が、コンシューマの秘密で署名されたハッシュ済み Based64 コンテキストと、Base64 で符号化されたコンテ
キスト自体に解析されます。
// Gets a signed request on demand.
Sfdc.canvas.client.refreshSignedRequest(function(data) {
if (data.status === 200) {
var signedRequest = data.payload.response;
var part = signedRequest.split('.')[1];
var obj = JSON.parse(Sfdc.canvas.decode(part));
}
}
repost() を使用した署名付き要求の取得
repost() を使用して、新しい POST をキャンバスアプリケーション URL に送信するように親ウィンドウに指示
します。POST には、アプリケーションの読み込み時に使用された署名付き要求または新しい署名付き要求が
含まれます。refreshSignedRequest() とは異なり、repost() を使用すると、キャンバスアプリケーショ
ンページが再読み込みされます。次の例では、repost() をコールして、元の署名付き要求を行います。
// Gets a signed request on demand, without refreshing the signed request.
Sfdc.canvas.client.repost();
42
OAuth 認証
Force.com Canvas SDK
次の例では、repost() をコールして、新しい署名付き要求を行います。
// Gets a signed request on demand, first by refreshing the signed request.
Sfdc.canvas.client.repost({refresh : true});
関連トピック:
署名付き要求認証
SignedRequest
署名付き要求の検証および復号化
OAuth 認証
Force.com Canvas では、OAuth 2.0 による認証をサポートしています。OAuth を使用する場合、次の 2 つのオプショ
ンがあります。
• Web サーバ OAuth 認証フロー — ユーザは、キャンバスアプリケーションを実行するときに、ユーザのデー
タにアクセスするアプリケーションを認証できます。この場合、各ユーザがキャンバスアプリケーション
で情報へアクセスできるようにする必要があります。詳細は、『Force.com REST API 開発者ガイド』「Web サー
バ OAuth 認証フローについて」を参照してください。
• ユーザエージェント OAuth 認証フロー — ユーザは、キャンバスアプリケーションを実行するときに、ブラ
ウザだけを使用してユーザのデータにアクセスするアプリケーションを認証できます。Web サーバ OAuth
認証と同様に、このオプションでは各ユーザがキャンバスアプリケーションで情報へアクセスできるよう
にする必要があります。
更新トークンが提供されないため、この認証方法は開発でのみ使用し、本番では使用しないことをお勧め
します。この種類の認証では、サーバ側のコードは不要で、開発マシンをインターネットに公開する必要
がありません。ただし、本番環境では、OAuth フローが発生するたびにユーザはアプリケーションの承認ま
たは拒否を求められるため、更新トークンがないと不便です。詳細は、『Force.com REST API 開発者ガイド』
「ユーザエージェント OAuth 認証フローについて」を参照してください。
実装する OAuth フローに関係なく、キャンバスアプリケーションは、標準ベースの OAuth フローを開始するた
めのコードを提供する必要があります。OAuth には次のような考慮事項があります。
• Salesforce は、キャンバスアプリケーション URL を呼び出すときに HTTP GET を実行します。
• ユーザエージェント OAuth では、すべての認証がブラウザで実行できます (サーバ側のコードは不要です)。
OAuth と Force.com プラットフォームについての詳細は、
https://developer.salesforce.com/page/Digging_Deeper_into_OAuth_2.0_on_Force.com を参照
してください。
OAuth 認証を使用する既存の接続アプリケーションをキャンバスアプリケーションとして公開する場合、2 つ
のオプションがあります。1 つ目は、既存のアプリケーションを編集して新バージョンを作成し、キャンバス
アプリケーション情報を追加する方法です。この場合、アプリケーションは引き続き同じクライアント ID と
コンシューマの秘密を使用できます。2 つ目のオプションは、新しいキャンバスアプリケーションを作成する
43
OAuth 認証
Force.com Canvas SDK
方法です。この場合、新しいクライアント ID とコンシューマの秘密を取得し、その情報でアプリケーション
を更新する必要があります。
関連トピック:
認証
キャンバスアプリケーションのユーザフロー — OAuth
キャンバスアプリケーションのユーザフロー — OAuth
キャンバスアプリケーションで OAuth 認証を使用している場合、キャンバスアプリケーションがユーザイン
ターフェースのどこに配置されているのかや、ユーザアクセス権がどのように設定されているかによってユー
ザエクスペリエンスが異なります。以下は、OAuth 認証を使用するキャンバスアプリケーションのユーザフロー
を図解したものです。
44
OAuth 認証
Force.com Canvas SDK
関連トピック:
OAuth 認証
OAuth フローの開始
45
OAuth 認証
Force.com Canvas SDK
OAuth フローの開始
次のコード例に、キャンバスアプリケーションで OAuth を使用して認証プロセスを開始する方法を示します。
<html>
<head>
<script type="text/javascript" src="/sdk/js/canvas-all.js"></script>
</head>
<body>
<script>
function loginHandler(e) {
var uri;
if (! Sfdc.canvas.oauth.loggedin()) {
uri = Sfdc.canvas.oauth.loginUrl();
Sfdc.canvas.oauth.login(
{uri : uri,
params: {
response_type : "token",
client_id : "3MVG9lKcPoNINVBLigmW.8dAn4L5HwY VBzxbW5FFdzvU0re2
f7o9aHJNUpY9ACdh.3SUgw5rF2nSsC9_cRqzD",
redirect_uri : encodeURIComponent(
"https://demoapp1234.herokuapp.com/sdk/callback.html")
}});
}
else {
Sfdc.canvas.oauth.logout();
login.innerHTML = "Login";
Sfdc.canvas.byId("oauth").innerHTML = "";
}
return false;
}
// Bootstrap the page once the DOM is ready.
Sfdc.canvas(function() {
// On Ready...
var login
= Sfdc.canvas.byId("login"),
loggedIn = Sfdc.canvas.oauth.loggedin(),
token = Sfdc.canvas.oauth.token()
login.innerHTML = (loggedIn) ? "Logout" : "Login";
if (loggedIn) {
// Only displaying part of the OAuth token for better formatting.
Sfdc.canvas.byId("oauth").innerHTML = Sfdc.canvas.oauth.token()
.substring(1,40) + "…";
}
login.onclick=loginHandler;
});
</script>
<h1 id="header">Force.com Canvas OAuth App</h1>
<div>
access_token = <span id="oauth"></span>
</div>
<div>
<a id="login" href="#">Login</a><br/>
46
キャンバスアプリケーションの SAML シングルサインオ
ン
Force.com Canvas SDK
</div>
</body>
</html>
関連トピック:
OAuth 認証
キャンバスアプリケーションの SAML シングルサインオン
署名付き要求と OAuth 認証のどちらを使用する場合でも、SAML ベースのシングルサインオン (SSO) を使用して
ユーザにシームレスな認証フローを提供できます。Salesforceを ID プロバイダまたはサービスプロバイダとして
活用できます。SAML SSO では、SAML を介したキャンバスアプリケーションへの自動認証、および署名付き要
求を介した Salesforce への認証をユーザに提供できます。
Security Assertion Markup Language (SAML) は、Web でユーザを認証するための XML ベースの標準です。これにより、
2 つのドメイン間で認証データをやりとりできます。この機能を使用して、ユーザによって開かれるときに標
準の SAML 認証フローを開始するキャンバスアプリケーションを作成できます。このプロセスが完了したら、
ユーザは Web アプリケーションに対して認証されます。
署名付き要求認証を使用するキャンバスアプリケーションの場合、Force.com Canvas SDK に含まれる 2 つのメソッ
ドによって、キャンバスアプリケーションで Salesforce をコールして直接新しい署名付き要求を受け取るか、
Salesforceから Web アプリケーションエンドポイントに署名付き要求を再送信できます。これによって、エンド
ツーエンドの認証フローが完了します。
refreshSignedRequest メソッド
コールバックを介して新しい署名付き要求を返します。SAML SSO プロセスの完了後、アプリケーションは
このメソッドをコールし、新しい署名付き要求を受け取ることができます。このメソッドは、よりクライ
アント側の JavaScript アプローチを使用して署名付き要求を取得する必要がある開発者向けです (Force.com
Canvas SDK がアプリケーションに署名付き要求を送信)。
repost メソッド
キャンバスアプリケーションに対する POST の開始を親ウィンドウに要求し、更新された署名付き要求を含
むアプリケーションページを再読み込みします。SAML SSO プロセスの完了後、アプリケーションでこのメ
ソッドをコールすることができ、新しい署名付き要求が POST を介してアプリケーションに送信されます。
このメソッドは、よりサーバ側のアプローチを使用して署名付き要求を取得する必要がある開発者向けで
す (Salesforce がサーバに署名付き要求を POST 送信)。
メモ: SAML の開始方法 Identity Provider Initiated は、Force.com コミュニティのキャンバスアプ
リケーションではサポートされていません。
キャンバスアプリケーションでのコンテキストの取得
署名付き要求を使用してキャンバスアプリケーションを認証すると、キャンバスアプリケーション URL への
POST の一部として CanvasRequest オブジェクト (Context オブジェクトが含まれる) を取得します。認証に OAuth を
使用する場合やコンテキスト情報を取得するためにコールする場合は、JavaScript コールを行います。
47
クロスドメイン XHR
Force.com Canvas SDK
次のコードサンプルは、JavaScript コールでコンテキストを取得する例を示しています。このコードでは、テキ
ストが「Get Context」のリンクを作成し、そのリンクから Sfdc.canvas.client.ctx 関数をコールします。
<script>
function callback(msg) {
if (msg.status !== 200) {
alert("Error: " + msg.status);
return;
}
alert("Payload: ", msg.payload);
}
var ctxlink = Sfdc.canvas.byId("ctxlink");
var client = Sfdc.canvas.oauth.client();
ctxlink.onclick=function() {
Sfdc.canvas.client.ctx(callback, client)};
}
</script>
<a id="ctxlink" href="#">Get Context</a>
関連トピック:
Force.com Canvas SDK
Context
CanvasRequest コンテキストデータの絞り込み
クロスドメイン XHR
キャンバスアプリケーションは、iFrame の Salesforce ページにロードされます。このため、キャンバスアプリ
ケーションは (それ自体のドメインでは) XHR (XML HTTP 要求) のコールを *.salesforce.com ドメインに返すことはで
きません。独自のプロキシを SDK の一部として作成およびリリースできますが、Force.com Canvas には、JavaScript
で作成されたクライアント側のプロキシが用意されています。このプロキシを使用して、クライアント側の
XHR コールを Salesforce に返すことができます。
クライアントからこのプロキシを使用して XHR 要求を作成すると、API によってその要求が外部の iFrame に転
送され、要求が自動的に送信されます。要求が完了すると、SDK はその結果を使用してクライアントのコール
バック関数をコールします。XHR コールを作成する方法の例として、次のようなものがあります。
• Chatter ユーザリストの取得
• Chatter フィードへの投稿
メモ: SDK ではクロスドメイン XHR コールがサポートされていますが、同じドメインコールの作成には使
用しないでください。
関連トピック:
Force.com Canvas SDK
48
Chatter ユーザリストの取得
Force.com Canvas SDK
Chatter ユーザリストの取得
次のコード例に、Chatter ユーザリストを返すためのコールを示します。
// Paste the signed request string into a JavaScript object for easy access.
var sr = JSON.parse('<%=signedRequestJson%>');
// Reference the Chatter user's URL from Context.Links object.
var chatterUsersUrl = sr.context.links.chatterUsersUrl;
// Make an XHR call back to salesforce through the supplied browser proxy.
Sfdc.canvas.client.ajax(chatterUsersUrl,
{client : sr.client,
success : function(data){
// Make sure the status code is OK.
if (data.status === 200) {
// Alert with how many Chatter users were returned.
alert("Got back " + data.payload.users.length +
" users"); // Returned 2 users
}
}});
関連トピック:
クロスドメイン XHR
Context
Links
Chatter フィードへの投稿
次のコード例に、コンテキストユーザの Chatter フィードに項目を投稿するためのコールを示します。
var sr = JSON.parse('<%=signedRequestJson%>');
// Reference the Chatter user's URL from Context.Links object.
var url = sr.context.links.chatterFeedsUrl+"/news/"+sr.context.user.userId+"/feed-items";
var body = {body : {messageSegments : [{type: "Text", text: "Some Chatter Post"}]}};
Sfdc.canvas.client.ajax(url,
{client : sr.client,
method: 'POST',
contentType: "application/json",
data: JSON.stringify(body),
success : function(data) {
if (201 === data.status) {
alert("Success");
}
49
キャンバスアプリケーションのサイズ変更
Force.com Canvas SDK
}
});
関連トピック:
クロスドメイン XHR
Context
Links
キャンバスアプリケーションのサイズ変更
Force.com Canvas は、キャンバスアプリケーションのサイズを変更するメソッドを提供します。これらのメソッ
ドに関するすべてのリファレンスドキュメントは、SDK およびこちらにあります。
• autogrow: キャンバス iFrame のコンテンツサイズを確認するタイマーを開始または停止し、フレームを調
節します。「自動的なキャンバスアプリケーションのサイズ変更」を参照してください。
• resize: キャンバス iFrame のサイズを変更するように親ウィンドウに通知します。「明示的なキャンバス
アプリケーションのサイズ変更」を参照してください。
• size: キャンバス iFrame の現在のサイズを返します。「キャンバスアプリケーションのサイズの取得」を参
照してください。
• subscribe: 親イベントを登録します。現在、canvas 名前空間でサポートされている親イベントは、(親の)
canvas.scroll のみです。「親イベントの登録」を参照してください。
注意: キャンバスアプリケーションでサイズ変更機能を使用するには、キャンバスアプリケーションに関
連付けられている HTML ページの一番初めに DOCTYPE 宣言を記述する必要があります。たとえば、<!DOCTYPE
html> のように記述します。
関連トピック:
Force.com Canvas SDK
自動的なキャンバスアプリケーションのサイズ変更
次のコード例に、autogrow メソッドをコールしてキャンバスアプリケーションのサイズを変更する方法を示
します。このメソッドは、コンテンツのサイズがいつ変更されるかが不明な場合に使用します。
メモ: Mozilla® Firefox® および Microsoft® Internet Explorer® では、コンテンツサイズを縮小した場合に autogrow
メソッドでフレームのサイズが変更されないことがあります。この場合は、resize メソッドを使用し
て、変更後のフレームの正確なサイズを指定できます。
// Turn on auto grow with default settings.
Sfdc.canvas(function() {
sr = JSON.parse('<%=signedRequestJson%>');
Sfdc.canvas.client.autogrow(sr.client);
});
50
明示的なキャンバスアプリケーションのサイズ変更
Force.com Canvas SDK
// Turn on auto grow with polling interval of 100ms (milliseconds).
Sfdc.canvas(function() {
sr = JSON.parse('<%=signedRequestJson%>');
Sfdc.canvas.client.autogrow(sr.client, true, 100);
});
// Turn off auto grow.
Sfdc.canvas(function() {
sr = JSON.parse('<%=signedRequestJson%>');
Sfdc.canvas.client.autogrow(sr.client, false);
});
関連トピック:
キャンバスアプリケーションのサイズ変更
明示的なキャンバスアプリケーションのサイズ変更
明示的なキャンバスアプリケーションのサイズ変更
次のコード例に、resize メソッドをコールしてキャンバスアプリケーションのサイズを変更する方法を示し
ます。高さと幅のパラメータを指定しない場合、親ウィンドウはキャンバスアプリケーションの高さをそのコ
ンテンツに基づいて判断しようと試み、その結果に応じて iFrame の幅と高さを設定します。
// Automatically determine the size.
Sfdc.canvas(function() {
sr = JSON.parse('<%=signedRequestJson%>');
Sfdc.canvas.client.resize(sr.client);
});
// Set the height and width explicitly.
Sfdc.canvas(function() {
sr = JSON.parse('<%=signedRequestJson%>');
Sfdc.canvas.client.resize(sr.client, {height : "1000px", width : "900px"});
});
// Set only the height.
Sfdc.canvas(function() {
sr = JSON.parse('<%=signedRequestJson%>');
Sfdc.canvas.client.resize(sr.client, {height : "1000px"});
});
関連トピック:
キャンバスアプリケーションのサイズ変更
自動的なキャンバスアプリケーションのサイズ変更
キャンバスアプリケーションのサイズの取得
51
キャンバスアプリケーションのサイズの取得
Force.com Canvas SDK
キャンバスアプリケーションのサイズの取得
次のコード例に、size メソッドをコールしてキャンバスアプリケーションのサイズを取得する方法を示しま
す。console.log 関数でフレームサイズが出力されるため、キャンバスアプリケーションのサイズを変更し
ながら、サイズの変化を確認できます。
// Get the canvas app sizes in the sizes object.
var sizes = Sfdc.canvas.client.size();
console.log("contentHeight; " + sizes.heights.contentHeight);
console.log("pageHeight; " + sizes.heights.pageHeight);
console.log("scrollTop; " + sizes.heights.scrollTop);
console.log("contentWidth; " + sizes.widths.contentWidth);
console.log("pageWidth; " + sizes.widths.pageWidth);
console.log("scrollLeft; " + sizes.widths.scrollLeft);
// Resize the canvas app.
Sfdc.canvas(function() {
sr = JSON.parse('<%=signedRequestJson%>');
Sfdc.canvas.client.autogrow(sr.client);
});
関連トピック:
キャンバスアプリケーションのサイズ変更
親イベントの登録
親イベントの登録
次のコード例に、subscribe メソッドをコールして、キャンバスアプリケーションが親イベントを登録でき
るようにする方法を示します。この例では、ユーザが親ウィンドウでスクロールすると起動する onscroll
イベントを処理します。
//Subscribe to the parent window onscroll event.
Sfdc.canvas(function() {
sr = JSON.parse('<%=signedRequestJson%>');
// Capture the onScrolling event of the parent window
Sfdc.canvas.client.subscribe(sr.client,
{name : 'canvas.scroll', onData : function (event) {
console.log("Parent's contentHeight; " + event.heights.contentHeight);
console.log("Parent's pageHeight; " + event.heights.pageHeight);
console.log("Parent's scrollTop; " + event.heights.scrollTop);
console.log("Parent's contentWidth; " + event.widths.contentWidth);
console.log("Parent's pageWidth; " + event.widths.pageWidth);
console.log("Parent's scrollLeft; " + event.widths.scrollLeft);
}}
52
キャンバスアプリケーションの方向の変更の処理
Force.com Canvas SDK
);
});
関連トピック:
キャンバスアプリケーションのサイズ変更
キャンバスアプリケーションの方向の変更の処理
orientation イベントでは、モバイルデバイスでキャンバスアプリケーションが表示される方向の変更を処
理できます。キャンバスアプリケーションをこのイベントに登録すると、親ウィンドウで window.orientation
イベントが実行されるたびにこのイベントも実行されます。このイベントは、次の値を含むペイロードを返し
ます。
値
説明
clientHeight
キャンバスアプリケーションを表示するデバイ
スに固有のアプリケーションの高さ (ピクセル
単位)。
clientWidth
キャンバスアプリケーションを表示するデバイ
スに固有のアプリケーションの幅 (ピクセル単
位)。
orientation
次のいずれかの値を含みます。
• 0: 横から縦に変更
• 90: 縦から横に変更
• -90: 反時計回りに縦から横に変更
次のコードの例は、orientation イベントに登録する方法を示しています。
// Capture the orientation event of the parent window.
Sfdc.canvas.client.subscribe(sr.client,
{name : 'canvas.orientation',
onData : function (event) {
console.log("Parent's orientation: " + event.orientation +
"Canvas app height: " + event.clientHeight +
"Canvas app width: " + event. clientWidth);
}} );
});
メモ: orientation イベントは、Windows Phone ではサポートされていません。
関連トピック:
キャンバスアプリケーションのサイズ変更
親イベントの登録
53
キャンバスアプリケーションイベントの実装
Force.com Canvas SDK
キャンバスアプリケーションイベントの実装
イベントは、キャンバスアプリケーション間でイベントを送受信する JavaScript ベースの方法を提供します。イ
ベントを使用すると、単一ページ上の複数のキャンバスアプリケーション間のコミュニケ ションが可能にな
ります。
1 つのシナリオとして、あるページで旅行と費用のアプリケーションと承認アプリケーションという 2 つのキャ
ンバスアプリケーションを公開するとします。費用レポートの状況が変化すると、イベントが発生してその費
用レポートのデータ (JSON 形式) を取得するようなイベントを作成できます。承認キャンバスアプリケーション
はそのイベントを登録し、イベントが発生したときにコールされる関数を指定します。状況が変化すると、承
認アプリケーションはそのイベントを受信し、指定された関数が実行されます。
Force.com Canvas は、キャンバスアプリケーションにカスタムイベントを実装するメソッドを提供します。これ
らのメソッドに関するすべてのリファレンスドキュメントは、SDK およびこちらにあります。
• publish: その他のキャンバスアプリケーションまたは Visualforce ページが登録できるカスタムイベントを
作成します。「キャンバスアプリケーションイベントの作成」を参照してください。
• subscribe: 親イベントまたはカスタムイベントを登録します。このメソッドは、複数のイベントを登録す
るために使用できます。「キャンバスアプリケーションイベントの登録」を参照してください。
• unsubscribe: 親イベントまたはカスタムイベントから登録解除します。このメソッドは、複数のイベント
から登録解除するために使用できます。「キャンバスアプリケーションイベントからの登録解除」を参照
してください。
メモ: subscribe メソッドおよび unsubscribe メソッドは、単一のストリーミング API イベントの登録
にも使用できます。
関連トピック:
Force.com Canvas SDK
キャンバスアプリケーションイベントの考慮事項
キャンバスアプリケーションでのストリーミング API の使用
キャンバスアプリケーションイベントの考慮事項
キャンバスアプリケーションイベントを実装するときの考慮事項は、次のとおりです。
• イベントに名前を付ける場合は名前空間を使用することをお勧めしますが、必須ではありません。
• イベントの名前空間は、Salesforceの組織の名前空間とは異なります。ただし、名前空間を使用する場合は、
イベントと組織の名前空間を同じにすることをお勧めします。
• 名前空間は、ピリオドを含まない文字列である必要があります。たとえば、my.name.space.statusChanged
は無効です。名前空間を含む有効なイベント名の例は mynamespace.statusChanged です。
• 次の名前は予約されており、名前空間には使用できません。
– canvas
– chatter
– force
– publisher
54
キャンバスアプリケーションイベントの作成
Force.com Canvas SDK
– salesforce
– sfdc
• イベントは、同じページのキャンバスアプリケーション間でのみ動作します。Chatter タブにあるキャンバ
スアプリケーションでは、Visualforce ページのキャンバスアプリケーションで公開されるイベントを登録で
きません。
• subscribe コールでは複数のカスタムイベントを登録できます。
• subscribe コールでは、ストリーミング API イベントを 1 つのみ登録できます。
• 同じ subscribe コールを使用してカスタムイベントとストリーミング API イベントを登録することはでき
ません。
• 1 つの配列で名前が同じ複数のイベントを定義した場合は、最後に定義されたイベントのみが有効です。次
の例では、Status が Negotiating である最後のイベントが使用されます。
Sfdc.canvas.client.subscribe(sr.client, [
{
name :"mynamespace.statusChanged",
payload : {status : 'Closed'}
},
{
name:"mynamespace.statusChanged",
payload : {status : 'Negotiating'}
]);
これは、ストリーミング API イベントにも当てはまります。
関連トピック:
キャンバスアプリケーションイベントの実装
キャンバスアプリケーションイベントの作成
次のコード例に、publish メソッドをコールしてキャンバスアプリケーションイベントを作成する方法を示
します。名前空間を使用している場合は、イベント名の先頭に名前空間を指定する必要があります。たとえ
ば、namespace.eventName を指定します。
Sfdc.canvas(function() {
sr = JSON.parse('<%=signedRequestJson%>');
Sfdc.canvas.client.publish(sr.client,
{name : "mynamespace.statusChanged", payload : {status : 'Completed'}});
});
関連トピック:
キャンバスアプリケーションイベントの実装
キャンバスアプリケーションイベントの作成
55
キャンバスアプリケーションイベントの登録
Force.com Canvas SDK
キャンバスアプリケーションイベントの登録
カスタムイベントの登録
次のコード例に、subscribe メソッドをコールして 1 つのキャンバスアプリケーションイベントを登録する
方法を示します。
// Subscribe to a custom event.
Sfdc.canvas(function() {
sr = JSON.parse('<%=signedRequestJson%>');
Sfdc.canvas.client.subscribe(sr.client,
{name : 'mynamespace.statusChanged', onData : function (event) {
console.log("Subscribed to custom event ", event);
}}
);
});
複数のカスタムイベントの登録
次のコード例に、subscribe メソッドをコールして複数のキャンバスアプリケーションイベントを登録する
方法を示します。登録するイベントは、異なる名前空間に存在していても、名前空間がなくてもかまいませ
ん。キャンバスアプリケーションにイベントを登録すると、(他のキャンバスアプリケーションにある) イベン
トと (登録するキャンバスアプリケーションにある) 関数間の関係が作成されます。
// Subscribe to multiple events.
Sfdc.canvas(function() {
sr = JSON.parse('<%=signedRequestJson%>');
Sfdc.canvas.client.subscribe(sr.client, [
{name : 'mynamespace.statusChanged', onData : handler1},
{name : 'anothernamespace.tripCancelled', onData : handler2},
]);
});
旅行と費用のキャンバスアプリケーションと承認キャンバスアプリケーションの例では、承認キャンバスアプ
リケーションに handler1 および handler2 という 2 つの関数があります。承認キャンバスアプリケーショ
ンは、旅行と費用のキャンバスアプリケーションにある mynamespace.statusChanged および
mynamespace.tripCancelled という 2 つのイベントに登録されます。承認アプリケーションで
mynamespace.statusChanged イベントを受け取ると、関数 handler1 がコールされます。承認アプリケー
ションで anothernamespace.tripCancelled イベントを受け取ると、関数 handler2 がコールされます。
関連トピック:
キャンバスアプリケーションイベントの実装
親イベントの登録
キャンバスアプリケーションイベントからの登録解除
56
キャンバスアプリケーションイベントからの登録解除
Force.com Canvas SDK
キャンバスアプリケーションイベントからの登録解除
カスタムイベントからの登録解除
次のコード例に、unsubscribe メソッドをコールして 1 つのキャンバスアプリケーションイベントから登録
解除する方法を示します。
// Unsubscribe from a custom event.
Sfdc.canvas(function() {
sr = JSON.parse('<%=signedRequestJson%>');
Sfdc.canvas.client.unsubscribe(sr.client, {name : "mynamespace.statusChanged"});
});
複数のカスタムイベントからの登録解除
次のコード例に、unsubscribe メソッドをコールして複数のキャンバスアプリケーションイベントから登録
解除する方法を示します。登録するイベントは、異なる名前空間に存在していても、名前空間がなくてもかま
いません。
// Unsubscribe from multiple events.
Sfdc.canvas(function() {
sr = JSON.parse('<%=signedRequestJson%>');
Sfdc.canvas.client.unsubscribe(sr.client, ['mynamespace.statusChanged',
"anothernamespace.tripCancelled"]);
});
関連トピック:
キャンバスアプリケーションイベントの実装
キャンバスアプリケーションイベントの登録
親イベントの登録
キャンバスアプリケーションでのストリーミング API の使用
Force.com Canvas には、キャンバスアプリケーションがストリーミング API 通知をリスンできるようにするイベ
ントとメソッドがあります。
• sfdc.streamingapi — 作成後、PushTopic によって定義されたストリーミング API チャネルに関連付る
JavaScript イベントです。「ストリーミング API イベントの使用」を参照してください。
• subscribe — 定義する sfdc.streamingapi イベントを登録します。「ストリーミング API イベントの登
録」を参照してください。
57
ストリーミング API イベントの使用
Force.com Canvas SDK
• unsubscribe — sfdc.streamingapi イベントから登録解除します。「ストリーミング API イベントから
の登録解除」を参照してください。
関連トピック:
ストリーミング API イベントの使用
ストリーミング API イベントの登録
ストリーミング API イベントからの登録解除
http://www.salesforce.com/us/developer/docs/api_streaming/index.htm
ストリーミング API イベントの使用
Force.com Canvas SDK には、sfdc.streamingapi と呼ばれるイベントが含まれています。このイベントでは、
キャンバスアプリケーションでイベントを定義し、そのイベントをストリーミング API チャネルに関連付ける
ことができます。その後、subscribe メソッドを使用してイベントを登録し、ストリーミング API通知を受信
します。
たとえば、Salesforce では、InvoiceStatement が更新され状況が [完了] に変更した場合に通知を受信するストリー
ミング API を作成できます。その後、キャンバスアプリケーションで、そのチャネルに関連付けられたイベン
トを作成し、そのイベントを登録できます。Salesforceでは、請求書明細が完了すると、有効化されたキャンバ
スアプリケーションで通知を受信し、メッセージをユーザに表示するなどの操作を実行できます。
ストリーミング API イベントを定義する場合、次のような考慮事項があります。
• イベントは、PushTopic 名を含む 1 つのパラメータを受け付けます。
• PushTopic 名の先頭に「/topic/」と指定する必要があります。
{name:"sfdc.streamingapi", params:{topic:"/topic/myPushTopicName"}}
関連トピック:
キャンバスアプリケーションでのストリーミング API の使用
ストリーミング API イベントの登録
ストリーミング API イベントの登録
次のコード例に、subscribe メソッドをコールして、キャンバスアプリケーションでストリーミング APIイベ
ントを登録できるようにする方法を示します。イベントを登録するには、キャンバスアプリケーションイベン
トの登録に使用する標準の sfdc.canvas.client.subscribe メソッドをコールします。subscribe メソッ
ドをコールする場合、クライアントおよびストリーミング API イベントを渡す必要があります。ストリーミン
グ API 通知を受信できるのは、開いており、イベントを登録したキャンバスアプリケーションのみです。
この例の onComplete メソッドは、コードでイベントが正常に登録された後で実行する関数を指定します。
onData メソッドは、イベントでストリーミング API 通知を受信したときに実行する関数を指定します。
//
//
//
//
Subscribe to Streaming API events.
The PushTopic to subscribe to must be passed in.
The 'onComplete' method may be defined,
and will fire when the subscription is complete.
58
ストリーミング API イベントからの登録解除
Force.com Canvas SDK
Sfdc.canvas(function() {
sr = JSON.parse('<%=signedRequestJson%>');
var handler1 = function(){ console.log("onData done");},
handler2 = function(){ console.log("onComplete done");};
Sfdc.canvas.client.subscribe(sr.client,
{name : 'sfdc.streamingapi', params:{topic:"/topic/InvoiceStatements"}},
onData : handler1, onComplete : handler2}
);
});
subscribe メソッドをコールすると、REST コールが行われ、ストリーミング API への接続に必要な OAuth 範囲
がキャンバスアプリケーションに設定されていることが確認されます。このため、キャンバスアプリケーショ
ンでストリーミング API イベントを登録するたびに、1 つの API コールが使用され、組織の API 要求数の制限に
カウントされます。ストリーミング API に接続するには、キャンバスアプリケーションに最低でも「データへ
のアクセスと管理 (API)」OAuth 範囲が必要です。
subscribe メソッドへのコールが成功した場合、ペイロード {success:true,handle:handle} で
onComplete メソッドがコールされます。handle は、登録先のストリーミング API チャネルの名前が含まれ
る配列で、subscriptionId は一意の ID が含まれる整数です。たとえば、["/topics/InvoiceStatements",
subscriptionId] です。subscribe メソッドへのコールが失敗した場合、ペイロード
{success:false,errorMessage:msg} で onComplete メソッドがコールされます。msg は、エラーの原因
が含まれる文字列です。
ストリーミング API 通知を受け取るには、PushTopic によって定義されたチャネルを作成する必要があります。
詳細は、『Streaming API 開発者ガイド』の「ステップ 2: PushTopic を作成する」を参照してください。
関連トピック:
ストリーミング API イベントの使用
ストリーミング API イベントからの登録解除
ストリーミング API イベントからの登録解除
次のコード例に、unsubscribe メソッドをコールして、キャンバスアプリケーションがストリーミング API
イベントから登録解除できるようにする方法を示します。
//Unsubscribe from Streaming API events.
//The PushTopic to unsubscribe from must be passed in.
Sfdc.canvas(function() {
sr = JSON.parse('<%=signedRequestJson%>');
Sfdc.canvas.client.unsubscribe(sr.client, {name : 'sfdc.streamingapi',
params:{topic:"/topic/InvoiceStatements"}});
});
関連トピック:
ストリーミング API イベントの使用
ストリーミング API イベントの登録
59
キャンバスアプリケーションのデバッグ
Force.com Canvas SDK
キャンバスアプリケーションのデバッグ
Chrome、Firefox、または Safari を使用して、次の手順に従います。
Force.com Canvas SDK を使用しているとき、デバッグモードを有効にしてトラブルシューティングを容易にする
ことができます。
1. ブラウザでキャンバスアプリケーションを開いたまま、コンソールを開きます。
2. Sfdc.canvas.console.enable();と入力し、Enter キーを押します。
3. ブラウザを更新します。
この画面のデータを使用してキャンバス関連の問題をデバッグできます。
キャンバスアプリケーションでの <select> タグの使用
キャンバス Web アプリケーションで HTML <select> タグを使用していて、キャンバスアプリケーションを
Salesforce1 で使用できるようにする場合、一部のデバイスで予測できない動作になる可能性があります。
<select> の代わりに、jQuery または CSS を使用することを検討してください。
60
第5章
トピック:
キャンバスアプリケーションと Visualforce ペー
ジ
標準のキャンバスアプリケーション以外に、Force.com Canvas を使用して Visualforce
ページにキャンバスアプリケーションを公開することもできます。つまり、Visualforce
ページを表示できる場所であればどこでも、キャンバスアプリケーションを表示で
きます。
•
Visualforce ページの
コード例
•
Visualforce の考慮事
項
開発者は Visualforce ページを使用して次のことを実行できます。
•
apex:canvasApp コ
ンポーネント
• 取引先の [新規] ボタンや取引先責任者の [保存] ボタンなど、標準ボタンを上書き
する
•
Visualforce ページと
キャンバスアプリ
ケーション間での
イベントの使用
• [取引先] タブホームページなどのタブ概要ページを上書きする
• カスタムタブを定義する
• 詳細ページレイアウトにコンポーネントを埋め込む
• ダッシュボードコンポーネントまたはカスタムヘルプページを作成する
• Salesforce コンソールのサイドバー (カスタムコンソールコンポーネント) をカスタ
マイズ、拡張、統合する
Visualforce ページにキャンバスアプリケーションをホストするには、
<apex:canvasApp> コンポーネントを使用します。
メモ: Force.com Canvas フレームワークには、Visualforce ページを使用せずに、キャ
ンバスアプリケーションが含まれる iframe のナビゲーションの制限を回避する
ために使用できるメソッドが含まれます。これらのメソッドには、Salesforce1で
のキャンバスアプリケーションへの移動またはキャンバスアプリケーションか
らの移動を制御する合理化された代替手段が用意されています。詳細は、「キャ
ンバスアプリケーションで使用する Salesforce1 の navigation メソッド」 (ページ
89)を参照してください。
関連トピック:
Visualforce ページのコード例
Visualforce の考慮事項
apex:canvasApp コンポーネント
61
キャンバスアプリケーションと Visualforce ページ
Visualforce ページのコード例
Visualforce ページのコード例
Visualforceページにキャンバスアプリケーションを表示する方法は多数あります。次の例は、applicationName、
developerName、および namespacePrefix を使用して、キャンバスアプリケーションを参照するさまざま
な方法を示しています。
オブジェクト詳細ページ
次のコードスニペットに、[取引先] ページにキャンバスアプリケーションを表示する方法の例を示します。こ
のコードでは、キャンバスアプリケーションのサイズが 400x750 ピクセル (高さ x 幅) に指定されます。この例
では、applicationName と namespacePrefix を使用してキャンバスアプリケーションを指定しています。
<apex:page standardController="Account">
<apex:canvasApp applicationName="Test Inline Visualforce"
namespacePrefix="testorg"
height="400px" width="750px"/>
</apex:page>
標準ページ
次のコードスニペットに、[Visualforce] ページにキャンバスアプリケーションを表示する方法の例を示します。
このコードでは、キャンバスアプリケーションのサイズが 1,000x800 ピクセル (高さ x 幅) に指定されます。さら
に、このコードは 3 つのカスタムパラメータをキャンバスアプリケーションに渡します。この例では、
developerName と namespacePrefix を使用してキャンバスアプリケーションを指定しています。
<apex:page>
<apex:canvasApp developerName="Test_Standard_Visualforce"
namespacePrefix="testorg" height="1000px" width="800px"
parameters="{p1:'value1',p2:'value2',p3:'value3'}"/>
</apex:page>
境界線およびスクロール機能のある標準ページ
次のコードスニペットに、[Visualforce] ページにいくつかの追加 UI 拡張機能でキャンバスアプリケーションを表
示する方法を示します。このコードでは、キャンバスアプリケーションのサイズが 100x500 ピクセル (高さ x 幅)
に指定されます。また、このコードによって、キャンバスアプリケーションの周りに 2 ピクセルの境界が必要
であり、スクロール機能が有効である必要があることが指定されます。この例では、applicationName のみ
を使用するキャンバスアプリケーションを指定しています (これは、キャンバスアプリケーションが作成され
た組織で、その組織に namespacePrefix がない場合にのみ有効です)。
<apex:page>
<apex:canvasApp applicationName="Test Scrolling Visualforce"
height="100px" width="500px"
border="2" scrolling="yes"/>
62
キャンバスアプリケーションと Visualforce ページ
Visualforce の考慮事項
</apex:page>
関連トピック:
キャンバスアプリケーションと Visualforce ページ
Visualforce の考慮事項
http://www.salesforce.com/us/developer/docs/pages/index_Left.htm#StartTopic=Content/pages_compref_canvasApp.htm
apex:canvasApp コンポーネント
Visualforce の考慮事項
<apex:canvasApp> コンポーネントを使用するときの考慮事項は、次のとおりです。
• <apex:canvasApp> コンポーネントは、Force.com Canvas が有効になっている組織で、バージョン 27.0 以降
の Visualforce ページでのみ使用できます。
• オブジェクトの詳細レイアウトにキャンバスアプリケーションを含める場合、ページレイアウトと
<apex:canvasApp> コンポーネントにキャンバスアプリケーションの高さを指定する必要があります。
• 場所 — キャンバスアプリケーションが Visualforce ページにある場合、Environment.displayLocation 項
目には Visualforce という値が含まれます。
関連トピック:
キャンバスアプリケーションと Visualforce ページ
apex:canvasApp コンポーネント
apex:canvasApp コンポーネント
このコンポーネントを使用して、Visualforce ページにキャンバスアプリケーションを表示します。次の表に、
コンポーネントの属性を示します。
引用符やアポストロフィーなどの英数字以外の文字が含まれるパラメータは、JavaScript で安全に使用できるオ
ブジェクトとして渡します。これを行うには、ApexJSONGeneratorクラスのメソッドを使用するApexクラスを記
述し、JSON 文字列を作成します。parameters 値から Apex クラスをコールします。
<apex:page controller="JSONGeneratorSample">
<apex:canvasApp developerName="mycanvas" parameters="{!generateJSON}" />
</apex:page>
また、JSENCODE 関数を使用して文字列をエスケープすることもできます。
<apex:page standardController="Account">
<apex:canvasApp developerName="mycanvas" parameters="{!JSENCODE(Account.Description)}"
/>
</apex:page>
63
キャンバスアプリケーションと Visualforce ページ
apex:canvasApp コンポーネント
属性
型
説明
applicationName
String
キャンバスアプリケーションの名前。
applicationName または developerName のいずれ
かが必要です。
border
String
キャンバスアプリケーションの境界線の幅 (ピクセル単
位)。指定されていない場合、デフォルトの 0 ピクセル
に設定されます。
canvasId
String
キャンバスアプリケーションウィンドウの一意の ID。
この属性を使用して、イベントをキャンバスアプリケー
ションの対象にします。
containerId
String
キャンバスアプリケーションのレンダリングに使用さ
れる HTML 要素の ID。指定されていない場合、デフォル
トの null に設定されます。この属性によって指定され
るコンテナは、<apex:canvasApp> コンポーネントの
後には表示されません。次のコード例に、<div> コン
テナと containerId 属性の有効な使用法を示します。
<apex:page>
<div id="container1"></div>
<apex:canvasApp applicationName="myApp"
containerId="container1"/>
</apex:page>
<apex:page>
<div id="container1">
<apex:canvasApp
applicationName="myApp"
containerId="container1"/>
</div>
</apex:page>
次のコード例に、<div> コンテナと containerId 属
性の無効な使用法を示します。
<apex:page>
<apex:canvasApp applicationName="myApp"
containerId="container1"/>
<div id="container1">
</div>
</apex:page>
developerName
String
キャンバスアプリケーションの内部名。 接続アプリ
ケーションを作成してキャンバスアプリケーションを
公開するときは、[API 名] 項目にこの値を指定しま
す。developerName または applicationName のい
ずれかが必要です。
64
キャンバスアプリケーションと Visualforce ページ
apex:canvasApp コンポーネント
属性
型
説明
entityFields
String
オブジェクトに配置されたVisualforceページにコンポー
ネントが表示されるときに、署名付き要求 Record オブ
ジェクトで返される項目を指定します。この属性が指
定されていないか空白の場合、ID 項目のみが返されま
す。有効な属性値は次のとおりです。
• 項目名のカンマ区切りのリスト。たとえば、[取引
先 電話] 項目と [Fax] 項目を返すには、
entityFields="Phone,Fax" という属性を指定し
ます。
• アスタリスク「*」。関連付けられたオブジェクト
のすべての項目を返します。
height
String
キャンバスアプリケーションウィンドウの高さ (ピクセ
ル単位)。指定されていない場合、デフォルトの 900 ピ
クセルに設定されます。
id
String
ページの他のコンポーネントが <apex:canvasApp>
コンポーネントを参照できるようにする一意の識別子。
namespacePrefix
String
キャンバスアプリケーションが作成された Developer
Edition 組織の名前空間の値。名前空間を設定できるの
は Developer Edition 組織のみであるため、キャンバスア
プリケーションが別の種別の組織で作成された場合、
これは省略可能です。指定されていない場合、デフォ
ルトの null に設定されます。
onCanvasAppError
String
キャンバスアプリケーションがレンダリングできない
ときにコールされる JavaScript 関数の名前。
onCanvasAppLoad
String
キャンバスアプリケーションがロードした後にコール
される JavaScript 関数の名前。
parameters
String
キャンバスアプリケーションに渡されるパラメータの
オブジェクト表現。JSON 形式または JavaScript オブジェ
クトリテラルとして指定します。JavaScript オブジェク
トリテラルのパラメータの例:
{param1:'value1',param2:'value2'}。指定され
ていない場合、デフォルトの null に設定されます。
rendered
Boolean
コンポーネントをページに表示するかどうかを指定す
る。指定されていない場合、デフォルトの true に設定
されます。
65
キャンバスアプリケーションと Visualforce ページ
レコードオブジェクトで返される項目
属性
型
説明
scrolling
String
キャンバスアプリケーションのウィンドウでスクロー
ルバーが使用されるかどうかを指定します。有効な値
は、次のとおりです。
• auto
• いいえ
• はい
指定されていない場合、デフォルトの no に設定され
ます。この属性に無効な値が含まれていると、ブラウ
ザエラーを回避するために no と同様に扱われます。
width
String
キャンバスアプリケーションウィンドウの幅 (ピクセル
単位)。指定されていない場合、デフォルトの 800 ピク
セルに設定されます。
関連トピック:
キャンバスアプリケーションと Visualforce ページ
http://www.salesforce.com/us/developer/docs/pages/index_Left.htm#StartTopic=Content/pages_compref_canvasApp.htm
Visualforce ページのコード例
レコードオブジェクトで返される項目
レコードオブジェクトで返される項目
<apex:canvasApp> コンポーネントを使用してキャンバスアプリケーションを表示した Visualforce ページが、
オブジェクトに関連付けられている場合 (たとえば、ページレイアウトへ配置されているなど)、関連するオブ
ジェクトから返される項目を指定できます。そのためには、entityFields 属性を使用します。この属性は、
次のいずれかの方法で使用できます。
特定のオブジェクト項目を返す
レコードオブジェクトで特定のオブジェクト項目を返すには、entityFields 属性に項目名のカンマ区切り
リストを設定します。リスト内に無効な項目名があると、その項目名は無視され、レコードオブジェクトで有
効な項目が返されます。
<apex:canvasApp applicationName="MyApp" entityFields="Phone,Fax,BillingCity"
containerId="canvasAppDiv"/>
上記のコードにより、次のようなレコードオブジェクトが返されます。
"record":{
"attributes":{
"type":"Account",
"url":"/services/data/v37.0/sobjects/Account/001xx000003DGWiAAO"
},
66
キャンバスアプリケーションと Visualforce ページ
レコードオブジェクトで返される項目
"Id":"001xx000003DGWiAAO",
"Phone":"(555) 555-5555",
"Fax":"(555) 555-5555",
"BillingCity":"Seattle"
}
すべてのオブジェクト項目を返す
レコードオブジェクトですべてのオブジェクト項目を返すには、entityFields 属性にワイルドカード「*」
を設定します。
<apex:canvasApp applicationName="MyApp" entityFields="*" containerId="canvasAppDiv"/>
上記のコードにより、次のようなレコードオブジェクトが返されます。
"record":{
"attributes":{
"type":"Account",
"url":"/services/data/v37.0/sobjects/Account/001xx000003DGWiAAO"
},
"Id":"001xx000003DGWiAAO",
"IsDeleted":false,
"MasterRecordId":null,
"Name":"Edge Communications",
"Type":"Customer - Channel",
"ParentId":null,
"BillingStreet":"123 Main Street",
"BillingCity":"Seattle",
"BillingState":"WA",
"BillingPostalCode":"98121",
"BillingCountry":"USA",
...
}
ID 項目を返す
<apex:canvasApp> コンポーネントに entityFields 属性がない場合、または属性が空白の場合、レコード
オブジェクトでは ID 項目のみが返されます。
<apex:canvasApp applicationName="MyApp" containerId="canvasAppDiv"/>
上記のコードにより、次のようなレコードオブジェクトが返されます。
"record":{
"attributes":{
"type":"Account",
"url":"/services/data/v37.0/sobjects/Account/001xx000003DGWiAAO"
},
67
キャンバスアプリケーションと Visualforce ページ
Visualforce ページとキャンバスアプリケーション間での
イベントの使用
"Id":"001xx000003DGWiAAO"
}
関連トピック:
apex:canvasApp コンポーネント
Record
キャンバスアプリケーションの動作の制御
Visualforce ページとキャンバスアプリケーション間でのイベント
の使用
Force.com Canvas には、キャンバスアプリケーションと親 Visualforce ページ間でイベントの公開と登録に使用可
能なメソッドが用意されています。このプロセスには、Visualforceページからのイベントの公開、Visualforceペー
ジでのイベントのリスン、Visualforce ページからのイベントの登録解除、キャンバスアプリケーションを含む
Visualforceページのサイズ変更が含まれます。キャンバスアプリケーションをサイズ変更するこのプロセスは、
「キャンバスアプリケーションのサイズ変更」に記載されている、キャンバスアプリケーション自体をサイズ
変更するプロセスとは異なります。これらのメソッドに関するすべてのリファレンスドキュメントは、SDK お
よびこちらにあります。
• publish — Visualforce ページでキャンバスアプリケーションの登録先イベントを公開します。「Visualforce
ページからのキャンバスイベントの公開」を参照してください。
• resize — Visualforce ページで、キャンバスアプリケーションの iFrame のサイズ変更に使用されます。
「Visualforce ページでのキャンバスアプリケーションのサイズ変更」を参照してください。
• subscribe — Visualforce ページで、キャンバスアプリケーションが公開するイベントへの登録に使用され
ます。「イベントの登録」を参照してください。
• unsubscribe — Visualforce ページで、キャンバスアプリケーションが公開する親イベントからの登録解除
に使用されます。「Visualforce ページでのイベントからの登録解除」を参照してください。
これらのメソッドを使用するVisualforceページには、Controller.jsオブジェクトが必要です。Visualforceページのス
クリプトは、次のようになります。
<script
type="text/javascript"src="https://yourDomain.my.salesforce.com/canvas/sdk/js/30.0/controller.js">
メモ: Force.com のメソッドを使用すると、Visualforce を使用せずにキャンバスアプリケーションと Salesforce1
アプリケーションの間のナビゲーションを円滑に統合できます。このメソッドは、Force.com Canvas フレー
ムワーク内の JavaScript ライブラリにあるイベントです。いずれかの navigation メソッドをキャンバスコー
ドからコールすると、Salesforce1 にイベントが送信されます。Salesforce1 は、このペイロードを読み取って
68
キャンバスアプリケーションと Visualforce ページ
Visualforce ページからのキャンバスイベントの公開
指定の移行先にユーザを移動します。詳細は、「キャンバスアプリケーションで使用する Salesforce1 の
navigation メソッド」 (ページ 89)を参照してください。
関連トピック:
Visualforce ページからのキャンバスイベントの公開
Visualforce ページでのキャンバスアプリケーションのサイズ変更
イベントの登録
Visualforce ページでのイベントからの登録解除
apex:canvasApp コンポーネント
Visualforce ページからのキャンバスイベントの公開
次のコード例に、publish メソッドをコールして、Visualforceページから myevent イベントを公開する方法を
示します。このイベントを登録しているキャンバスアプリケーションでイベントを受信します。
// Target all canvas apps.
Sfdc.canvas.controller.publish({name : 'mynamespace.myevent',
payload : {}});
次のコード例に、publish メソッドをコールして、Visualforceページから指定されたキャンバスアプリケーショ
ンにイベントを公開する方法を示します。
イベントが特定のキャンバスアプリケーションに公開されると、Visualforceページの他のキャンバスアプリケー
ションでそのイベントを登録していても、指定されたキャンバスアプリケーションでのみそのイベントを受信
します。次のコード例では、Visualforceページにキャンバスアプリケーション app1、app2、および app3 があり、
そのすべてが myevent を登録している場合、app1 でのみイベントを受信します。
// Target a specific canvas app
// where "app1" is the canvasId specified in the canvas component.
// For example: <apex:canvasApp canvasId="app1">
Sfdc.canvas.controller.publish({name : 'mynamespace.myevent',
payload : {},
target : {canvas : 'app1'}});
target パラメータでは、target : [{canvas : 'app1'}, {canvas: 'app2'}] のようにキャンバスア
プリケーションの配列を渡して複数のキャンバスアプリケーションを指定できます。
関連トピック:
Visualforce ページとキャンバスアプリケーション間でのイベントの使用
Visualforce ページでのキャンバスアプリケーションのサイズ変更
イベントの登録
Visualforce ページでのイベントからの登録解除
apex:canvasApp コンポーネント
69
キャンバスアプリケーションと Visualforce ページ
Visualforce ページでのキャンバスアプリケーションのサ
イズ変更
Visualforce ページでのキャンバスアプリケーションのサイズ変更
次のコード例に、resize メソッドをコールして、Visualforceページ内で特定のキャンバスアプリケーションの
高さと幅を明示的に設定する方法を示します。
// Set the height and width explicitly and target a canvas app
// Where 'mycanvas0' is the canvasId on the canvas component
// <apex:canvasApp canvasId="mycanvas0"/>
var target = {canvas : "mycanvas0"};
Sfdc.canvas.controller.resize( {height : "1000px", width : "900px"}, target);
次のコード例に、resize メソッドをコールして、Visualforceページ内ですべてのキャンバスアプリケーション
の高さを設定する方法を示します。
//Set only the height on all canvas apps
Sfdc.canvas.controller.resize( {height : "1000px"});
関連トピック:
Visualforce ページとキャンバスアプリケーション間でのイベントの使用
Visualforce ページからのキャンバスイベントの公開
イベントの登録
Visualforce ページでのイベントからの登録解除
イベントの登録
次のコード例に、Visualforceページ内で subscribe メソッドをコールして、キャンバスアプリケーションから
公開された指定のイベントを登録する方法を示します。
// Subscribe to a single event.
Sfdc.canvas.controller.subscribe({name : 'mynamespace.myevent0',
onData : function (e) {}});
// Subscribe to multiple events in a single call.
Sfdc.canvas.controller.subscribe([
{name : 'mynamespace.myevent1', onData : function(e) {}},
{name : 'mynamespace.myevent2', onData : function(e) {}}
]);
関連トピック:
Visualforce ページとキャンバスアプリケーション間でのイベントの使用
Visualforce ページからのキャンバスイベントの公開
Visualforce ページでのキャンバスアプリケーションのサイズ変更
Visualforce ページでのイベントからの登録解除
キャンバスアプリケーションイベントの実装
70
キャンバスアプリケーションと Visualforce ページ
Visualforce ページでのイベントからの登録解除
Visualforce ページでのイベントからの登録解除
次のコード例に、Visualforce ページ内で unsubscribe メソッドをコールして、2 つのイベントから登録解除す
る方法を示します。
Sfdc.canvas.controller.unsubscribe(['mynamespace.myevent2', 'mynamespace.myevent2']);
関連トピック:
Visualforce ページとキャンバスアプリケーション間でのイベントの使用
Visualforce ページからのキャンバスイベントの公開
Visualforce ページでのキャンバスアプリケーションのサイズ変更
イベントの登録
71
第6章
トピック:
•
ページレイアウト
でのキャンバスア
プリケーションの
表示場所
•
ページレイアウト
へのキャンバスア
プリケーションの
追加
ページレイアウトまたはモバイルカードのキャ
ンバスアプリケーション
キャンバスアプリケーションは、任意の標準オブジェクトまたはカスタムオブジェ
クトのページレイアウトに追加できます。ページレイアウトの編集時にパレットに
[キャンバスアプリケーション] カテゴリを表示させるには、Salesforceアプリケーショ
ンでキャンバスアプリケーションを作成するときにキャンバスアプリケーションの
場所を [レイアウト] と [モバイルカード] に設定する必要があります。
関連トピック:
ページレイアウトへのキャンバスアプリケーションの追加
ページレイアウトでのキャンバスアプリケーションの表示場所
72
ページレイアウトまたはモバイルカードのキャンバスア
プリケーション
ページレイアウトでのキャンバスアプリケーションの表
示場所
ページレイアウトでのキャンバスアプリケーションの表示場所
キャンバスアプリケーションをページレイアウトのどこに配置したかに応じて、キャンバスアプリケーション
は Salesforce フルサイトまたは Salesforce1 に表示されます。
次の表は、キャンバスアプリケーションをページレイアウトに追加したときに表示される場所を示します。
キャンバスアプリケー
Salesforce フルサイ Salesforce1 にキャン キャンバスアプリケーションが表示さ
ションをページレイアウ トにキャンバスア バスアプリケーショ れる Salesforce1 の場所
トの次の場所に追加した プリケーションが ンが表示されるか
場合
表示されるか
任意のセクション ([モバ
イルカード] セクション以
外)
はい
はい
レコード詳細ページ
[モバイルカード] セクショ
ン
いいえ
はい
モバイルカード
関連トピック:
ページレイアウトまたはモバイルカードのキャンバスアプリケーション
ページレイアウトへのキャンバスアプリケーションの追加
ページレイアウトへのキャンバスアプリケーションの追加
次の手順に従って、取引先のページレイアウトにキャンバスアプリケーションを追加します。
1. 「アプリケーションの作成」の手順に従って、Heroku クイックスタートを使用してキャンバスアプリケー
ションを作成します。
2. Salesforce アプリケーションで、[設定] から [クイック検索] ボックスに「アプリケーション」と入力し、[ア
プリケーション] を選択します。
3. [接続アプリケーション] 関連リストで、作成したアプリケーションの横にある [編集] をクリックします。
4. [キャンバスアプリケーション設定] セクションの [場所] 項目で、[レイアウト] と [モバイルカード] を選択
します。
5. [保存] をクリックします。
6. 取引先のオブジェクトの管理設定から、[ページレイアウト] に移動します。
7. [取引先レイアウト] の横にある [編集] リンクをクリックします。
73
ページレイアウトまたはモバイルカードのキャンバスア
プリケーション
ページレイアウトへのキャンバスアプリケーションの追
加
キャンバスアプリケーションの場所を [レイアウト] と [モバイルカード] に設定したため、パレットに [キャ
ンバスアプリケーション] カテゴリが表示されます。
8. ページレイアウトで表示する場所にキャンバスアプリケーション要素をドラッグし、[保存] をクリックし
ます。
• [モバイルカード] セクション以外のセクションにキャンバスアプリケーションを追加した場合、キャン
バスアプリケーションは Salesforce フルサイトのページレイアウトまたは Salesforce1 のレコード詳細ペー
ジに表示されます。
• [モバイルカード] セクションにキャンバスアプリケーションを追加した場合、キャンバスアプリケー
ションは Salesforce1 のモバイルカードにのみ表示されます。
9. 変更内容を確認するには、[取引先] タブをクリックしてから取引先をクリックします。キャンパスアプリ
ケーションがページレイアウトで追加した場所に表示されます。
ページレイアウトでレンチアイコン
を変更できます。
をクリックして、キャンバスアプリケーションのその他のプロパティ
• 幅 (ピクセル単位または %) — キャンバスアプリケーションの幅 (デフォルトは 100%)。キャンバスアプリ
ケーションの幅の変更は、Salesforce フルサイトと Salesforce1 アプリケーションの両方に表示されます。ただ
し、Salesforce1 のキャンバスアプリケーションは 1 列のレイアウトで表示されるため、幅を 100% のままにし
ておくことをお勧めします。
• 高さ (ピクセル単位) — キャンバスアプリケーションの高さ (デフォルトは 200 ピクセル)。この項目の変更
は、Salesforce フルサイトと Salesforce1 の両方に表示されるキャンバスアプリケーションのユーザに表示され
ます。
• スクロールバーを表示 — キャンバスアプリケーションの iFrame にスクロールバーを表示するかどうか。こ
の項目の変更は、Salesforce フルサイトに表示されるキャンバスアプリケーションでは表示されますが、
Salesforce1 に表示されるキャンバスアプリケーションでは表示されません。
• ラベルを表示 — ページレイアウトセクションの表示ラベルを表示するかどうか。この項目の変更は、Salesforce
フルサイトと Salesforce1 の両方に表示されるキャンバスアプリケーションのユーザに表示されます。
関連トピック:
ページレイアウトまたはモバイルカードのキャンバスアプリケーション
ページレイアウトでのキャンバスアプリケーションの表示場所
Salesforce ヘルプ: オブジェクト管理設定の検索
74
第7章
トピック:
•
キャンバスアプリ
ケーションの場所
の設定とアクショ
ンの作成
•
アクションの手動
作成
•
Force.com Canvas
SDK のパブリッ
シャーイベント
•
パブリッシャーの
コンテキストに関
する考慮事項
•
パブリッシャーの
キャンバスアプリ
ケーションアクセ
スに関する考慮事
項
パブリッシャーのキャンバスアプリケーション
Force.com Canvas では、キャンバスアプリケーションをクイックアクションとして公
開できます。パブリッシャーでは、ユーザは組織で特によく使用するアクションに
アクセスできます。パブリッシャーを拡張してキャンバスアプリケーションを追加
し、ユーザがキャンバスアプリケーションのよく使用するカスタムアクションを利
用できるようにします。これらのアクションは、フィードと統合でき、実行された
アクションに固有のフィード投稿を作成できます。
開発者はパブリッシャーのキャンバスアプリケーションを使用して次のことを実行
できます。
• Web アプリケーションからコンテンツを Chatter パブリッシャーに追加する。
• キャンバスアプリケーションを公開するカスタムアクションを作成する。
• キャンバスアプリケーションをパブリッシャーライフサイクルに直接統合する。
キャンバスアプリケーションから Chatter フィードに投稿し、[共有] ボタン機能を
使用してメッセージの投稿先を指定できます。
たとえば、ユーザが作業した時間を記録するために使用するキャンバスアプリケー
ションがあるとします。クイックアクションを作成して、ユーザがそのキャンバス
アプリケーションをパブリッシャーで開き、パブリッシャー内から直接すべての勤
務時間記録をすばやく送信できるようにすることが可能です。
ユーザは引き続き標準の方法でキャンバスアプリケーションのフル機能にアクセス
できますが、パブリッシャーのキャンバスアプリケーションではアプリケーション
の特によく使用する機能にすばやくアクセスできます。ユーザはクイックアクショ
ンを選択して、Chatter フィード項目を作成できます。フィード項目はテキスト投稿
やリンク投稿、またはキャンバス投稿にすることもできます。
関連トピック:
キャンバスアプリケーションの場所の設定とアクションの作成
Chatter フィードのキャンバスアプリケーション
75
パブリッシャーのキャンバスアプリケーション
キャンバスアプリケーションの場所の設定とアクション
の作成
キャンバスアプリケーションの場所の設定とアクションの作成
キャンバスアプリケーションをパブリッシャーまたはアクションバーに追加するには、キャンバスアプリケー
ションの作成時に場所を設定し、アクションを作成する必要があります。
1. Salesforce で、[設定] から [クイック検索] ボックスに「アプリケーション」と入力し、[アプリケーション] を
選択します。
2. [接続アプリケーション] 関連リストで、[新規]をクリックします。キャンバスアプリケーションの基本項目
を入力します。「キャンバスアプリケーションの作成」を参照してください。
3. [キャンバスアプリケーション設定] で [Force.com Canvas] を選択し、[場所] 項目で [パブリッシャー] を選択
します。Salesforce フルサイトのパブリッシャーと Salesforce1 のアクションバーの両方にキャンバスアプリ
ケーションを表示するには、この場所を選択する必要があります。
4. [アクションの自動作成] 項目を選択します。これにより、キャンバスアプリケーションのクイックアクショ
ンが作成されます。
5. 「今何をしていますか?」というテキストが表示されるパブリッシャーヘッダーを非表示にするには、[パ
ブリッシャーヘッダーを非表示] を選択します。これにより、Salesforce フルサイトと Salesforce1 の両方でヘッ
ダーが非表示になります。
6. Salesforce フルサイトと Salesforce1 の両方で、ユーザにパブリッシャーの [共有] ボタンを非表示にするには、
[[パブリッシャー共有] ボタンを非表示] を選択します。このチェックボックスは、[パブリッシャーヘッ
ダーを非表示] が選択されている場合にのみ有効になります。
キャンバスアプリケーションをアクションとして表示するには、アクションをグローバルパブリッシャーレイ
アウトに追加する必要があります。Salesforce ヘルプの「グローバルパブリッシャーレイアウトのカスタマイ
ズ」を参照してください。
関連トピック:
キャンバスアプリケーションの表示場所
アクションの手動作成
パブリッシャーのキャンバスアプリケーション
アクションの手動作成
キャンバスアプリケーションの作成時に [アクションの自動作成] 項目を選択しなかった場合は、アクション
を手動で作成する必要があります。
1. [設定] から、[クイック検索] ボックスに「アクション」と入力し、[グローバルアクション] を選択します。
2. [新規アクション]をクリックします。
3. [アクション種別] 項目で、[カスタムキャンバス] を選択します。
4. [キャンバスアプリケーション] 項目で、アクションとして表示するキャンバスアプリケーションを選択し
ます。
この項目には、パブリッシャーの場所があるキャンバスアプリケーションのみが表示されます。
76
パブリッシャーのキャンバスアプリケーション
Force.com Canvas SDK のパブリッシャーイベント
5. [高さ] 項目に、キャンバスアプリケーションの高さ (ピクセル単位) を入力します。
これは、パブリッシャーにキャンバスアプリケーションを表示するときの初期の高さになります。Force.com
Canvas SDK の resize() メソッドを使用すると、高さを最大 500 ピクセルまで変更できます。
6. [表示ラベル] 項目に値を入力します。
この値は、ユーザインターフェースでクイックアクションのタイトルとして表示されます。
7. [名前] 項目に、空白を含まない一意の値を入力します。
8. 必要に応じて、[アイコン] 項目で [変更アイコン] をクリックしてアイコンをアップロードできます。ここ
で変更する前に、アイコンを静的リソースとしてアップロードする必要があります。
9. [保存] をクリックします
キャンバスアプリケーションをクイックアクションとして表示するには、アクションをグローバルレイアウト
に追加する必要があります。Salesforce ヘルプの「グローバルパブリッシャーレイアウトのカスタマイズ」を参
照してください。
関連トピック:
キャンバスアプリケーションの場所の設定とアクションの作成
パブリッシャーのコンテキストに関する考慮事項
Force.com Canvas SDK のパブリッシャーイベント
パブリッシャーでキャンバスアプリケーションを公開する場合、適切に定義されたイベントを使用して、キャ
ンバスアプリケーションとパブリッシャー間のコミュニケーションを可能にすることができます。
キャンバスアプリケーションでこれらのイベントを登録および公開して、パブリッシャーフレームワークとさ
らに密接に統合することができます。たとえば、Chatterフィード項目を投稿するために、標準のChatter [共有]
ボタンを有効化することができます。また、ユーザがパブリッシャーの [今何をしていますか?] 項目に入力す
る投稿テキストにアクセスし、それをアプリケーションのコンテンツに結合することもできます。
項目
説明
publisher.clearPanelState
キャンバスアプリケーションが無効化されるか非表示になっ
たときに、パブリッシャーによって起動されます。これは、
ユーザがパブリッシャーで異なるアプリケーションを選択す
るか、[共有] ボタンがクリックされたときに発生します。
Visualforce ページも、このイベントをリスンできます。
publisher.failure
無効なデータが送信されるなど、エラー条件が発生したとき
に、パブリッシャーによって起動されます。次に例を示しま
す。
• フィードのテキストが長すぎる
• フィードに公開しようとしているキャンバスアプリケー
ションが存在しない
• キャンバスアプリケーション URL が無効
77
パブリッシャーのキャンバスアプリケーション
項目
Force.com Canvas SDK のパブリッシャーイベント
説明
キャンバスアプリケーションは、このイベントをリスンして、
エラーが発生し投稿が作成されなかったことをユーザに通知
する必要があります。
publisher.getPayload
[共有] ボタンがクリックされたときに、パブリッシャーによっ
て起動されます。ペイロードには、[今何をしていますか?] 項
目に入力されたテキストや、フィード項目を共有するユーザ
などの情報が含まれます。
publisher.setupPanel
Chatter フィードページの初期読み込み時に、パブリッシャー
によって起動されます。
publisher.setPayload
パブリッシャーに送信中のコンテンツをフィード項目で共有
する必要があることをパブリッシャーに示すために、キャン
バスアプリケーションによって起動されます。このイベント
は publisher.getPayload に応答するものであり、作成し
ようとしているフィード項目に関する情報が含まれます。次
の 3 つのフィード項目種別を作成できます。
• TextPost
• LinkPost
• CanvasPost
publisher.setValidForSubmit
キャンバスアプリケーションでペイロードを送信する準備が
整ったことをパブリッシャーに示すために、キャンバスアプ
リケーションによって起動されます。このイベントが起動す
ると、[共有] ボタンが有効になります。
次のコードスニペットは、[共有] ボタンを有効にします。
$$.client.publish(sr.client,
{name : 'publisher.setValidForSubmit',
payload : true});
publisher.showPanel
ユーザがパブリッシャーでキャンバスアプリケーションを選
択すると、パブリッシャーによって起動されます。このイベ
ントは、キャンバスアプリケーションが表示されていること
を示します。Visualforce ページも、このイベントをリスンでき
ます。
publisher.success
[共有] ボタンがクリックされ、データが正常に送信されると、
パブリッシャーによって起動されます。
パブリッシャーイベントの順序
キャンバスアプリケーションから見たパブリッシャーイベントの順序は、次のとおりです。
78
パブリッシャーのキャンバスアプリケーション
パブリッシャーのコンテキストに関する考慮事項
1. キャンバスアプリケーションが publisher.setupPanel をリスンします。
2. キャンバスアプリケーションが publisher.showPanel をリスンします。
3. ユーザが、ボタンのクリックやテキストの入力といったキャンバスアプリケーションの操作を行います。
キャンバスアプリケーションは、必要な検証を行ってから、publisher.setValidForSubmit を起動し
ます。その結果、パブリッシャーで [共有] ボタンが有効になります。
4. キャンバスアプリケーションが publisher.getPayload をリスンします。
5. キャンバスアプリケーションは publisher.setPayload を起動します。
6. キャンバスアプリケーションが publisher.success をリスンします。
7. キャンバスアプリケーションが publisher.failure をリスンします。
8. キャンバスアプリケーションが publisher.clearPanelState をリスンします。
関連トピック:
アクションの手動作成
パブリッシャーのコンテキストに関する考慮事項
パブリッシャーのコンテキストに関する考慮事項
パブリッシャー内でキャンバスアプリケーションを表示する場合、署名付き要求または getContext() コー
ルから受け取るコンテキスト情報にはパブリッシャー固有の情報が含まれます。
• 場所 — キャンバスアプリケーションがパブリッシャーにある場合、Environment.displayLocation 項
目には Publisher という値が含まれます。
• サイズ — Environment.Dimensions オブジェクトには、キャンバスアプリケーションのサイズに関する
情報が含まれます。
– キャンバスアプリケーションの高さは、作成したクイックアクションで指定する高さになります。
– キャンバスアプリケーションの作成時に [アクションの自動作成] を選択すると、キャンバスアプリケー
ションの高さはデフォルトの 200 ピクセルに設定されます。
– キャンバスアプリケーションの幅は、デフォルトの 521 ピクセル (パブリッシャー内のキャンバスアプリ
ケーションの幅の最大値と同じ) に設定されます。
– パブリッシャー内のキャンバスアプリケーションの高さの最大値は 500 ピクセルになります。
– パブリッシャー内のキャンバスアプリケーションの幅の最大値は 521 ピクセルになります。
– 次のコードスニペットは、パブリッシャー内のキャンバスアプリケーションのデフォルトサイズの値を
示します。
"dimensions":
{
"width": "521px",
"height": "200px",
"maxHeight": "500px",
"maxWidth": "521px"
}
79
パブリッシャーのキャンバスアプリケーション
パブリッシャーのキャンバスアプリケーションアクセス
に関する考慮事項
– パブリッシャーの幅は 521 ピクセルに固定されます。たとえば、キャンバスアプリケーションを 400 ピ
クセルにサイズ変更しても、パブリッシャーの幅は 521 ピクセルのままになります。
– Force.com Canvas SDK で resize() メソッドを使用すると、キャンバスアプリケーションの値を maxHeight
および maxWidth まで変更できます。
関連トピック:
アクションの手動作成
Environment
Dimensions
キャンバスアプリケーションのサイズ変更
パブリッシャーのキャンバスアプリケーションアクセスに関する考慮事項
Chatter フィードのキャンバスアプリケーション
パブリッシャーのキャンバスアプリケーションアクセスに関する
考慮事項
パブリッシャーに表示されるキャンバスアプリケーションを変更するときの考慮事項は、次のとおりです。
• 関連するクイックアクションがキャンバスアプリケーションに存在する場合は、キャンバスアプリケーショ
ンまたはパブリッシャーの場所を削除できません。まず、クイックアクションを削除する必要があります。
• プロファイルまたは権限セットを使用してユーザがキャンバスアプリケーションにアクセスできない場合
にパブリッシャーでアプリケーションを選択すると、エラーが表示されます。
• ユーザの権限がないアクションをキャンバスアプリケーションで実行しようとすると、そのアクションが
失敗し、キャンバスアプリケーションはエラーを受信します。たとえば、アプリケーションで Merchandise
レコードを作成しようとしたが、ユーザに Merchandise に対する作成権限がない場合、アプリケーションは
エラーを受信します。その後、キャンバスアプリケーションはエラーをユーザに伝えます。
80
第8章
トピック:
•
•
Chatter フィードの
コンテキストに関
する考慮事項
Chatter フィードの
キャンバスアプリ
ケーションアクセ
スに関する考慮事
項
Chatter フィードのキャンバスアプリケーション
Force.com Canvas では、キャンバスアプリケーションをフィード項目として公開でき
ます。フィードは、ユーザに Salesforce 内で何が行われているかについての情報と、
ユーザがフォローしているレコードとグループに関する情報を提供します。
開発者はフィード内のキャンバスアプリケーションを使用して次のことを実行でき
ます。
• パブリッシャー内のキャンバスアプリケーションから、または Chatter API を使用
して Chatter フィードに投稿する。
• Chatter フィード項目内にキャンバスアプリケーションを表示する。
キャンバスアプリケーションの Chatter フィード項目を作成すると、その中にサムネ
イル画像、リンクタイトル、および説明が含まれます。ユーザがリンクまたは説明
をクリックすると、キャンバスアプリケーションがフィード内で開きます。ユーザ
がリンクを再度クリックすると、コンテンツが折りたたまれ、ユーザはシームレス
にフィードを使用できます。
たとえば、ユーザが作業した時間を記録できるキャンバスアプリケーションがある
とします。キャンバスアプリケーションを表示するフィード項目をプログラムで作
成して、ユーザに現在記録されている時間数を表示することができます。
さらに、フィード項目に現在のユーザに応じたアクションを表示することができま
す。そのキャンバスアプリケーションで、フィード項目をユーザのマネージャに投
稿し、マネージャは記録された時間数を承認または却下できます。コンテンツはキャ
ンバスアプリケーションから提供されるため、開発者がその動作を完全に制御でき
ます。
関連トピック:
パブリッシャーのコンテキストに関する考慮事項
パブリッシャーのキャンバスアプリケーション
Chatter フィードのコンテキストに関する考慮事項
81
Chatter フィードのキャンバスアプリケーション
Chatter フィードのコンテキストに関する考慮事項
Chatter フィードのコンテキストに関する考慮事項
フィード項目内のキャンバスアプリケーションを表示する場合、署名付き要求または getContext() コール
から受け取るコンテキスト情報にはフィード固有の情報が含まれます。
• 場所 — キャンバスアプリケーションがフィードにある場合、Environment.displayLocation 項目には
ChatterFeed という値が含まれます。
• パラメータ — キャンバスアプリケーションを含むフィード項目を作成する場合、JSON 文字列をパラメータ
値として指定できます。キャンバスアプリケーションでコンテキストを受け取る場合、フィード項目内の
パラメータは Environment.Parameters オブジェクトに含まれます。
• サイズ — Environment.Dimensions オブジェクトには、キャンバスアプリケーションのサイズに関する
情報が含まれます。
– キャンバスアプリケーションの高さは、デフォルトの 100 ピクセルに設定されます。
– キャンバスアプリケーションの幅は、デフォルトの 420 ピクセル (フィード内のキャンバスアプリケー
ションの幅の最大値と同じ) に設定されます。
– フィード内のキャンバスアプリケーションの高さの最大値は 400 ピクセルになります。
– フィード内のキャンバスアプリケーションの幅の最大値は 420 ピクセルになります。
– 次のコードスニペットは、フィード内のキャンバスアプリケーションのデフォルトサイズの値を示しま
す。
"dimensions":
{
"width": "420px",
"height": "100px",
"maxHeight": "400px",
"maxWidth": "420px"
}
– フィードの幅は 420 ピクセルに固定されます。たとえば、キャンバスアプリケーションを 200 ピクセル
にサイズ変更しても、フィードの幅は 420 ピクセルのままになります。
– Force.com Canvas SDK で resize() メソッドを使用すると、キャンバスアプリケーションの値を maxHeight
および maxWidth まで変更できます。
関連トピック:
Chatter フィードのキャンバスアプリケーション
Environment
Dimensions
キャンバスアプリケーションのサイズ変更
Chatter フィードのキャンバスアプリケーションアクセスに関する考慮事項
82
Chatter フィードのキャンバスアプリケーション
Chatter フィードのキャンバスアプリケーションアクセ
スに関する考慮事項
Chatter フィードのキャンバスアプリケーションアクセスに関す
る考慮事項
フィードに表示されるキャンバスアプリケーションを変更するときの考慮事項は、次のとおりです。
• フィード項目に含まれるキャンバスアプリケーションを削除した場合、フィード項目はそのまま残ります。
ユーザがそれらのフィード項目のいずれかにアクセスすると、キャンバスアプリケーションが存在しない
というエラーが表示されます。
• フィード項目に含まれるキャンバスアプリケーションへのユーザアクセス権を削除した場合、フィード項
目はそのまま残ります。ユーザがそれらのフィード項目のいずれかにアクセスすると、キャンバスアプリ
ケーションへのアクセス権がないというエラーが表示されます。
• パブリッシャーアクションまたはChatter APIのいずれかを使用してキャンバスアプリケーションのフィード
項目を作成する場合、キャンバスアプリケーションが存在し、そのアプリケーションへの権限がユーザに
あるかどうかが Salesforce で確認されます。
– キャンバスアプリケーションが存在しない場合は、フィード項目を作成できずエラーが返されます。
– キャンバスアプリケーションが存在する場合は、フィード項目を作成するユーザにキャンバスアプリ
ケーションへのアクセス権がなくても、フィード項目は作成されます。ただし、ユーザはフィード項目
を表示できずエラーが返されます。
• ユーザの権限がないアクションをキャンバスアプリケーションで実行しようとすると、そのアクションが
失敗し、キャンバスアプリケーションはエラーを受信します。たとえば、アプリケーションで Merchandise
レコードを作成しようとしたが、ユーザに Merchandise に対する作成権限がない場合、アプリケーションは
エラーを受信します。その後、キャンバスアプリケーションはエラーをユーザに伝えます。
関連トピック:
Chatter フィードのコンテキストに関する考慮事項
CanvasRequest
83
第9章
トピック:
•
キャンバスアプリ
ケーションの場所
の設定とナビゲー
ションメニューへ
の追加
•
Salesforce1 のコンテ
キストに関する考
慮事項
•
Salesforce1 のアクセ
スに関する考慮事
項
•
Salesforce1 カスタム
アイコン
•
キャンバスアプリ
ケーションで使用
する Salesforce1 の
navigation メソッド
Salesforce1 アプリケーションのキャンバス
Force.com Canvas を使用すると、キャンバスアプリケーションを Salesforce1 で公開でき
ます。Salesforce1 アプリケーションは外出中に使用できる Salesforce です。このエン
タープライズクラスのモバイルアプリケーションでは、オフィスで表示するのと同
じ情報にリアルタイムでアクセスできますが、情報は整理されて表示されるため、
外出中でも業務を完了できます。Salesforce フルサイトと同様に、Force.com Canvas ア
プリケーションを含め、ユーザはパブリッシャーや Chatter フィード項目にアクセス
できます。
開発者はSalesforce1でキャンバスアプリケーションを使用して、次の操作を行うこと
ができます。
• Salesforce1 アクションとしてキャンバスアプリケーションを公開する。キャンバ
スアプリケーションがアイコンで表示されます。デフォルトのパズルアイコンを
使用することも、関連アクションのカスタムアイコンをアップロードすることも
できます。
• Salesforce1 内のキャンバスアプリケーションから、または Chatter API を使用して
フィードに投稿する。
• Salesforce1内からフィード項目内にキャンバスアプリケーションを表示する。キャ
ンバスアプリケーションがアイコンで表示されます。デフォルトのパズルアイコ
ンを使用しても、フィード項目内でサムネール URL を指定してカスタムアイコン
を表示することもできます。
• Salesforce1 のナビゲーションメニューにキャンバスアプリケーションをオプショ
ンとして追加する。キャンバスアプリケーションがアイコンで表示されます。デ
フォルトのパズルアイコンを使用することも、キャンバスアプリケーションの接
続アプリケーション設定でカスタムアイコン URL を指定することもできます。
メモ: キャンバスアプリケーションは、Android モバイルデバイスの Salesforce1
ナビゲーションメニューには表示されません。キャンバスアプリケーショ
ンを Android のナビゲーションメニューに表示するには、Salesforce1 モバイル
ブラウザアプリケーションにログインします。
たとえば、モバイルデバイスで注文を処理するために倉庫の従業員が使用するキャ
ンバスアプリケーションがあるとします。デバイスのアイコンからアプリケーショ
ンにアクセスするアクションを作成して、顧客の注文リストを従業員が読み込める
ようにすることができます。注文が処理されると、アプリケーションによりSalesforce
で注文状況が設定され、関連する顧客の取引先にフィード項目が投稿されます。
84
Salesforce1 アプリケーションのキャンバス
ユーザは、デスクトップマシンの Salesforce 内からキャンバスアプリケーションに引
き続きアクセスできます。Salesforce1で提供されるモバイルデバイス用の追加機能に
よって、既存の機能が影響を受けたり制限されたりすることはありません。
関連トピック:
パブリッシャーのキャンバスアプリケーション
Chatter フィードのキャンバスアプリケーション
Salesforce1 のアクセスに関する考慮事項
Salesforce1 のコンテキストに関する考慮事項
Salesforce1 カスタムアイコン
85
Salesforce1 アプリケーションのキャンバス
キャンバスアプリケーションの場所の設定とナビゲー
ションメニューへの追加
キャンバスアプリケーションの場所の設定とナビゲーションメ
ニューへの追加
キャンバスアプリケーションを追加して Salesforce1 ナビゲーションメニューに表示するには、場所を設定して
モバイルナビゲーションに追加する必要があります。
1. Salesforce で、[設定] から [クイック検索] ボックスに「アプリケーション」と入力し、[アプリケーション] を
選択します。
2. [接続アプリケーション] 関連リストで、ナビゲーションペインで使用できるようにするアプリケーション
をクリックして [編集] をクリックします。
3. [キャンバスアプリケーション設定] セクションの [場所] 項目で、[モバイルナビゲーション] を選択しま
す。
4. [保存] をクリックします
5. キャンバスアプリケーションをナビゲーションメニューに表示するには、モバイルナビゲーションに追加
する必要があります。[設定] から、[クイック検索] ボックスに「ナビゲーション」と入力し、[Salesforce1ナ
ビゲーション] を選択します。
6. 使用可能なメニュー項目から、アプリケーションを選択して [追加] をクリックします。
7. [保存] をクリックします。
Salesforce1 のコンテキストに関する考慮事項
Salesforce1 内でキャンバスアプリケーションを表示するときの考慮事項は、次のとおりです。
フィードまたはパブリッシャー内でキャンバスアプリケーションを表示する場合、(署名付き要求または
getContext コールから) 受け取るキャンバスコンテキストにはSalesforce1パブリッシャー固有の情報が含まれ
ます。
• 環境セクションの displayLocation 値から、フィードまたはパブリッシャーのどちらを使用しているか
を確認できます。パブリッシャーの場合は displayLocation が [パブリッシャー] に設定されます。フィー
ドの場合は displayLocation が ChatterFeed に設定されます。
• キャンバスフィード項目の作成時に、JSON 文字列をパラメータ値として指定できます。コンテキストの送
信時に、フィード項目にあるパラメータ項目の値が、コンテキストの環境セクションのパラメータで送信
されます。
• 他のキャンバスアプリケーションの場合と同様に、コンテキストにはアプリケーションのサイズに関する
情報が含まれます。Salesforceはモバイル用に設計されているため、モバイル用に提供されるサイズは Salesforce
フルサイト用に提供されるサイズとは異なります。
• 1 本指によるタッチスクロール操作を作成するには、次の操作を実行します。
– 最も外側の div 要素に次のプロパティが含まれていることを確認します。
• min-height: 250px;
• overflow: scroll;
• width: 100%;
86
Salesforce1 アプリケーションのキャンバス
Salesforce1 のアクセスに関する考慮事項
• -webkit-overflow-scrolling: touch;
• -webkit-transform: translated(0%,0px,0px);
– height 属性を、署名付き要求で配信される clientHeight 値に設定します。次に例を示します。
// Where sr is a parsed signed request object.
var h = parseInt(sr.context.environment.dimensions.clientHeight, 10);
Sfdc.canvas.byId('divElementId').style.height = h;
– 特に横モードの電話では clientHeight 値が非常に小さくなることがあるため、コンテンツを表示で
きない可能性があります。必要な高さ (ピクセル単位) に設定した min-height を使用して、最適なユー
ザ操作性を確保してください。
– Salesforce1 ナビゲーションメニューのデフォルトのパズルアイコンのサイズは 60 x 60 ピクセルです。
関連トピック:
Salesforce1 アプリケーションのキャンバス
Salesforce1 のアクセスに関する考慮事項
キャンバスアプリケーションのサイズ変更
Salesforce1 カスタムアイコン
Salesforce1 のアクセスに関する考慮事項
Salesforce1 に表示されるキャンバスアプリケーションを変更するときの考慮事項は、次のとおりです。
Salesforce1のレイアウトは、使い慣れているSalesforceフルサイトのレイアウトとは必然的に異なります。Salesforce1
で使用するキャンバスアプリケーションの作成時には、次の点に注意してください。
• キャンバスアプリケーションは Salesforce 内でサードパーティアプリケーションを表示するよう設計されて
いるため、デバイスからキャンバスアプリケーション URL にアクセスできる必要があります。ファイア
ウォールの内側からしかアプリケーションにアクセスできない場合は、モバイルデバイスもファイアウォー
ルの内側に存在する必要があります。ユーザがキャンバス URL にアクセスできないと、エラー (おそらく
404 または 500 エラー) が表示されます。
• Salesforce1のアクションとしてキャンバスアプリケーションにアクセスする場合、「今何をしていますか?」
ヘッダーをキャンバスアプリケーションで使用すると、ヘッダーがページ上部で固定され、キャンバスア
プリケーションのスクロール領域はヘッダーテキストボックスの下に配置されます。
• フィードでは、キャンバスアプリケーションのリンクと説明が、Salesforce フルサイトより少ない文字数で
表示されることがあります。
• 使用するデバイスによっては、デバイスを回転したときにフィード画面が変化することがあります。キャ
ンバスアプリケーションで回転をサポートする必要があります (可能な場合)。方向イベントを使用して、
デバイスの方向の変更を処理します。
• Salesforce1 と Salesforce フルサイトでは、使用される高さが異なります。パブリッシャーでアクションを正し
く表示するには、署名付き要求で Dimensions オブジェクトを使用します。
• アクションメニューでは、アクションの長い表示ラベルが切り捨てられることがあります。
87
Salesforce1 アプリケーションのキャンバス
Salesforce1 カスタムアイコン
• フィードレイアウトは、Salesforce フルサイトのものとは異なります。フィードでアプリケーションが開く
のではなく、画面全体にキャンバスアプリケーションを表示するページが開きます。Salesforce1 に戻るに
は、 をタップします。
• Salesforce1 でアクションバーまたはフィードを表示すると、キャンバスアプリケーションのデフォルトの
Force.com Canvas パズルアイコンが表示されます。指定した画像を使用して、このデフォルトのアクション
アイコンを上書きできます。
• キャンバスアプリケーションがSalesforce1ナビゲーションメニューにオプションとして表示される場合は、
デフォルトの Force.com Canvas パズルアイコンが使用されます。キャンバスアプリケーションの接続アプリ
ケーション設定でアイコンをカスタマイズできます。
• ユーザがオフラインで Salesforce1 にアクセスしている場合、キャンバスアプリケーションは使用できませ
ん。
関連トピック:
Salesforce1 アプリケーションのキャンバス
Salesforce1 のコンテキストに関する考慮事項
Salesforce1 カスタムアイコン
Dimensions
キャンバスアプリケーションの方向の変更の処理
Salesforce1 カスタムアイコン
カスタムアイコンは、Salesforce1 のアプリケーションを区別するのに役立ちます。アプリケーションのアイコ
ンをカスタマイズしない場合、デフォルトのパズルピースアイコンを取得します。
Salesforce1ナビゲーションメニューで使用されるアイコンをカスタマイズできます。キャンバスアプリケーショ
ンの接続アプリケーション設定の [基本情報] セクションにある [アイコン URL] のエントリでこのアイコンを設
定します。[設定] から、[クイック検索] ボックスに「アプリケーション」と入力し、[アプリケーション] を選
択して接続アプリケーションの [編集] をクリックします。アイコン URL は、アイコン画像ファイルを指し示す
セキュアな HTTPS URL を使用する必要があります。画像ファイルは、GIF、JPG、または PNG ファイル形式である
必要があります。Salesforce1ナビゲーションメニューでは、アイコンは 60×60 ピクセル以下のサイズにする必要
があります。
Salesforce1ナビゲーションメニューで使用されるカスタムアイコンは、Chatter タブおよびキャンバスアプリケー
ションのプレビューアでも使用されます。キャンバスアプリケーションがナビゲーションメニューに表示され
る場合、Chatter タブおよびキャンバスアプリケーションのプレビューアでのアイコンのサイズを、Salesforce で
自動的に小さく変更するように、60 × 60 ピクセルサイズのアイコンを使用することをお勧めします。
キャンバスアプリケーションの Salesforce1 アクションバーおよびアクションメニューで使用されるアイコンを
カスタマイズすることもできます。アクションバーでは、接続アプリケーションに関連付けられたカスタムア
イコンではなく、キャンバスアプリケーションにアクセスするアクションのカスタムアイコンセットを使用し
ます。アクションアイコンを設定するには、カスタムアイコンの静的リソースファイルをアップロードして、
この静的リソースをグローバルアクションのアイコンとして使用します。静的リソースアイコンファイルは、
サイズが 120 ピクセル (高さ) × 120 ピクセル (幅) の PNG 形式である必要があります。カスタムアクションアイコ
88
Salesforce1 アプリケーションのキャンバス
キャンバスアプリケーションで使用する Salesforce1 の
navigation メソッド
ンのガイドラインについての詳細は、『Salesforce1 アプリケーション開発者ガイド』の「カスタムアイコンのガ
イドラインとベストプラクティス」を参照してください。
関連トピック:
Salesforce1 アプリケーションのキャンバス
Salesforce1 のコンテキストに関する考慮事項
キャンバスアプリケーションで使用する Salesforce1 の navigation
メソッド
Force.com Canvas フレームワークには、Visualforce を使用せずに、キャンバスアプリケーションと Salesforce1 間の
ナビゲーションを円滑に統合するために使用できるメソッドが含まれます。
以前は、キャンバスアプリケーションが含まれる iframe のナビゲーションの制限を回避するには、Visualforce
ページを使用するしかありませんでした。これらの Force.com Canvas のメソッドには、Salesforce1 でのキャンバ
スアプリケーションへの移動またはキャンバスアプリケーションからの移動を制御するシンプルな代替手段が
用意されています。
たとえば、キャンバスアプリケーションのコードで Salesforce1 の「レコード作成」ロジックをコールして、[ア
カウントを作成]ボタンが存在するページに移動できます。このボタンをクリックすると、Salesforce1の navigation
メソッドがトリガされて、キャンバスアプリケーションの外部にあるレコード作成ページに移動します。
Force.com Canvas フレームワーク内のこれらのメソッドは、JavaScript ライブラリにあるイベントです。いずれか
の navigation メソッドをキャンバスコードからコールすると、Salesforce1 にイベントが送信されます。Salesforce1
は、このペイロードを読み取って指定の移行先にユーザを移動します。
キャンバスアプリケーションからメソッドをコールするのは、Visualforce ページから関数をコールするのとは
若干異なります。これは、メソッドが Force.com Canvas のクロスドメイン API を介して Salesforce コンテナにプロ
キシされるからです。
名前とペイロードを使用して、navigation メソッドをイベント変数として参照します。次に例を示します。
var event = {name:"s1.createRecord", payload: {entityName: "Account", recordTypeId:
"00h300000001234"}};
次の表に、Salesforce1 の navigation メソッドの名前、ペイロード、目的を示します。
関数
説明
back([refresh])
sforce.one 履歴に保存されている、以前の状態に移動します。ブラウザ
の [戻る] ボタンをクリックするのと同じです。
refresh は省略可能です。デフォルトでは、ページは更新されません。
可能な場合は true を渡してページを更新します。
89
Salesforce1 アプリケーションのキャンバス
関数
キャンバスアプリケーションで使用する Salesforce1 の
navigation メソッド
説明
navigateToSObject(recordId recordId で指定した sObject レコードに移動します。このレコードの「ホー
[, view])
ム」には複数のビューがあり、このビューは Salesforce1 内で、ユーザがス
ワイプして移動するスライドとして表示されます。
view は省略可能であり、デフォルトは detail です。view には最初に
表示する、レコードのホーム内のスライドを指定します。使用できる値は
次のとおりです。
• detail: レコード詳細スライド
• chatter: Chatter スライド
• related: 関連スライドのビュー
navigateToURL(url[,
isredirect])
指定した URL に移動します。
相対 URL と絶対 URL がサポートされています。相対 URL は one.app ドメイン
に対して相対的で、ナビゲーション履歴を保持します。外部 URL、つまり、
Salesforce1 アプリケーションの外部の URL は別のブラウザウィンドウで開き
ます。
アプリケーション内のさまざまな画面に移動するには相対 URL を使用しま
す。ユーザに別のサイトまたはアプリケーションへのアクセスを許可する
には外部 URL を使用します。ユーザは移動先のサイトまたはアプリケー
ションで、元のアプリケーションに保持する必要のないアクションを実行
できます。ユーザが元のアプリケーションに戻るには、別のアプリケー
ションを終了したときに、外部 URL によって開かれた別のウィンドウを閉
じる必要があります。この新しいウィンドウは、元のアプリケーションと
は別の履歴を持ち、ウィンドウを閉じるとこの履歴は破棄されます。つま
り、ユーザは [戻る] ボタンをクリックして元のアプリケーションに戻るこ
とはできません。ユーザは新しいウィンドウを閉じる必要があります。
外部アプリケーションを起動し、ユーザが適切な操作を行えるようにする
ため、mailto:、tel:、geo: などの URL スキームがサポートされていま
す。ただし、サポートはモバイルプラットフォームとデバイスによって異
なります。mailto: と tel: は信頼できますが、他の URL については、使
用が想定されるさまざまなデバイスでテストすることをお勧めします。
メモ: navigateToURL では、標準の URL スキームのみがサポートさ
れます。カスタムスキームにアクセスするには、代わりに
window.location を使用します。
isredirect は省略可能であり、デフォルトは false です。ナビゲーショ
ン履歴の現在の URL を新しい URL に置き換えるようにするには、true に
設定します。
navigateToFeed(subjectId, subjectId で絞り込んだ、指定した type のフィードに移動します。一
type)
部のフィード type では、subjectId は必須ですが無視されます。これ
90
Salesforce1 アプリケーションのキャンバス
関数
キャンバスアプリケーションで使用する Salesforce1 の
navigation メソッド
説明
らのフィード type では、現在のユーザの ID を subjectId として渡しま
す。
type はフィードの種別です。使用できる値は次のとおりです。
• BOOKMARKS: コンテキストユーザがブックマークとして保存したすべて
のフィード項目が含まれます。現在のユーザの ID を subjectId とし
て渡します。
• COMPANY: 種別が TrackedChange のフィード項目を除くすべてのフィー
ド項目が含まれます。ユーザがフィード項目を表示するには、親への
共有アクセス権が必要です。現在のユーザの ID を subjectId として
渡します。
• FILES: コンテキストユーザがフォローしている人またはグループによっ
て投稿されたファイルを含むすべてのフィード項目が含まれます。現
在のユーザの ID を subjectId として渡します。
• GROUPS: コンテキストユーザが所有するか、メンバーであるすべての
グループのすべてのフィード項目が含まれます。現在のユーザの ID を
subjectId として渡します。
• NEWS: コンテキストユーザがフォローする人、ユーザがメンバーとなっ
ているグループ、およびユーザがフォローしているファイルとレコー
ドのすべての更新が含まれます。また、親がコンテキストユーザであ
るレコード、およびコンテキストユーザをメンションするかコンテキ
ストユーザがメンバーとなっているグループをメンションするすべて
のフィード項目とコメントのすべての更新も含まれます。現在のユー
ザの ID を subjectId として渡します。
• PEOPLE: コンテキストユーザがフォローしているすべての人によって
投稿されたすべてのフィード項目が含まれます。現在のユーザの ID を
subjectId として渡します。
• RECORD: 親が指定されたレコードであるすべてのフィード項目が含ま
れます。レコードは、グループ、ユーザ、オブジェクト、ファイル、
その他の標準またはカスタムオブジェクトの場合があります。レコー
ドがグループの場合、フィードにはそのグループにメンションしてい
るフィード項目も含まれます。レコードがユーザの場合、フィードに
はそのユーザに対するフィード項目のみが含まれます。別のユーザの
レコードフィードは取得できません。レコードの ID を subjectId と
して渡します。
• TO: コンテキストユーザのメンションを含むすべてのフィード項目、コ
ンテキストユーザがコメントしたフィード項目、コンテキストユーザ
が作成し、コメントされたフィード項目が含まれます。現在のユーザ
の ID を subjectId として渡します。
• TOPICS: 指定したトピックを含むすべてのフィード項目が含まれます。
トピックの ID を subjectId として渡します。この値は、Salesforce1 モ
91
Salesforce1 アプリケーションのキャンバス
関数
キャンバスアプリケーションで使用する Salesforce1 の
navigation メソッド
説明
バイルブラウザアプリケーションでのみサポートされます。トピック
は、Salesforce1 ダウンロード可能アプリケーションでは使用できませ
ん。
navigateToFeedItemDetail( 特定のフィード項目 feedItemId と関連付けられたコメントに移動しま
feedItemId)
す。
navigateToRelatedList(
relatedListId,
parentRecordId)
parentRecordId の関連リストに移動します。たとえば、Warehouse オブ
ジェクトの関連リストを表示する場合、parentRecordId は
Warehouse__c.Id です。
relatedListId は、表示する関連リストの API 名または ID です。
navigateToList(listViewId listViewId (表示されるリストビューの ID) で指定されたリストビューに
, listViewName, scope)
移動します。
listViewName にリストビューのタイトルを設定します。リストビューに
保存されている実際の名前と一致する必要はありません。保存されている
名前を使用するには、listViewName を null に設定します。
scope に、ビュー内の sObject の名前 (「Account」や「MyObject__c」など)
を設定します。
createRecord(entityName[, 指定した entityName (「Account」や「MyObject__c」など) の新しいレコー
recordTypeId])
ドを作成するページを開きます。
recordTypeId は省略可能ですが、使用する場合は、作成されるオブジェ
クトのレコードタイプを指定します。
editRecord(recordId)
recordId で指定したレコードを編集するページを開きます。
Visualforce で使用する navigation メソッドについての詳細は、『Salesforce1 開発者ガイド』を参照してください。
関連トピック:
Visualforce の考慮事項
92
第 10 章
トピック:
•
CanvasLifecycleHandler
の作成
•
CanvasLifecycleHandler
とアプリケーショ
ンの関連付け
•
CanvasRequest コン
テキストデータの
絞り込み
•
キャンバスアプリ
ケーションの動作
の制御
•
ユーザエラーメッ
セージの表示
•
CanvasLifecycleHandler
実装のテスト
•
CanvasLifecycleHandler
クラスの配布
アプリケーションライフサイクルのカスタマイ
ズ
カスタム Apex クラスを提供することで、キャンバスアプリケーションに送信される
コンテキスト情報を制御し、アプリケーションが表示されるときのカスタム動作を
追加できます。
Salesforce では Canvas 名前空間にいくつかの Apex インターフェースとクラスが用意さ
れているため、キャンバスアプリケーションのライフサイクルで追加制御を行うこ
とができます。Canvas 名前空間と CanvasLifecycleHandler インターフェースを使用して、
次のことを実行できます。
• アプリケーションに送信される CanvasRequest コンテキストデータのセクションを
制御する。たとえば、Salesforce で CanvasRequest データの Organization 情報が送信さ
れないようにすることができます。コンテキストデータのセクションを除外する
ことで、要求で送信されるデータ量が削減され、アプリケーションの組織データ
を処理する必要がなくなるため、パフォーマンスが向上します。
• アプリケーションが表示されるときにアプリケーションのコンテキストデータを
取得し、データに応じてアプリケーションの動作を変更する。アプリケーション
のバージョンを取得し、バージョンに応じてアプリケーションの実行方法を変更
できます。
• アプリケーションが表示されるときにRecordデータで返されるキャンバスアプリ
ケーション URL、カスタムパラメータ、またはオブジェクト項目のリストなど、
一部のコンテキストデータを変更する。
• 問題が発生した場合にSalesforce UI でユーザに適切な形式のエラーメッセージを表
示する。
Salesforce は Canvas 名前空間で Test クラスも提供します。このクラスは、テストコン
テキストデータを作成し、アプリケーションを実行せずにライフサイクルハンドラ
の動作を検証するために使用できます。
Apex Canvas 名前空間のリファレンスドキュメントは、『Force.com Apex コード開発者ガ
イド』を参照してください。
93
アプリケーションライフサイクルのカスタマイズ
CanvasLifecycleHandler の作成
CanvasLifecycleHandler の作成
Salesforce で使用できる Canvas.CanvasLifecycleHandler Apex インターフェースを実装して、アプリケーションライフ
サイクルを制御できます。
Apex Canvas.CanvasLifecycleHandler インターフェースには、アプリケーションライフサイクルの動作をカスタマイ
ズするためのメソッドおよびコールバックがあります。Salesforceは、実行時に実装を使用するため、カスタム
コードを実行できます。Canvas.CanvasLifecycleHandler インターフェースの実装を作成する手順は、次のとおりで
す。
1. [設定] から、[クイック検索] ボックスに「Apex クラス」と入力し、[Apex クラス] を選択します。
2. [新規] をクリックして Apex クラスを作成します。
3. Canvas.CanvasLifecycleHandler インターフェースを実装するApexクラスを作成します。excludeContextTypes()
および onRender() メソッドを実装する必要があります。次に、テンプレートの例を示します。
public class MyCanvasLifecycleHandler
implements Canvas.CanvasLifecycleHandler {
public Set<Canvas.ContextTypeEnum> excludeContextTypes(){
Set<Canvas.ContextTypeEnum> excluded = new Set<Canvas.ContextTypeEnum>();
// Code goes here to add items to excluded list
// that should be excluded from Context data
return excluded;
}
public void onRender(Canvas.RenderContext renderContext) {
// Code goes here to customize behavior when the app is rendered
}
}
4. コードの追加が完了したら、Apex クラスを保存します。
5. 必要に応じて、Canvas.Test クラスを使用して実装をテストします。
6. アプリケーションで使用する実装を Salesforce に通知するために、Apex クラスをアプリケーションに関連付
けます。
関連トピック:
CanvasLifecycleHandler 実装のテスト
CanvasLifecycleHandler とアプリケーションの関連付け
CanvasLifecycleHandler とアプリケーションの関連付け
CanvasLifecycleHandler の Apex 実装クラスを作成したら、クラス名をキャンバスアプリケーション設定に追加して
キャンバスアプリケーションに関連付ける必要があります。
94
アプリケーションライフサイクルのカスタマイズ
CanvasRequest コンテキストデータの絞り込み
Canvas.CanvasLifecycleHandler 実装をキャンバスアプリケーションに関連付ける手順は、次のとおりです。
1. [設定] から、[クイック検索] ボックスに「アプリケーション」と入力し、[アプリケーション]を選択します。
2. [接続アプリケーション] で、変更する必要のあるキャンバスアプリケーションを選択し、[編集]をクリック
します。
3. [キャンバスアプリケーション設定] の [接続アプリケーションの編集] ページで、作成した Apex
CanvasLifecycleHandler クラス名を [ライフサイクルクラス] 項目に追加します。
CanvasRequest コンテキストデータの絞り込み
キャンバスアプリケーションに送信される CanvasRequest コンテキストデータを部分的に除外するには、
Canvas.CanvasLifecycleHandler.excludeContextTypes() の実装を指定する必要があります。
Salesforce は、excludeContextTypes() の実装をコールして、アプリケーションに送信されるコンテキスト
情報を判別します。実装は、除外するコンテキストデータのセットを返すか、すべてのコンテキストデータを
受信する必要がある場合は null (または空のセット) を返します。このセットは Canvas.ContextTypeEnum Apex enum
型の値で構成されます。
この enum 値は次のように使用されます。
• ORGANIZATION: キャンバスアプリケーションが実行されている組織に関するコンテキスト情報を除外します。
• RECORD_DETAIL: キャンバスアプリケーションが表示されるオブジェクトレコードに関するコンテキスト情報
を除外します。
• USER: 現在のユーザに関するコンテキスト情報を除外します。
次の例では、excludeContextTypes() 実装で組織およびユーザコンテキストデータを除外します。
public Set<Canvas.ContextTypeEnum> excludeContextTypes(){
Set<Canvas.ContextTypeEnum> excluded = new Set<Canvas.ContextTypeEnum>();
// Exclude the Organization and User context data
excluded.add(Canvas.ContextTypeEnum.ORGANIZATION);
excluded.add(Canvas.ContextTypeEnum.USER);
return excluded;
}
キャンバスアプリケーションが CanvasRequest コンテキストデータを受信するとき、JSON データに「organization」
および「user」セクションは含まれません。
Apex Canvas.ContextTypeEnum の詳細は、『Force.com Apex コード開発者ガイド』を参照してください。
キャンバスアプリケーションの動作の制御
署名付き要求のデフォルトの動作を変更するには、Canvas.CanvasLifecycleHandler.onRender() を実
装する Apex クラスを指定し、このクラスをキャンバスアプリケーションに関連付ける必要があります。
onRender() 実装では、カスタムコードを使用してアプリケーションの動作を制御できます。
Salesforce は、アプリケーションが表示される直前に onRender() の実装をコールします。現在のコンテキス
ト情報は、Canvas.RenderContext パラメータでこのメソッドに渡されます。
95
アプリケーションライフサイクルのカスタマイズ
キャンバスアプリケーションの動作の制御
onRender() 実装では、次のコンテキスト情報を取得できます。
• アプリケーションコンテキストデータ (キャンバスアプリケーション名、URL、バージョン、名前空間など)。
• 環境コンテキストデータ (表示場所、下位の表示場所、オブジェクト項目名、カスタムパラメータ)。
次のコンテキスト情報を設定できます。
• キャンバスアプリケーション URL のアプリケーションドメイン以降の部分。
• キャンバスアプリケーションがオブジェクトページに表示される場合にSalesforceがRecordコンテキストデー
タを返すオブジェクト項目のリスト。<apex:canvasApp> コンポーネントを使用してキャンバスアプリ
ケーションが Visualforce ページに表示され、その Visualforce ページがオブジェクトに関連付けられている場
合などにキャンバスアプリケーションがオブジェクトページに表示されます。
• キャンバスアプリケーションに渡されるカスタムパラメータ。
Canvas.CanvasRenderException を発生させることで、Salesforce のユーザに対してエラーメッセージを表示すること
もできます。
次の処理を行う onRender() 実装の例を以下に示します。
• アプリケーションのバージョン情報をチェックし、サポートされていないバージョンの場合は
CanvasRenderException を発生させます。
• 「/alternatePath」を元の URL のドメイン部分に追加して、現在のキャンバスアプリケーション URL を上書き
します。
• キャンバスアプリケーションが取引先ページに表示されることを予測して、Name、BillingAddress、および
YearStarted を含めるようにオブジェクト項目のリストを設定します。
• 新しい「newCustomParam」パラメータを追加して、カスタムパラメータのセットを上書きします。現在の
パラメータのセットは、最初にローカルで取得されてキャッシュされます。setParametersAsJSON() を
コールするときに現在のカスタムパラメータのセットが失われないように、新しいパラメータがキャッシュ
リストに追加されます。
public void onRender(Canvas.RenderContext renderContext) {
// Get the Application and Environment context from the RenderContext
Canvas.ApplicationContext app = renderContext.getApplicationContext();
Canvas.EnvironmentContext env = renderContext.getEnvironmentContext();
// Check the application version
Double currentVersion = Double.valueOf(app.getVersion());
if (currentVersion <= 5){
// Versions lower than 5 are no longer supported in this example
throw new Canvas.CanvasRenderException('Error: Versions earlier than 5 are no
longer supported.');
}
// Override app URL, replacing portion after domain with '/alternatePath'
app.setCanvasUrlPath('/alternatePath');
// Add Name, BillingAddress and YearStarted to fields
// (assumes we'll run from a component on the Account detail page)
Set<String> fields = new Set<String>{'Name','BillingAddress','YearStarted'};
env.addEntityFields(fields);
96
アプリケーションライフサイクルのカスタマイズ
ユーザエラーメッセージの表示
// Add a new custom param to the set of custom params
// First, get the current custom params
Map<String, Object> previousParams =
(Map<String, Object>) JSON.deserializeUntyped(env.getParametersAsJSON());
// Add a 'newCustomParam' to our Map
previousParams.put('newCustomParam','newValue');
// Now, replace the parameters
env.setParametersAsJSON(JSON.serialize(previousParams));
}
ユーザエラーメッセージの表示
Canvas.CanvasRenderException を使用してユーザにエラーメッセージを表示できます。
onRender() 実装から CanvasRenderException を発生させた場合、Salesforce UI にその例外のエラーメッセージが
ユーザに表示されます。この例外は、onRender() メソッド内でのみ管理されます。
CanvasRenderException は、すべての標準Apex例外クラスメソッドおよびコンストラクタをサポートしています。
Apex 例外についての詳細は、『Force.com Apex コード開発者ガイド』の「Exception クラスおよび組み込み例外」
を参照してください。
次の例では、onRender() 実装で Canvas.CanvasRenderException を発生させます。Salesforce はこの例外を使用し、
ユーザエラーメッセージとして「Error: Could not set URL (エラー: URL を設定できません)」と表示します。
public void onRender(Canvas.RenderContext renderContext) {
// Code omitted that determines if the error condition occured
...
throw new Canvas.CanvasRenderException('Error: Could not set URL.');
}
キャンバスアプリケーションが Salesforce Chatter タブから実行されている場合、次のような類似のエラーメッ
セージが表示されます。
CanvasLifecycleHandler 実装のテスト
Canvas.Test クラスを使用して、キャンバスアプリケーションを実行せずに
Canvas.CanvasLifecycleHandler.onRender() 実装をテストできます。
97
アプリケーションライフサイクルのカスタマイズ
CanvasLifecycleHandler 実装のテスト
Canvas.Test を使用して、疑似アプリケーションおよび環境コンテキストデータで Canvas.RenderContext を作成しま
す。疑似 RenderContext および CanvasLifecycleHandler 実装を使用して Canvas.Test.testCanvasLifecycle()
をコールし、CanvasLifecycleHandler が正しく呼び出されることを確認します。
Canvas.Test.mockRenderContext() を使用して疑似 RenderContext を作成します。初期の疑似アプリケー
ションおよび環境コンテキストデータを指定するか、Canvas.Test でデフォルトの疑似データのセットを使用す
ることができます。初期の疑似アプリケーションおよび環境コンテキストデータは 2 つのキー - 値ペアの対応
付けで指定します。定義済みの Canvas.Test キー名定数をキーとして使用します。次の例では、アプリケーショ
ンコンテキストデータのアプリケーション名と、環境コンテキストデータのサブロケーションを設定します。
Map<String,String> appValues = new Map<String,String>();
appValues.put(Canvas.Test.KEY_NAME,'AppName');
Map<String,String> envValues = new Map<String,String>();
envValues.put(Canvas.Test.KEY_SUB_LOCATION,'mobileDevice');
Canvas.Test で提供されるコンテキストキーの完全なリストは、『Force.com Apex コード開発者ガイド』の「テス
ト定数」を参照してください。
疑似 RenderContext ができたら、RenderContext と CanvasLifecycleHandler を使用して
Canvas.Test.testCanvasLifecycleHandler() をコールできます。このコールは、ハンドラの onRender()
メソッドを呼び出し、疑似 RenderContext をコンテキストデータとして渡します。
次の例では、テストクラスで Canvas.Test を使用しています。テストクラスには 3 つのメソッドがあります。
• testDefaultMockValues() は、デフォルトの Canvas.Test 疑似コンテキストデータを使用して
MyCanvasLifecycleHandler を呼び出します。
• testOverriddenAppValues() は、カスタム疑似 RenderContext と疑似アプリケーション URL およびバー
ジョンアプリケーションコンテキストデータを使用して MyCanvasLifecycleHandler を呼び出します。
• testOverriddenEnvironmentValues() は、カスタム疑似 RenderContext と疑似表示場所、場所 URL、およ
びカスタムパラメータ環境コンテキストデータを使用して MyCanvasLifecycleHandler を呼び出します。カスタ
ムパラメータは、疑似 RenderContext が作成された後、Canvas.EnvironmentContext インターフェースを使用して
設定されます。
-@isTest
global class MyCanvasLifecycleHandlerTest {
static testMethod void testDefaultMockValues(){
// Test handler using the default mock RenderContext Canvas.Test creates
MyCanvasLifecycleHandler handler = new MyCanvasLifecycleHandler();
Canvas.Test.testCanvasLifecycle(handler,null);
}
static testMethod void testOverriddenAppValues(){
// Test handler with some mock application context values
Map<String,String> appValues = new Map<String,String>();
appValues.put(Canvas.Test.KEY_CANVAS_URL,'https://myserver.com:6000/myAppPath');
appValues.put(Canvas.Test.KEY_VERSION,'3.0');
Canvas.RenderContext mock = Canvas.Test.mockRenderContext(appValues,null);
MyCanvasLifecycleHandler handler = new MyCanvasLifecycleHandler();
Canvas.Test.testCanvasLifecycle(handler,mock);
}
98
アプリケーションライフサイクルのカスタマイズ
CanvasLifecycleHandler クラスの配布
static testMethod void testOverriddenEnvironmentValues(){
// Test handler with some mock environment context values
Map<String,String> envValues = new Map<String,String>();
envValues.put(Canvas.Test.KEY_DISPLAY_LOCATION,'Chatter');
envValues.put(Canvas.Test.KEY_LOCATION_URL,
'https://myinstance.salesforce.com/_ui/core/chatter/ui/ChatterPage');
MyCanvasLifecycleHandler handler = new MyCanvasLifecycleHandler();
Canvas.RenderContext mock = Canvas.Test.mockRenderContext(null,envValues);
// Directly update the mock RenderContext and set the custom parameters
mock.getEnvironmentContext().setParametersAsJSON(
'{\"one\":1,\"two\":2,\"bool\":true,\"stringVal\":\"some string\"}');
Canvas.Test.testCanvasLifecycle(handler,mock);
}
}
CanvasLifecycleHandler クラスの配布
キャンバスアプリケーションをパッケージ化して配布する場合、パッケージに必ず CanvasLifecycleHandler クラス
を含めてください。
キャンバスアプリケーションパッケージに CanvasLifecycleHandler 実装を含めるには、次の手順を実行します。
1. Salesforce で、[設定] から [クイック検索] ボックスに「パッケージ」と入力し、[パッケージ] を選択します。
2. キャンバスアプリケーションのパッケージを選択し、パッケージ名をクリックしてパッケージの詳細ペー
ジに移動します。
3. [コンポーネント] の下にあるパッケージの詳細ページで、[追加] をクリックします。
4. [パッケージに追加] ページの [コンポーネントの種類] 項目で [Apex クラス] を選択します。使用可能な Apex
クラスのリストが表示されます。
5. CanvasLifecycleHandler 実装の Apex クラスの横にあるチェックボックスをオンにし、[パッケージに追加] をク
リックします。
99
リファレンス
第 11 章
オブジェクト
Force.com Canvas には、キャンバスアプリケーションと Salesforce 間のコミュニケーションを可能にするオブジェ
クトを含む SDK が備えられています。
関連トピック:
CanvasRequest
SignedRequest
CanvasRequest
キャンバスアプリケーションで署名付き要求を認証に使用すると、Salesforce から最初の POST メッセージに
CanvasRequest オブジェクトが返されます。このオブジェクトには、要求に関連付けられた項目と、Context およ
びClientオブジェクトが含まれます。CanvasRequestオブジェクトは JSON 形式で返され、次の項目が含まれます。
項目
説明
algorithm
要求の署名に使用されるアルゴリズム。
issuedAt
oauthToken が発行されたときのタイムスタンプ。
userId
コンテキストユーザの ID。
次のコードスニペットに、CanvasRequest オブジェクトの例を示します。
{
"context":
{
"application":
{
"applicationId":"06Px000000003ed",
"authType":"SIGNED_REQUEST",
"canvasUrl":"http://instance.salesforce.com:8080
/canvas_app_path/canvas_app.jsp",
"developerName":"my_java_app",
"isInstalledPersonalApp": false,
"name":"My Java App",
"namespace":"org_namespace",
"options":[],
"referenceId":"09HD00000000AUM",
"samlInitiationMethod":"None",
100
オブジェクト
CanvasRequest
"version":"1.0.0"
},
"user":
{
"accessibilityModeEnabled":false,
"currencyISOCode":"USD",
"email":"[email protected]",
"firstName":"Sean",
"fullName":"Sean Forbes",
"isDefaultNetwork":false,
"language":"en_US",
"lastName":"Forbes",
"locale":"en_US",
"networkId":"0DBxx000000001r",
"profileId":"00ex0000000jzpt",
"profilePhotoUrl":"/profilephoto/005/F",
"profileThumbnailUrl":"/profilephoto/005/T",
"roleId":null,
"siteUrl":"https://mydomain.force.com/",
"siteUrlPrefix":"/mycommunity",
"timeZone":"America/Los_Angeles",
"userId":"005x0000001SyyEAAS",
"userName":"[email protected]",
"userType":"STANDARD"
},
"environment":
{
"parameters":
{
"complex":
{
"key1":"value1",
"key2":"value2"
},
"integer":10,
"simple":"This is a simple string.",
"boolean":true
},
"dimensions":
{
"clientHeight":"50px",
"clientWidth":"70px",
"height":"900px",
"width":"800px",
"maxHeight":"2000px",
"maxWidth":"1000px"
},
"record":
{
"attributes":
{
"type":"Account",
"url":"/services/data/v37.0/sobjects/Account/001xx000003DGWiAAO"
101
オブジェクト
CanvasRequest
},
"Id":"001xx000003DGWiAAO",
"Phone":"(555) 555-5555",
"Fax":"(555) 555-5555",
"BillingCity":"Seattle"
},
"displayLocation":"Chatter",
"locationUrl":"http://www.salesforce.com/some/path/index.html",
"subLocation":null,
"uiTheme":"Theme3",
"version":
{
"api":"37.0",
"season":"SUMMER"
},
},
"organization":
{
"currencyIsoCode":"USD",
"multicurrencyEnabled":true,
"name":"Edge Communications",
"namespacePrefix":"org_namespace",
"organizationId":"00Dx00000001hxyEAA"
},
"links":
{
"chatterFeedItemsUrl":"/services/data/v37.0/chatter/feed-items",
"chatterFeedsUrl":"/services/data/v37.0/chatter/feeds",
"chatterGroupsUrl":"/services/data/v37.0/chatter/groups",
"chatterUsersUrl":"/services/data/v37.0/chatter/users",
"enterpriseUrl":"/services/Soap/c/37.0/00Dx00000001hxy",
"loginUrl":"http://login.salesforce.com",
"metadataUrl":"/services/Soap/m/37.0/00Dx00000001hxy",
"partnerUrl":"/services/Soap/u/37.0/00Dx00000001hxy",
"queryUrl":"/services/data/v37.0/query/",
"recentItemsUrl":"/services/data/v37.0/recent/",
"restUrl":"/services/data/v37.0/",
"searchUrl":"/services/data/v37.0/search/",
"sobjectUrl":"/services/data/v37.0/sobjects/",
"userUrl":"/005x0000001SyyEAAS"
}
},
"client":
{
"instanceId":"06Px000000002JZ",
"instanceUrl":"http://instance.salesforce.com:8080",
"oauthToken":"00Dx0000X00Or4J!ARQAQJ34YL8gKowP65p8FDHkvk.Uq5...",
"refreshToken":"00DD0000000K1NM!ARAAQGJVGOyMjh1jjqvShRpLuAq0...",
"targetOrigin":"http://instance.salesforce.com:8080"
},
"algorithm":"HMACSHA256",
"userId":"005x0000001SyyEAAS",
102
オブジェクト
Client
"issuedAt":null
}
関連トピック:
オブジェクト
Client
Context
Client
Clientオブジェクトは、CanvasRequestオブジェクトの署名付き要求から返される JSON 形式のオブジェクトです。
クライアントアプリケーションに関するコンテキスト情報が含まれます。
項目
説明
instanceId
Visualforce ページで公開されるキャンバスアプリケーションの
ID。キャンバスアプリケーションのインスタンス管理用に内
部的に使用されます。
instanceUrl
Salesforce インスタンスの URL。たとえば、
http://instance.salesforce.com に保存されます。Links
オブジェクトから返される URL の先頭を指定するために使用
されます。
oauthToken
コール元に返される OAuth アクセストークン。
refreshToken
クライアントがセッションの認証に使用するトークン。この
値は、キャンバスアプリケーションで、選択した OAuth 範囲
のいずれかで [ユーザに代わっていつでも要求を実行 ]
(refresh_token、offline_access) が設定されている場合にのみ返さ
れます。それ以外の場合、null が返されます。
targetOrigin
キャンバスアプリケーションの URL。ページとキャンバスア
プリケーションを含む iFrame との間のクロスドメイン通信用
に内部的に使用されます。
次のコードスニペットに、Client オブジェクトの例を示します。
"client":
{
"instanceId":"06Px000000002JZ",
"instanceUrl":"http://instance.salesforce.com:8080",
"oauthToken":"00Dx0000X00Or4J!ARQAQJ34YLUq54RMTrQbxVoWUgorjFi3...",
"refreshToken":"00DD0000000K1NM!ARAAQGJVGOyMjh1jjqvShRpLuAq0ke...",
103
オブジェクト
Context
"targetOrigin":"http://instance.salesforce.com:8080"
}
関連トピック:
CanvasRequest
Context
キャンバスアプリケーションを Salesforce で接続アプリケーションとして追加すると、Context オブジェクトを
使用して現在の環境に関する情報を取得できます。Contextオブジェクトには、アプリケーションが誰によって
どのように使用されるかを示す情報が含まれます。この情報を使用して、後続のコールで情報を取得しアプリ
ケーションコードを作成できるため、Salesforceユーザインターフェースと完全に統合されているように見えま
す。このオブジェクトは JSON 形式で返され、次のオブジェクトが含まれます。
• Application — バージョン、アクセス方法、URL などのキャンバスアプリケーションに関する情報。
• Environment — 場所、UI テーマなどの環境に関する情報。
• Links — メタデータ URL、ユーザ URL、Chatter グループ URL などのリンク。これらのリンクを使用して、アプ
リケーションから Salesforce へのコールを行うことができます。
• Organization — 名前、ID、通貨コードなどの組織に関する情報。
• User — ロケール、名前、ユーザ ID、メールなどの現在ログインしているユーザに関する情報。
次のコードに、Context オブジェクトの例を示します。Context オブジェクトは、署名付き要求を使用して認証
した場合にCanvasRequestオブジェクトに返されます。また、このオブジェクトを取得するために明示的なコー
ルを行うこともできます。
"context":{
"application":
{
"applicationId":"06Px000000003ed",
"authType":"SIGNED_REQUEST",
"canvasUrl":"http://instance.salesforce.com:8080
/canvas_app_path/canvas_app.jsp",
"developerName":"my_java_app",
"isInstalledPersonalApp": false,
"name":"My Java App",
"namespace":"org_namespace",
"options":[],
"referenceId":"09HD00000000AUM",
"samlInitiationMethod": "None",
"version":"1.0.0"
},
"user":
{
"accessibilityModeEnabled":false,
"currencyISOCode":"USD",
"email":"[email protected]",
"firstName":"Sean",
"fullName":"Sean Forbes",
"isDefaultNetwork":false,
104
オブジェクト
Context
"language":"en_US",
"lastName":"Forbes",
"locale":"en_US",
"networkId":"0DBxx000000001r",
"profileId":"00ex0000000jzpt",
"profilePhotoUrl":"/profilephoto/005/F",
"profileThumbnailUrl":"/profilephoto/005/T",
"roleId":null,
"siteUrl":"https://mydomain.force.com/",
"siteUrlPrefix":"/mycommunity",
"timeZone":"America/Los_Angeles",
"userId":"005x0000001SyyEAAS",
"userName":"[email protected]",
"userType":"STANDARD"
},
"environment":
{
"parameters":{},
"dimensions":
{
"clientHeight": "50px",
"clientWidth": "70px",
"height":"900px",
"width":"800px",
"maxHeight":"2000px",
"maxWidth":"1000px"
},
"record":
{
"attributes":
{
"type":"Account",
"url":"/services/data/v37.0/sobjects/Account/001xx000003DGWiAAO"
},
"Id":"001xx000003DGWiAAO",
"Phone":"(555) 555-5555",
"Fax":"(555) 555-5555",
"BillingCity":"Seattle"
},
"displayLocation":"Chatter",
"locationUrl":"http://instance.salesforce.com:8080/canvas_app_path",
"subLocation":null,
"uiTheme":"Theme3",
"version":
{
"api":"37.0",
"season":"SUMMER"
}
},
"organization":
{
"currencyIsoCode":"USD",
"multicurrencyEnabled":true,
105
オブジェクト
Context
"name":"Edge Communications",
"namespacePrefix":"org_namespace",
"organizationId":"00Dx00000001hxyEAA"
},
"links":
{
"chatterFeedItemsUrl":"/services/data/v37.0/chatter/feed-items",
"chatterFeedsUrl":"/services/data/v37.0/chatter/feeds",
"chatterGroupsUrl":"/services/data/v37.0/chatter/groups",
"chatterUsersUrl":"/services/data/v37.0/chatter/users",
"enterpriseUrl":"/services/Soap/c/37.0/00Dx00000001hxy",
"loginUrl":"http://login.salesforce.com",
"metadataUrl":"/services/Soap/m/37.0/00Dx00000001hxy",
"partnerUrl":"/services/Soap/u/37.0/00Dx00000001hxy",
"queryUrl":"/services/data/v37.0/query/",
"restUrl":"/services/data/v37.0/",
"recentItemsUrl":"/services/data/v37.0/recent/",
"searchUrl":"/services/data/v37.0/search/",
"sobjectUrl":"/services/data/v37.0/sobjects/",
"userUrl":"/005x0000001SyyEAAS"
}
}
コンテキストデータの不要な部分を除外するようにSalesforceに要求できます。除外するデータの量を制御する
には、独自の Canvas.CanvasLifecycleHandler を Apex で実装し、excludeContextTypes() の実装に除外するコン
テキストセクションのリストを指定します。
関連トピック:
Client
キャンバスアプリケーションでのコンテキストの取得
CanvasRequest コンテキストデータの絞り込み
Application
Application オブジェクトは、Context オブジェクトの署名付き要求から返される JSON 形式のオブジェクトです。
Application オブジェクトには特定のキャンバスアプリケーションの情報が含まれます。この情報は、[設定] か
ら [クイック検索] ボックスに「接続アプリケーション」と入力し、[接続アプリケーション] を選択して、アプ
リケーションを Salesforce の接続アプリケーションとして追加した後に取得されます。
項目
説明
applicationId
キャンバスアプリケーションの ID。
authType
キャンバスアプリケーションのアクセスメソッド。接続アプリケーションを作成
してキャンバスアプリケーションを公開するときは、この値を指定します。
canvasUrl
たとえば、
http://instance.salesforce.com:8080/canvas_app_path/canvas_app.jsp
などの、キャンバスアプリケーションの URL です。
106
オブジェクト
Context
項目
説明
developerName
キャンバスアプリケーションの内部名。接続アプリケーションを作成してキャン
バスアプリケーションを公開するときは、[API 名] 項目にこの値を指定します。
name
キャンバスアプリケーションの名前。
namespace
キャンバスアプリケーションと関連付けられた Salesforce 名前空間プレフィック
ス。
options
次の値の 1 つ、2 つ、または 3 つが含まれる配列。
• HideHeader — 「今何をしていますか?」というテキストが表示されるパブ
リッシャーヘッダーを非表示にします。この値は、キャンバスアプリケーショ
ンがパブリッシャーに表示されている場合にのみ使用されます。
• HideShare — パブリッシャーの [共有] ボタンを非表示にします。この値は、
キャンバスアプリケーションがパブリッシャーに表示されている場合にのみ
使用されます。
• PersonalEnabled — キャンバスアプリケーションをキャンバス個人用アプ
リケーションとしてユーザがインストールできるようにします。
referenceId
キャンバスアプリケーション定義の一意の ID。内部的に使用されます。
version
キャンバスアプリケーションのバージョン。組織のキャンバスアプリケーション
を更新および再公開すると、この値が変化します。
次のコードスニペットに、Application オブジェクトの例を示します。
"application":
{
"applicationId":"06Px000000003ed",
"authType":"SIGNED_REQUEST",
"canvasUrl":"http://instance.salesforce.com:8080/canvas_app_path/canvas_app.jsp",
"developerName":"my_java_app",
"isInstalledPersonalApp": false,
"name":"My Java App",
"namespace":"org_namespace",
"options":["HideShare", "HideHeader"],
"referenceId":"09HD00000000AUM",
"samlInitiationMethod":"None",
"version":"1.0.0"
}
関連トピック:
Context
107
オブジェクト
Context
Environment
Environmentオブジェクトは、キャンバスアプリケーション環境に関するコンテキスト情報を含む、JSON 形式の
オブジェクトです。このオブジェクトには、Dimensions オブジェクト、Record オブジェクト、Version オブジェ
クト、および Parameters オブジェクトのパラメータ (存在する場合) が含まれます。
項目
説明
displayLocation
現在キャンバスアプリケーションをコールしているアプリケー
ションの場所。有効な値は、次のとおりです。
• Chatter — キャンバスアプリケーションが Chatter タブから
コールされました。
• ChatterFeed — キャンバスアプリケーションが Chatter キャン
バスフィード項目からコールされました。
• MobileNav — キャンバスアプリケーションが Salesforce1 のナ
ビゲーションメニューからコールされました。
• OpenCTI — キャンバスアプリケーションが Open CTI コンポー
ネントからコールされました。
• PageLayout — キャンバスアプリケーションがページレイア
ウト内の要素からコールされました。displayLocation が
PageLayout の場合、subLocation のいずれかの値が返される可
能性があります。
• Publisher — キャンバスアプリケーションがキャンバスカス
タムクイックアクションからコールされました。
• ServiceDesk — キャンバスアプリケーションが Salesforce コン
ソールコンポーネントからコールされました。
• Visualforce — キャンバスアプリケーションが Visualforce ペー
ジからコールされました。
• None — キャンバスアプリケーションがキャンバスアプリ
ケーションのプレビューアからコールされました。
locationUrl
ユーザがキャンバスアプリケーションにアクセスするSalesforce
のページの URL。たとえば、Chatterタブのリンクをクリックし
てユーザがキャンバスアプリケーションにアクセスする場合、
この項目には Chatter タブの URL が含まれます。
subLocation
キャンバスアプリケーションがモバイルデバイスに読み込ま
れるときにそのキャンバスアプリケーションのコール元とな
る、アプリケーション内のサブロケーション。subLocation は
displayLocation に関連しています。displayLocation が PageLayout の
場合のこの項目の有効な値は、次のとおりです。
• S1MobileCardFullview — キャンバスアプリケーションがモバ
イルカードからコールされました。
108
オブジェクト
項目
Context
説明
• S1MobileCardPreview — キャンバスアプリケーションがモバ
イルカードプレビューからコールされました。アプリケー
ションを開くには、プレビューをクリックする必要があり
ます。
• S1RecordHomePreview — キャンバスアプリケーションがレ
コード詳細ページプレビューからコールされました。 ア
プリケーションを開くには、プレビューをクリックする必
要があります。
• S1RecordHomeFullview — キャンバスアプリケーションがペー
ジレイアウトからコールされました。
uiTheme
コンテキスト組織のデフォルトのテーマ。
次のコードスニペットに、Environment オブジェクトの例を示します。
"environment":
{
"parameters":{},
"dimensions":
{
"clientHeight": "50px",
"clientWidth": "70px",
"height":"900px",
"width":"800px",
"maxHeight":"2000px",
"maxWidth":"1000px"
},
"record": {
"attributes": {
"type": "Account",
"url": "/services/data/v37.0/sobjects/Account/001xx000003DGWiAAO"
},
"Id": "001xx000003DGWiAAO",
"Phone": "(555) 555-5555",
"Fax": "(555) 555-5555",
"BillingCity": "Seattle"
},
"displayLocation":"PageLayout",
"locationUrl":"http://www.salesforce.com/some/path/index.html",
"subLocation":"S1MobileCardFullview",
"uiTheme":"Theme3",
"version":
{
"api":"37.0",
"season":"SUMMER"
109
オブジェクト
Context
}
}
関連トピック:
Context
Dimensions
Record
Parameters
Version
Dimensions
Dimensions オブジェクトは、キャンバスアプリケーションが表示される iFrame のサイズに関するコンテキスト
情報を含む、JSON 形式のオブジェクトです。
項目
説明
clientHeight
clientHeight の値は、SignedRequest 内のキャンバスアプリ
ケーションに送信され、最も外側の div 要素の高さを設定す
るために使用できます。この項目は、モバイルデバイスから
アクセスするアプリケーションの高さを設定するのに便利で
す。この項目は、
sr.context.environment.dimensions.clientHeight と
して参照できます。sr は、解析された署名付き要求の JavaScript
オブジェクトです。
clientWidth
clientWidth の値は、SignedRequest 内のキャンバスアプリ
ケーションに送信され、最も外側の div 要素の幅を設定する
ために使用できます。この項目は、モバイルデバイスからア
クセスするアプリケーションの幅を設定するのに便利です。
この項目は、
sr.context.environment.dimensions.clientWidth と
して参照できます。sr は、解析された署名付き要求の JavaScript
オブジェクトです。
height
iFrame の高さ (ピクセル単位)。
width
iFrame の幅 (ピクセル単位)。
maxHeight
iFrame の高さの最大値 (ピクセル単位)。デフォルト値は 2,000
です。「infinite」(無限) も有効な値です。
maxWidth
iFrame の幅の最大値 (ピクセル単位)。デフォルト値は 1,000 で
す。「infinite」(無限) も有効な値です。
110
オブジェクト
Context
次のコードスニペットに、Dimensions オブジェクトの例を示します。
"dimensions":
{
"clientHeight": "50px",
"clientWidth": "70px",
"height": "900px",
"width": "800px",
"maxHeight": "2000px",
"maxWidth": "1000px"
},
関連トピック:
Environment
ユーザインターフェースの考慮事項
Record
Recordオブジェクトは、キャンバスアプリケーションが表示されるオブジェクトに関する情報を含む、JSON 形
式のオブジェクトです。Account などの標準オブジェクトの場合、または Warehouse__c などのカスタムオ
ブジェクトの場合があります。オブジェクトページまたはオブジェクトに関連付けられたパブリッシャーや
フィードにキャンバスアプリケーションが表示されない場合は、Record オブジェクトが空になっています。
このオブジェクトには、Attributes オブジェクトが含まれます。
項目
説明
Id
関連オブジェクトの ID。たとえば、[取引先] ページにキャン
バスアプリケーションが表示される場合、この項目に
AccountId が含まれています。
キャンバスアプリケーションが <apex:canvasApp> コンポーネントを使用して Visualforce ページに表示され、
その Visualforce ページがオブジェクトに関連付けられている場合 (たとえば、ページレイアウトへ配置されてい
るなど)、コンポーネントの entityFields 属性を使用して関連するオブジェクトから特定の項目またはすべ
ての項目を返すことができます。
次のコードスニペット例は、[取引先] ページに表示されたキャンバスアプリケーションから返される Record オ
ブジェクトを示します。この例では、entityFields 属性で Phone、Fax、および BillingCity 項目が指定されてい
ます。
"record":{
"attributes":{
"type":"Account",
"url":"/services/data/v37.0/sobjects/Account/001xx000003DGWiAAO"
},
"Id":"001xx000003DGWiAAO",
"Phone":"(555) 555-5555",
"Fax":"(555) 555-5555",
111
オブジェクト
Context
"BillingCity":"Seattle"
}
関連トピック:
Environment
属性
Record オブジェクトの例
レコードオブジェクトで返される項目
属性
Attributesオブジェクトは、キャンバスアプリケーションが表示されるオブジェクトに関する情報を含む、JSON
形式のオブジェクトです。
項目
説明
type
キャンバスアプリケーションが関連付けられているオブジェ
クト。この値は、Account などの標準オブジェクトの場合
と、Warehouse__c などのカスタムオブジェクトの場合があ
ります。
キャンバスアプリケーションがパブリッシャーに表示される
場合、種別は関連付けられたオブジェクトの名前です。たと
えば、CollaborationGroup または Account です。キャン
バスアプリケーションがユーザフィードまたはオブジェクト
に関連付けられたフィードに表示される場合、種別は
FeedItem です。
url
関連付けられたオブジェクトの URL。URL の形式は、指定され
たレコードの REST API リソースと同じです。
次のコードスニペットに、Attributes オブジェクトの例を示します。
"record":{
"attributes":{
"type":"Account",
"url":"/services/data/v37.0/sobjects/Account/001xx000003DGWiAAO"
},
"Id":"001xx000003DGWiAAO"
}
関連トピック:
Record
112
オブジェクト
Context
Record オブジェクトの例
次のコード例では、キャンバスアプリケーションがパブリッシャーまたはフィードのどちらに表示されるかに
応じて異なる情報を Record オブジェクトに含める方法を示します。
パブリッシャーのキャンバスアプリケーション
キャンバスアプリケーションがパブリッシャーに表示される場合、Record オブジェクトには、パブリッシャー
がユーザレコード、グループレコード、オブジェクトレコードのどれに表示されるかに応じて異なる情報が含
まれます。
ユーザレコード
Record オブジェクト Id は User.Id で、Type は User です。
"record":{
"attributes":{
"type":"User",
"url":"/services/data/v37.0/sobjects/User/001xx000003DGWiABC"
},
"Id":"001xx000003DGWiABC"
}
グループレコード
Record オブジェクト Id は CollaborationGroup.Id で、Type は CollaborationGroup です。
"record":{
"attributes":{
"type":"CollaborationGroup",
"url":"/services/data/v37.0/sobjects/CollaborationGroup/001xx000003DGWiXYZ"
},
"Id":"001xx000003DGWiXYZ"
}
オブジェクトレコード
Record オブジェクト Id はオブジェクト Id で、Type はオブジェクト名 (Account など) です。
"record":{
"attributes":{
"type":"Account",
"url":"/services/data/v37.0/sobjects/Account/001xx000003DGWiAAO"
},
"Id":"001xx000003DGWiAAO"
}
フィードのキャンバスアプリケーション
キャンバスアプリケーションがフィードに表示される場合、ユーザレコード、グループレコード、オブジェク
トレコードのどのフィードでも、Record オブジェクトには常にフィード項目情報が含まれます。
Record オブジェクト Id は FeedItem.Id で、Type は FeedItem です。
"reoord":{
"attributes":{
"type":"FeedItem",
113
オブジェクト
Context
"url":"/services/data/v37.0/sobjects/FeedItem/001xx000003DGWiAAO"
},
"Id":"001xx000003DGWiAAO"
}
Parameters
Parametersオブジェクトは、開発者が指定したコンテキスト情報を含む JSON 形式のオブジェクトです。Parameters
オブジェクトは Visualforce ページで、apex:canvasApp コンポーネントの parameters タグを使用するか、ま
たは Chatter キャンバスフィード項目で、フィード項目を作成するときに parameters 変数を使用して指定さ
れます。
次のコードスニペットに、Parameters オブジェクトの例を示します。
"parameters":
{
"inventoryStatus":"Picked",
"stockPrice":"12.99",
"count":2,
"address":{"street":"1 Market", "city":"San Francisco", "state":"CA"}
}
関連トピック:
Environment
apex:canvasApp コンポーネント
Version
Versionオブジェクトは、JSON 形式のオブジェクトで、サーバで実行されているSalesforceのバージョンに関する
コンテキスト情報が含まれています。
項目
説明
api
サーバの API バージョン。
season
サーバで実行されているリリースの季節。
次のコードスニペットに、Version オブジェクトの例を示します。
"version":
{
"api": "37.0",
"season": "WINTER"
}
関連トピック:
Environment
114
オブジェクト
Context
Links
Links オブジェクトは、キャンバスアプリケーションの統合に役立つ URL を含む、JSON 形式のオブジェクトで
す。たとえば、Enterprise WSDL を使用して Salesforce へのコールを行うには、enterpriseUrl を使用します。
メモ: 次の一覧のリンクは、最も使用頻度の高いリンクです。これらは、キャンバスアプリケーションの
REST エンドポイントを作成する時に役立ちます。リンクの完全なリストと関連する機能については、
『Force.com REST API 開発者ガイド』および『Chatter REST API 開発者ガイド』を参照してください。
項目
説明
chatterFeedItemsUrl
コンテキスト組織の Chatter フィード項目を返すための URL。
このリンクは、API バージョン 31.0 以前の機能のみを指し示す
ため、API バージョン 37.0 より前に作成されたインテグレー
ションでは引き続き機能します。
chatterFeedsUrl
コンテキスト組織の Chatter フィードを返すための URL。この
リンクは、API バージョン 31.0 以前の機能のみを指し示すた
め、API バージョン 37.0 より前に作成されたインテグレーショ
ンでは引き続き機能します。
chatterGroupsUrl
コンテキスト組織の Chatter グループを返すための URL。
chatterUsersUrl
コンテキスト組織の Chatter ユーザを返すための URL。
enterpriseUrl
Enterprise WSDL を使用して Salesforce に API コールバックするた
めの URL。
loginUrl
コンテキストユーザがログインしているインスタンスのログ
インサーバの URL。内部的に使用されます。
metadataUrl
メタデータ API へのコールを行うための URL。
partnerUrl
パートナー WSDL を使用して Salesforce に API コールバックする
ための URL。
queryUrl
SOQL クエリを発行するための URL。
recentItemsUrl
最近使ったデータにアクセスするための URL。
restUrl
REST API リソースのリストを返すための URL。
searchUrl
SOSL 検索を発行するための URL。
sobjectUrl
Salesforce オブジェクトからメタデータまたはデータを取得す
るための URL。
userUrl
コンテキストユーザの URL。
115
オブジェクト
Context
次のコードスニペットに、Links オブジェクトの例を示します。
"links":
{
"chatterFeedItemsUrl":"/services/data/v31.0/chatter/feed-items",
"chatterFeedsUrl":"/services/data/v31.0/chatter/feeds",
"chatterGroupsUrl":"/services/data/v37.0/chatter/groups",
"chatterUsersUrl":"/services/data/v37.0/chatter/users",
"enterpriseUrl":"/services/Soap/c/37.0/00Dx00000001hxy",
"loginUrl":"http://login.salesforce.com",
"metadataUrl":"/services/Soap/m/37.0/00Dx00000001hxy",
"partnerUrl":"/services/Soap/u/37.0/00Dx00000001hxy",
"queryUrl":"/services/data/v37.0/query/",
"recentItemsUrl":"/services/data/v37.0/recent/",
"restUrl":"/services/data/v37.0/",
"searchUrl":"/services/data/v37.0/search/",
"sobjectUrl":"/services/data/v37.0/sobjects/",
"userUrl":"/005x0000001SyyEAAS"
}
使用可能なリンクと OAuth 範囲
キャンバスアプリケーションで使用できるリンクは、接続アプリケーションの作成時に選択された OAuth 範囲
によって異なります。
範囲
説明
基本情報へのアクセス
• userUrl
• loginUrl
データへのアクセスと管理
• enterpriseUrl
• metadataUrl
• partnerUrl
• queryUrl
• recentItemsUrl
• restUrl
• searchUrl
• sobjectUrl
Chatter データへのアクセスと管理
• chatterFeedItemsUrl
• chatterFeedsUrl
• chatterGroupsUrl
• chatterUsersUrl
116
オブジェクト
Context
範囲
説明
フルアクセス
すべてのリンク
関連トピック:
Context
Organization
Organizationオブジェクトは、キャンバスアプリケーションが実行されている組織に関するコンテキスト情報を
含む、JSON 形式のオブジェクトです。
項目
説明
currencyIsoCode
コンテキスト組織でマルチ通貨が有効になっている場合は、
コンテキストユーザの通貨が返されます。設定されていない
場合は、デフォルトのマスタ通貨が返されます。コンテキス
ト組織でマルチ通貨が無効になっている場合は、マスタ通貨
のロケールの通貨が返されます。
multicurrencyEnabled
コンテキスト組織でマルチ通貨を使用するか (true)、否か
(false) を示します。
namespacePrefix
キャンバスアプリケーションと関連付けられた Salesforce 名前
空間プレフィックス。
name
コンテキスト組織の名前。
organizationId
コンテキスト組織の ID。
次のコードスニペットに、Organization オブジェクトの例を示します。
"organization":
{
"currencyIsoCode":"USD",
"multicurrencyEnabled":true,
"name":"Edge Communications",
"namespacePrefix":"org_namespace",
"organizationId":"00Dx00000001hxyEAA"
}
関連トピック:
Context
117
オブジェクト
Context
User
User オブジェクトは、現在のユーザに関するコンテキスト情報を含む JSON 形式のオブジェクトです。この情
報は、キャンバスアプリケーション内で使用できます (ユーザ名を表示する場合など)。また、後続コールを
行って追加情報を取得するために使用することもできます (現在のユーザのロール情報を取得する場合など)。
項目
説明
accessibilityModeEnabled
コンテキストユーザについて、視覚障害者のためのユーザイ
ンターフェースの変更が可能かどうかを示します (可能な場合
は true、不可能な場合は false)。
currencyISOCode
マルチ通貨組織のコンテキストユーザのデフォルト通貨コー
ドまたは単一通貨の組織の組織の通貨コードを返します。
email
コンテキストユーザのメールアドレス。
firstName
コンテキストユーザの名前 (ファーストネーム)。
fullName
コンテキストユーザの氏名。形式は、Firstname Lastname です。
isDefaultNetwork
コンテキストユーザについて、そのユーザがコミュニティに
存在するか (true)、否か (false) を示します。
language
コンテキストユーザの言語。文字列の長さは、2 - 5 文字です。
最初の 2 文字は常に、「fr」や 「en」などの ISO 言語コードで
す。値がさらに国別に評価される場合、文字列はアンダース
コア (_) に続き、「US」や「UK」などの ISO 国コードが続きま
す。たとえば、アメリカを示す文字列は「en_US」、カナダの
フランス語圏を示す文字列は「fr_CA」です。
lastName
コンテキストユーザの姓。
locale
コンテキストユーザのロケール。
networkId
コンテキストユーザが現在ログインしているコミュニティの
ID。
profileId
現在コンテキストユーザに割り当てられているロールに関連
付けられたプロファイルの ID。
profilePhotoUrl
Chatter が有効化されている場合のコンテキストユーザのプロ
ファイル写真の URL。写真がアップロードされるたびに URL が
更新され、最新の写真が反映されます。新しい写真がアップ
ロードされた場合、古い写真で返されていた URL では写真が
返されることが保証されません。この項目を使用して最新の
写真の URL を必ずクエリしてください。
profileThumbnailUrl
Chatter が有効化されている場合の、コンテキストユーザのプ
ロファイル写真のサムネイルの URL。写真がアップロードさ
れるたびに URL が更新され、最新の写真が反映されます。新
118
オブジェクト
項目
Context
説明
しい写真がアップロードされた場合、古い写真で返されてい
た URL では写真が返されることが保証されません。この項目
を使用して最新の写真の URL を必ずクエリしてください。
roleId
コンテキストユーザの現在割り当てられているロールの ID。
siteUrl
コンテキストユーザが現在ログインしているコミュニティの
URL。
siteUrlPrefix
コンテキストユーザが現在ログインしているコミュニティの
URL プレフィックス。
timeZone
コンテキストユーザのタイムゾーン。
userId
コンテキストユーザの ID。
userName
コンテキストユーザのログイン名。
userType
コンテキストユーザに関連付けられたプロファイルのユーザ
ライセンスの種別。
次のコードスニペットに、User オブジェクトの例を示します。
"user":
{
"accessibilityModeEnabled":false,
"currencyISOCode":"USD",
"email":"[email protected]",
"firstName":"Sean",
"fullName":"Sean Forbes",
"isDefaultNetwork":false,
"language":"en_US",
"lastName":"Forbes",
"locale":"en_US",
"networkId":"0DBxx000000001r",
"profileId":"00ex0000000jzpt",
"profilePhotoUrl":"/profilephoto/005/F",
"profileThumbnailUrl":"/profilephoto/005/T",
"roleId":null,
"siteUrl":"https://mydomain.force.com/",
"siteUrlPrefix":"/mycommunity",
"timeZone":"America/Los_Angeles",
"userId":"005x0000001SyyEAAS",
"userName":"[email protected]",
"userType":"STANDARD"
}
関連トピック:
Context
119
オブジェクト
Controller
Controller
Visualforce ページにキャンバスアプリケーションが含まれている場合は、Controller オブジェクトでメソッドを使
用して、キャンバスアプリケーションが登録するイベントを公開できます。このクラスには次のメソッドが含
まれます。
メソッド
署名
説明
publish
publish(String name, Object
payload [, String[] target])
キャンバスアプリケーションの登録先
となるイベントの公開に使用します。
target パラメータは省略可能です。1
つのキャンバスアプリケーション名、
またはキャンバスアプリケーション名
の配列を含めることができます。
resize
resize(String height, String
width, String target)
Visualforce ページで、キャンバスアプリ
ケーションの iFrame のサイズ変更に使
用します。
subscribe
subscribe(Subscriber event)
Visualforce ページで、キャンバスアプリ
ケーションが公開するイベントへの登
録に使用します。
unsubscribe
unsubscribe(Unsubscriber event) Visualforce ページで、キャンバスアプリ
ケーションが公開する親イベントから
の登録解除に使用します。
関連トピック:
Visualforce ページとキャンバスアプリケーション間でのイベントの使用
SignedRequest
SignedRequest
Force.com Canvas には、署名付き要求で使用できるメソッドを備えた SignedRequest オブジェクトがあります。
メソッド
署名
説明
verifyAndDecode
public static CanvasRequest
verifyAndDecode(String input,
String secret) throws
SecurityException
署名付き要求を検証して復号化する場
合に使用します。CanvasRequest Java オブ
ジェクトを返します。
120
オブジェクト
SignedRequest
メソッド
署名
説明
verifyAndDecodeAsJson
public static String
verifyAndDecodeAsJson(String
input, String secret) throws
SecurityException
署名付き要求を検証して復号化する場
合に使用します。JSON 文字列の
CanvasRequest データを返します。
関連トピック:
CanvasRequest
署名付き要求の検証および復号化
署名付き要求の要求
121
第 12 章
Force.com Canvas の制限
Force.com Canvas はマルチテナント環境で実行されるため、共有リソースが確実に保護されるように制限が課せ
られます。
説明
制限
Chatterタブに表示できるユーザあたりのキャンバスア 50
プリケーション数。最初の 50 個のキャンバスアプリ
ケーションのみが表示されます (アルファベット順)。
ユーザあたりの、1 日 (24 時間) あたりの Force.com Canvas 5,000
コール数
これには、コンテキストを取得するための SDK コール
と、署名付き要求コールが含まれます。SignedRequest
メソッドをコールすると、実際には、そのメソッド用
のコールと内部ロギング用のコールという 2 つのコー
ルが行われます。
ユーザあたりの、1 日あたりの Heroku クイックスター 100
トコール
Heroku アカウントには、実行できるコール数に独自の
制限があります。
関連トピック:
Force.com Canvas の概要
クイックスタート
クイックスタート — 詳細
122