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

action メソッドの定義

action メソッドは、ユーザがボタンをクリックしたり、ページ内のある領域にマウスポインタを移動したりするなどのページイベントが発生すると、ロジックまたはナビゲーションを実行します。次のいずれかのタグの action パラメータに {! } 表記を使用することによって、ページマークアップから action メソッドをコールできます。
  • <apex:commandButton> はアクションをコールするボタンを作成する
  • <apex:commandLink> はアクションをコールするリンクを作成する
  • <apex:actionPoller> は定期的にアクションをコールする
  • <apex:actionSupport> は、別の名前つきのコンポーネントにイベント (「onclick」、「onmouseover」など) を作成し、アクションをコールする
  • <apex:actionFunction> は、アクションをコールする新しい JavaScript 関数を定義する
  • <apex:page> はページが読み込まれると、アクションをコールする

たとえば、ページでの入力コンポーネントの使用で説明されているサンプルページでは、コマンドボタンは、標準取引先コントローラの save メソッドにバインドされています。MyController カスタムコントローラを使用するように、前の例を適応させることができます。

1swfobject.registerObject("clippy.codeblock-0", "9");
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17<apex:page controller="MyController" tabStyle="Account">
18    <apex:form>
19        <apex:pageBlock title="Hello {!$User.FirstName}!">
20            You are viewing the {!account.name} account. <p/>
21            Change Account Name: <p/> 
22            <apex:inputField value="{!account.name}"/> <p/>
23            <apex:commandButton action="{!save}" value="Save New Account Name"/>
24        </apex:pageBlock>
25    </apex:form>
26</apex:page>

このページに取引先データを表示するには、有効な取引先レコードの ID をページの URL のクエリパラメータとして指定する必要があります。次に例を示します。

1https://Salesforce_instance/apex/myPage?id=001x000xxx3Jsxb

メモ

上記のページを保存すると、Visualforce エディタで「クイック修正」オプションを使用して、MyController クラスに save メソッドを追加できます。クイック修正リンクをクリックすると、MyController は次のようになります。

1swfobject.registerObject("clippy.codeblock-2", "9");
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17public class MyController {
18
19    public PageReference save() {
20        return null;
21    }
22
23    public String getName() {
24        return 'MyController';
25    }
26
27    public Account getAccount() {
28        return [select id, name from Account 
29                 where id = :ApexPages.currentPage().getParameters().get('id')]; 
30    } 
31}

クイック修正によって生成される save メソッドは、action メソッドに使用する標準署名を使用します。これは public であり、PageReferemce を返し、引数を含みません。

最終的に、save メソッドの定義は、新しい取引先値を使用してデータベースを更新する必要がありますが、まずその前にメンバー変数を定義して、データベースから取得される取引先情報を保存する必要があります。取引先のメンバー変数がない場合、データベースから取得されるレコードは、その値がページを表示するために使用された後で保持されないため、ユーザによるレコード更新は保存できません。このメンバー変数を導入するには、コントローラコードの 2 つの部分を変更する必要があります。
  • メンバー変数をクラスに追加する
  • getAccount が最初のクエリを実行するときにメンバー変数を設定する
1swfobject.registerObject("clippy.codeblock-3", "9");
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17public class MyController {
18
19    Account account;
20
21    public PageReference save() {
22        return null;
23    }
24
25    public String getName() {
26        return 'MyController';
27    }
28
29    public Account getAccount() {
30        if(account == null) 
31            account = [select id, name, site from Account 
32                       where id = :ApexPages.currentPage().getParameters().get('id')];
33        return account; 
34    } 
35}

メンバー変数が適切に配置されたため、save メソッドで行う必要があることはデータベースの更新だけです。

1swfobject.registerObject("clippy.codeblock-4", "9");
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17public class MyController {
18
19    Account account;
20
21    public PageReference save() {
22        update account;
23        return null;
24    }
25
26    public String getName() {
27        return 'MyController';
28    }
29
30    public Account getAccount() {
31        if(account == null) 
32            account = [select id, name, site from Account 
33                       where id = :ApexPages.currentPage().getParameters().get('id')];
34        return account; 
35    } 
36}

save に対するより堅牢なソリューションとしては、さまざまな例外の検出や重複の検索などを行うことが考えられます。ここでは単純な例を示すことを目的としているため、そのような詳細は省略しています。

このページをテストするために、[取引先名を変更] 項目の値を変更して、[新規取引先名を保存] をクリックします。標準取引先コントローラの例と同様に、ページは単に新しい取引先名で更新されます。次の例では、save アクションを拡張して、現在のページを更新する代わりにユーザを別の確認ページに移動します。

ページが正しく表示されるように、URL に有効な取引先 ID を指定する必要があります。たとえば、001D000000HRgU6 が取引先 ID である場合、次の URL を使用します。

1https://Salesforce_instance/apex/MyFirstPage?id=001D000000HRgU6

メモ