The code is an improvement of this article.

  1. 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>
  1. 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>
  1. 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;
    }
}
  1. 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);
    }
}
  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"

标签: salesforce, develop, visualforce, apex, code

添加新评论