sforce.one での API バージョンの処理方法
デフォルトで、sforce.one では要求された Visualforce ページの API バージョンと同じバージョンが使用されます。たとえば、Visualforce ページに API バージョン 30.0 がある場合、sforce.one を使用する同ページの JavaScript では、デフォルトで sforce.one の API バージョン 30.0 が使用されます。
つまり、Visualforce ページが新しい API バージョンに更新されると、このページでは sforce.one の更新されたバージョンが自動的に使用されます。上記の例では、この Visualforce ページが API バージョン 31.0 に更新されると、sforce.one を使用するアプリケーション機能では sforce.one の API バージョン 31.0 が使用されます。
- Visualforce ページの API バージョンを前のバージョンに戻します。この作業ではコード変更は不要です。
- ページの機能のコードを更新して問題を修正します。これが最善の解決法ですが、デバッ��が必要な場合があり、確実にコード変更が必要になります。
- 特定のバージョンの sforce.one を使用します。この解決法では、最小限のコード変更が必要になることが多くあります。
特定のバージョンの sforce.one の使用
特定のバージョンの sforce.one を使用するには、sforce.one.getVersion() 関数を使用して、API バージョン、および特定のバージョンの sforce.one を使用する必要のあるコールバック関数を入力します。このコールによって、適切なバージョンの sforce.one が自動的に読み込まれます。
1sforce.one.getVersion(versionString, callbackFunction);versionString はアプリケーションで必須の API バージョンです。必ず 2 桁数字、ピリオド、1 桁数字になります (例、30.0)。無効なバージョン文字列を使用したコールは、エラーを表示することなく失敗します。
callbackFunction は、特定のバージョンの sforce.one を使用する JavaScript 関数です。sforce.one.getVersion() は非同期で実行され、要求されたバージョンの sforce.one の読み込みが完了すると、コールバック関数がコールされます。コールバック関数は、指定された API バージョンの sforce.one オブジェクトであるパラメータを 1 つ受け取ります。グローバル sforce.one の代わりに、渡されたオブジェクトを使用して、アプリケーションで必須の API バージョンに適合する sforce.one にコールを実行します。
特定のバージョンの sforce.one の使用例
1<input type="button" value="Create Account" onclick="btnCreateAccount()" id="btnCreateAcct"/>Visualforce ページの API バージョンへのデフォルト設定
1<script>
2 function MyApp() {
3 this.createAccount = function() {
4 sforce.one.navigateToURL("/001/e");
5 };
6 }
7
8 var app = new MyApp();
9
10 function btnCreateAccount() {
11 app.createAccount();
12 }
13</script>アプリケーション機能は MyApp オブジェクト内で作成され、イベント (ボタンのクリック) が発生すると、イベント処理関数によりアプリケーション関数がコールされます。ベストプラクティスでは、アプリケーションイベント処理からアプリケーション機能を分離することで、バージョン固有の sforce.one バージョンを使用するための設定が整います。
特定の sforce.one API バージョンの使用 (単純)
1<script>
2 function MyApp(sfone) {
3 this.createAccount = function() {
4 sfone.navigateToURL("/001/e");
5 };
6 }
7
8 var app30 = null;
9
10 function btnCreateAccount() {
11 // Create our app object if not already defined
12 if(!app30) {
13 // Create app object with versioned sforce.one
14 sforce.one.getVersion("30.0", function(sfoneV30) {
15 app30 = new MyApp(sfoneV30);
16 app30.createAccount();
17 });
18 return;
19 }
20 app30.createAccount();
21 }
22</script>上記の例では、イベント処理関数が 1 つ目の例から拡張され、sforce.one のバージョン固有インスタンスの作成が含まれています。アプリケーションで複数のバージョンを合わせて使用する必要がある場合は、適切なバージョンと名前で複数の MyApp インスタンスを作成できます。ただし、複数のバージョンを使用すると扱いにくくなります。代わりに、次のアプローチをお勧めします。
特定の sforce.one API バージョンの使用 (最善)
1<script>
2 function MyApp(sfone) {
3 this.createAccount = function() {
4 sfone.navigateToURL("/001/e");
5 };
6 }
7
8 var app30 = null;
9
10 // Initialize app: get versioned API, wire up clicks
11 sforce.one.getVersion("30.0", function(sfoneV30) {
12 // Create app object with versioned sforce.one
13 app30 = new MyApp(sfoneV30);
14
15 // Wire up button event
16 var btn = document.getElementById("btnCreateAcct");
17 btn.onclick = btnCreateAccount;
18 });
19
20 // Events handling functions
21 // Can't be fired until app is defined
22 function btnCreateAccount() {
23 app30.createAccount();
24 }
25</script>このサンプルでは、アプリケーション初期化が空白とコメントのみで分離されていますが、より適切にカプセル化するために関数単位に分離することができます。
特定の sforce.one API バージョンの使用 (同期)
1<script src="/sforce/one/30.0/api.js"></script>
2<script>
3 function MyApp(sfone) {
4 this.createAccount = function() {
5 sfone.navigateToURL("/001/e");
6 };
7 }
8
9 var app = null;
10
11 sforce.one.getVersion("30.0", function(sfoneV30) {
12 app = new MyApp(sfoneV30);
13 });
14
15 // Events handling function
16 // Can't be fired until app is defined
17 function btnCreateAccount() {
18 app.createAccount();
19 }
20</script>同期モードが必要な場合もありますが、非同期バージョンをお勧めします。sforce.one ライブラリの正しいバージョンを手動で含めるのを忘れると、診断の難しいバグがコードに含まれます。