Apex,Visualforce:キャンセルボタン,保存ボタン,適用ボタンを作る

公開:2021/02/21
更新:2021/02/21
2 min読了の目安(約2600字TECH技術記事

はじめに

「スタンダードコントローラを使わずカスタムコントローラを使ってVisualforceページを作成したい。だが、Save/Cancelの挙動がわからない。何をどうすればいいの?」

そんな人向けの記事です。
つまりは過去の自分向け。

サンプル用Visualforce

<apex:page controller="CustomControllerTest">
    <apex:form >
        <apex:pageBlock title="取引先編集画面">    
            <apex:pageBlockTable title="acc" value="{!acc}" var="acc">
                <apex:column headerValue="Id" >
                    <apex:inputField value="{!acc.Id}"/>
                </apex:column>
                <apex:column headerValue="Name" >
                    <apex:inputField value="{!acc.Name}"/>
                </apex:column>
            </apex:pageBlockTable>        
        </apex:pageBlock>
<apex:commandButton action="{!save}" Value="保存"/>
<apex:commandButton action="{!quicsave}" Value="適用"/>
<apex:commandButton action="{!cancel}" Value="キャンセル"/>
    </apex:form>

</apex:page>

画面イメージ

サンプル用カスタムコントローラ(全体)

public class CustomControllerTest {
	public Id accountId;	//取引先のID
    public Account acc {get;set;}
    //コンストラクタ
    public CustomControllerTest() {
		accountId = ApexPages.currentPage().getParameters().get('id');
		acc = [Select id, Name  from Account where Id = :accountId];
    }
    
//キャンセル処理
public PageReference cancel() {
	String prevURL = '/' + accountId;
	PageReference pageRef = new PageReference(prevURL);
	return pageRef;
}
//保存処理
public PageReference save() {
	upsert acc;
	String prevURL = '/' + accountId;
	PageReference pageRef = new PageReference(prevURL);
	return pageRef;
}
    //適用処理
public PageReference quicsave() {
	upsert acc;
	return null;
}
}

解説

キャンセルボタン

//キャンセル処理
public PageReference cancel() {
	String prevURL = '/' + accountId;
	PageReference pageRef = new PageReference(prevURL);
	return pageRef;
}

何もせずにPageReferenceで別のURLを返せばページ遷移する。
VisualforceのページURLを渡せば画面リセットもできる。

動作イメージ

保存ボタン

//保存処理
public PageReference save() {
	upsert acc;
	String prevURL = '/' + accountId;
	PageReference pageRef = new PageReference(prevURL);
	return pageRef;
}

upsert でレコードを保存。
PageReferenceでレコードのIDを渡せばレコード画面に遷移する。

動作イメージ

適用ボタン

    //適用処理
public PageReference quicsave() {
	upsert acc;
	return null;
}

upsert でレコードを保存。
return null とすることで、処理後ページ遷移をしない。

動作イメージ