🐴

Apex,Visualforce:親と子のレコードをそれぞれ取得して編集し、保存したい

2021/02/23に公開

概要

タイトル通り。
親のレコードを開きつつ、子のレコードも一緒に更新したいときに役立つ。

こんな画面を出す

ソースコード:Apex

public class CustomControllerTest {
	public Id accountId;	//取引先のID
    public Account acc {get;set;}
    public Contact con {get;set;}

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

ソースコード:Visualforce

<apex:page standardController="Account" extensions="CustomControllerTest">
    <apex:form >
        <apex:pageBlock title="取引先編集画面">    
            <apex:pageBlockTable title="account"  value="{!account}" var="a" >
                <apex:column headerValue="Id" >
                    <apex:inputField value="{!a.Id}"/>
                </apex:column>
                <apex:column headerValue="Name" >
                    <apex:inputField value="{!a.Name}"/>
                </apex:column>
            </apex:pageBlockTable>        
        </apex:pageBlock>
        
        <apex:pageBlock title="取引先責任者編集画面">    
            <apex:pageBlockTable title="con"  value="{!con}" var="con" >

                <apex:column headerValue="Id" >
                    <apex:inputField value="{!con.Id}"/>
                </apex:column>
                <apex:column headerValue="firstName" >
                    <apex:inputField value="{!con.firstName}"/>
                </apex:column>
                <apex:column headerValue="LastName" >
                    <apex:inputField value="{!con.LastName}"/>
                </apex:column>
            </apex:pageBlockTable>        
        </apex:pageBlock>

<apex:commandButton action="{!save}" Value="保存"/>
<apex:commandButton action="{!cancel}" Value="キャンセル"/>
    </apex:form>

</apex:page>

memo

親:子で1:Nとなる場合はまた別途。

Discussion