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

JavaScript Remoting の例

Visualforce ページでの JavaScript Remoting の使用方法の基本的なサンプルを次に示します。
まず、次のように AccountRemoter という Apex コントローラを作成します。
1swfobject.registerObject("clippy.codeblock-0", "9");
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17global with sharing class AccountRemoter {
18
19
20
21    public String accountName { get; set; }
22
23    public static Account account { get; set; }
24
25    public AccountRemoter() { } // empty constructor
26
27    
28
29    @RemoteAction
30
31    global static Account getAccount(String accountName) {
32
33        account = [SELECT Id, Name, Phone, Type, NumberOfEmployees 
34
35                   FROM Account WHERE Name = :accountName];
36
37        return account;
38
39    }
40
41}
@RemoteAction アノテーション以外、これは他のコントローラ定義と同じように見えます。
このリモートメソッドを使用するためには、次のような Visualforce ページを作成します。
1swfobject.registerObject("clippy.codeblock-1", "9");
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17<apex:page controller="AccountRemoter">
18
19    <script type="text/javascript">
20
21    function getRemoteAccount() {
22
23        var accountName = document.getElementById('acctSearch').value;
24
25
26
27        Visualforce.remoting.Manager.invokeAction(
28
29            '{!$RemoteAction.AccountRemoter.getAccount}',
30
31            accountName, 
32
33            function(result, event){
34
35                if (event.status) {
36
37                    // Get DOM IDs for HTML and Visualforce elements like this
38
39                    document.getElementById('remoteAcctId').innerHTML = result.Id
40
41                    document.getElementById(
42
43                        "{!$Component.block.blockSection.secondItem.acctNumEmployees}"
44
45                        ).innerHTML = result.NumberOfEmployees;
46
47                } else if (event.type === 'exception') {
48
49                    document.getElementById("responseErrors").innerHTML = 
50
51                        event.message + "<br/>\n<pre>" + event.where + "</pre>";
52
53                } else {
54
55                    document.getElementById("responseErrors").innerHTML = event.message;
56
57                }
58
59            }, 
60
61            {escape: true}
62
63        );
64
65    }
66
67    </script>
68
69
70
71    <input id="acctSearch" type="text"/>
72
73    <button onclick="getRemoteAccount()">Get Account</button>
74
75    <div id="responseErrors"></div>
76
77
78
79    <apex:pageBlock id="block">
80
81        <apex:pageBlockSection id="blockSection" columns="2">
82
83            <apex:pageBlockSectionItem id="firstItem">
84
85                <span id="remoteAcctId"/>
86
87            </apex:pageBlockSectionItem>
88
89            <apex:pageBlockSectionItem id="secondItem">
90
91                <apex:outputText id="acctNumEmployees"/>
92
93            </apex:pageBlockSectionItem>
94
95        </apex:pageBlockSection>
96
97    </apex:pageBlock>
98
99</apex:page>
このマークアップについては、次の点に注意してください。
  • JavaScript は、明示的な invokeAction Remoting コールを使用し、$RemoteAction グローバル変数を活用してリモートアクションメソッドの正しい名前空間を解決します。
  • event.status 変数は、コールが成功した場合にのみ true になります。この例で示したエラー処理は意図的に単純にしてあり、エラーメッセージとスタック追跡が、event.message 値と event.where 値からそれぞれ出力されます。要求でメソッドコールが成功しない場合は、これに代わるさらに強固なロジックを実装することをお勧めします。
  • result 変数は、ApexgetAccount メソッドから返されるオブジェクトを表します。
  • プレーン HTML 要素の DOM ID へのアクセス方法は単純で、項目の ID を使用するだけです。
  • ID が一意になるようにするために、Visualforce コンポーネントの DOM ID は動的に生成されます。上記のコードでは、$Component グローバル変数を介してコンポーネントにアクセスすることによってその ID を取得するために、$Component を使用した JavaScript からのコンポーネントの参照で説明した方法を使用しています。