🐴

Apex,Visualforce:複数の子レコードを呼び出し、入力して保存する

2021/02/24に公開

概要

Visualforceで親×子(複数)のページを作成し、変更内容を反映するためのサンプルコード

画面イメージ

ソースコード:Apexクラス

public class CustomControllerTest {
	public Id accountId;	//親取引先のID
    public List<Contact>  con {get;set;}	//対象の取引先責任者リスト
    public Account account {get;set;}
    //コンストラクタ
    public CustomControllerTest(ApexPages.StandardSetController controller) {
		accountId = ApexPages.currentPage().getParameters().get('id');
		con = [Select id, Name,firstName,LastName  from Contact where accountId = :accountId ];
        account = [Select id , Name from Account where id = :accountId Limit 1];
    }
//保存処理
public PageReference save() {
	upsert account;
    upsert con;
	String prevURL = '/' + accountId;
	PageReference pageRef = new PageReference(prevURL);
	return null;
}

    public PageReference fullsave() {
String parameter = System.currentPageReference().getParameters().get('parameter');
        upsert account;
    upsert con;
	String prevURL = '/' + accountId;
	PageReference pageRef = new PageReference(prevURL);
	return null;
}
}

ソースコード:Visualforceページ

<apex:page standardController="Account" recordSetVar="Lists" extensions="CustomControllerTest">
  <apex:form>
    <apex:pageBlock title="取引先編集画面">
      <table>
        <thead>
          <th>id</th>
          <th>Name</th>
        </thead>
        <apex:repeat value="{!account}" var="hoge">
          <tr>
            <td>
              <apex:inputField value="{!hoge.Id}" /> </td>
            <td>
              <apex:inputField value="{!hoge.Name}" /> </td>
          </tr>
        </apex:repeat>
      </table>
      <apex:commandButton action="{!save}" Value="保存" />
      <apex:commandButton action="{!cancel}" Value="キャンセル" /> </apex:pageBlock>
    <apex:pageBlock title="取引先責任者編集画面">
      <table>
        <thead>
          <th>id</th>
          <th>FirstName</th>
          <th>LastName</th>
        </thead>
        <apex:repeat value="{!con}" var="fuga">
          <tr>
            <td>
              <apex:inputField value="{!fuga.Id}" /> </td>
            <td>
              <apex:inputField value="{!fuga.FirstName}" /> </td>
            <td>
              <apex:inputField value="{!fuga.LastName}" /> </td>
          </tr>
        </apex:repeat>
      </table>
      <apex:commandButton action="{!save}" Value="保存" />
      <apex:commandButton action="{!cancel}" Value="キャンセル" /> </apex:pageBlock>
  </apex:form>
</apex:page>

memo

apex:pageBlockTableにネストしてapex:repeatを使う方法がわからんかったので普通にHTMLタグでテーブルを作った。
やり方がわかったらそのうちまた別の記事にする予定。

Discussion