The code is an improvement of this article.
- The main visualForce page AddmultipleAccounts code:
<apex:page controller="AddmultipleAccountsController">
<apex:form>
<apex:pageBlock title="Add multiple account" id="main_block">
<apex:pageBlockTable value="{!listAccount}" var="acc">
<apex:column headerValue="Account Name">
<apex:inputField value="{!acc.Name}"/>
</apex:column>
<apex:column headerValue="Account Type">
<apex:inputField value="{!acc.Type}"/>
</apex:column>
<apex:column headerValue="Industry">
<apex:inputField value="{!acc.Industry}"/>
</apex:column>
<!-- you can add more column here -->
</apex:pageBlockTable>
<apex:pageBlockButtons>
<apex:commandButton value="Add 1 Account Row" action="{!addAccount}" reRender="main_block"/>
<apex:commandButton value="Add 5 Account Rows" action="{!addAccounts}" reRender="main_block" />
<apex:commandButton value="Save Accounts" action="{!saveAccounts}" />
</apex:pageBlockButtons>
</apex:pageBlock>
</apex:form>
</apex:page>
- After insert the records, there will be a simple page to show the result, the page AllAccountsSaved will show the result, you can make more work on this page. the code:
<apex:page sidebar="false" showHeader="true">
<center>
<h3> Congrats your accounts have been successfully saved! </h3>
</center>
</apex:page>
- Here the custom controller AddmultipleAccountsController code:
public with sharing class AddmultipleAccountsController {
public list<Account> listAccount{get;set;}
public AddmultipleAccountsController() {
listAccount = new list<Account>();
listAccount.add(new Account());
}
//add one account at a time
public void addAccount() {
listAccount.add(new Account());
}
//add five account at a time
public void addAccounts() {
for(Integer j=0; j < 5; j++) {
listAccount.add(new Account());
}
}
public PageReference saveAccounts() {
try {
insert listAccount;
} catch(System.DmlException e) {
for(Integer i=0; i < e.getNumDml(); i++) {
System.debug(e.getDmlMessage(i));
}
}
return Page.AllAccountsSaved;
}
}
- A test method AddmultipleAccountsControllerTest for the custom controller above, code:
@isTest
private class AddmultipleAccountsControllerTest {
static testMethod void testAddAccount() {
Test.startTest();
AddmultipleAccountsController aacontroller = new AddmultipleAccountsController();
aacontroller.addAccount();
list<Account> listAccount = aacontroller.listAccount;
Test.stopTest();
system.assert(listAccount.size() == 2);
}
static testMethod void testAddAccounts() {
Test.startTest();
AddmultipleAccountsController aacontroller = new AddmultipleAccountsController();
aacontroller.addAccounts();
list<Account> listAccount = aacontroller.listAccount;
Test.stopTest();
system.assert(listAccount.size() == 6);
}
static testMethod void testSaveAccounts() {
Test.startTest();
AddmultipleAccountsController aacontroller = new AddmultipleAccountsController();
aacontroller.listAccount[0].Name = 'lushang test account';
aacontroller.saveAccounts();
Test.stopTest();
Account[] acc = [SELECT id,name from Account where name = 'lushang test account'];
system.assert(acc.size() == 1);
}
}
- Create a visualForce Tab for the page, the user can use this tab to add multiple records.
- You can change the tab permission settings in certain profile's "Object Settings"
- You can translate the tab name in the Translation Workbench's translate bar, section is : "Web Tab"