この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

モバイルとデスクトップの両方で機能する Visualforce ページの作成

実行されるコンテキストに適合するコードを記述して、Salesforce1 アプリケーションと Salesforce フルサイトの両方で有効に機能する Visualforce ページを作成します。

Salesforce1 はさまざまなナビゲーションコントロールとイベントを処理するフレームワークを提供します。sforce オブジェクトは Salesforce1 内のページにのみ挿入されるため、Salesforce フルサイト上で実行しているときに Visualforce ページでこのフレームワークを利用できません。つまり、Salesforce1 アプリケーションと Salesforce フルサイトの両方で共有されるページの場合、sforce オブジェクトが利用可能なときはこれを使用し、利用可能でないときは標準の Visualforce ナビゲーションを使用するようにコードを記述します。

たとえば、注文を簡易作成する @RemoteAction メソッドから JavaScript Remoting 要求が返った後に実行される簡単な JavaScript を次に示します。このコードは、カスタムアクションとして使用される Visualforce ページを元にしています。カスタムアクションがこのコードを Salesforce1 アプリケーションのアクションバーおよび Salesforce フルサイトのパブリッシャーメニューに追加します。このコードは両方の場所で機能する必要があります。コードの意図は、注文した取引先の詳細ページへの移動です。
1// Go back to the Account detail page
2if( (typeof sforce != 'undefined') && sforce && (!!sforce.one) ) {
3    // Salesforce1 navigation
4    sforce.one.navigateToSObject(aId);
5}
6else {
7    // Set the window's URL using a Visualforce expression
8    window.location.href = 
9        '{!URLFOR($Action.Account.View, account.Id)}';
10}

if ステートメントによって、sforce オブジェクトが利用可能かつ有用であるかどうかが確認されます。これは、ページが Salesforce1 内で実行されている場合のみ true です。sforce が利用可能な場合、Salesforce1 ナビゲーション管理システムは取引先の詳細ページへの移動に使用されます。

sforce オブジェクトが利用可能でない場合、これを使用する試みは JavaScript エラーとなり、ナビゲーションは行われません。その代わりに、取引先の詳細ページの URL を返す Visualforce 式を使用して、コードがウィンドウの URL を設定します。ナビゲーションイベントがフレームワークによって失われるため、Salesforce1 でこの方法を使用するのは好ましくないかもしれませんが、通常の Visualforce では必要になります。

このような共通テストは独自のヘルパー関数としてくくり出すことをお勧めします。次のようなコードを JavaScript 静的リソースに追加し、if 条件で ForceUI.isSalesforce1() を単にコールします。このようにすると、検出ロジックが変更しても、それを 1 か所で更新するだけですみます。

1(function(myContext){
2    myContext.ForceUI = myContext.ForceUI || {};
3
4    myContext.ForceUI.isSalesforce1 = function() {
5        return((typeof sforce != 'undefined') && sforce && (!!sforce.one));
6    }
7})(this);

メモ