2

I am trying to implement below example shown in screenshot :-

Account Wrapper DML Example

I want to check that for records where checkbox is selected, name field should not be null, then only insertion should happen, but name validation is not happening in my create method.

If am using InputField then standard name validation is being obeyed but I am using Inputtext and want to validate name before inserting.

Below are the code spinets and my wrapper class which I have tried :-

acc is Account reference variable in AccountWrapper and wrapper is list reference variable for AccountWrapper in my class

Wrapper Class:

public class AccountWrapper {

    public Account acc {set;get;}
    public Boolean flag {set;get;}
}

Code:

public class DML_Example_3_sum {

    public list<AccountWrapper> wrapper {set;get;}
    public list<Account> accounts {set;get;}

    public DML_Example_3_sum(){

        wrapper = new list<AccountWrapper>();
        accounts= new list<Account>();
        add();
    }
    public void add(){

        AccountWrapper aw = new AccountWrapper();
        Account a = new Account();
        aw.acc=a;
        aw.flag=false;
        wrapper.add(aw);

    }

1st code Snippet:

public PageReference create(){

        for(AccountWrapper a : wrapper){

            if(a.flag == true && a.acc.name != Null){

                accounts.add(a.acc);
                }else{
                    ApexPages.Message msg = new ApexPages.Message(ApexPages.Severity.ERROR,'Select Accounts to be inserted');
                    ApexPages.addMessage(msg);             
            }               
        }
        try{
                insert accounts;
                PageReference p = new PageReference('/001/o');
                return p;
            }catch(Exception e){              
                return null;
            }

2nd Code Snippet:

public PageReference create(){

        for(AccountWrapper a : wrapper){

            if(a.flag == true){

                     if(a.acc.Name == Null){

                    ApexPages.Message msg = new ApexPages.Message(ApexPages.Severity.ERROR,'Name Cannot be blank');

                    ApexPages.addMessage(msg);
                }
                }
} 

VF Page:

<apex:page controller="DML_Example_3_sum" >

    <apex:form >
        <apex:pageMessages />
        <apex:pageBlock title="Accounts">
            <apex:sectionHeader title="Add accounts" subtitle=" Accounts" />
            <apex:pageBlockButtons location="top" >
                <apex:commandButton value="Create" action="{!create}" />
            </apex:pageBlockButtons>
            <apex:pageBlockTable value="{!wrapper}" var="a" >
                <apex:column >
                    <apex:facet name="header">
                        <apex:inputCheckbox />
                    </apex:facet>
                    <apex:inputCheckbox value="{!a.flag}" />
                </apex:column>
                <apex:column headerValue="Name" >
                    <apex:inputText value="{!a.acc.Name}" />
                </apex:column>
                <apex:column headerValue="Phone" >
                    <apex:inputField value="{!a.acc.Phone}" />
                </apex:column>
                <apex:column headerValue="Rating" >
                    <apex:inputField value="{!a.acc.Rating}" />
                </apex:column>
                <apex:column headerValue="Industry" >
                    <apex:inputField value="{!a.acc.Industry}" />
                </apex:column>
                <apex:column >
                    <apex:commandButton value="Add" action="{!add}" />
                </apex:column>
            </apex:pageBlockTable>
        </apex:pageBlock>

    </apex:form>
</apex:page>
1
  • 1
    You can add required attribute in your inputText field like this: <apex:column headerValue="Name" > <apex:inputText value="{!a.acc.Name}" required="true"/> <apex:messages /> </apex:column> Sep 8, 2018 at 15:13

1 Answer 1

0

Instead of a null value it is likely that the Account name is being set to an empty string. The Apex String class has methods that deal with both:

if (a.flag && String.isNotBlank(a.acc.name)) {
    // OK
} else {
    // Not OK
}
5
  • I tried the above , but still it is taking me to Account home page. Actually I have just started to learn salesforce, would appreciate your inputs. Sep 8, 2018 at 15:02
  • @SumitAnand Best you edit the question to just have the code that you think is closest to working and describe exactly what is going wrong. Then others can answer based on that. If you are just starting, take the time to work through the relevant Trailheads so you've got a better understanding of what is happening when something doesn't work.
    – Keith C
    Sep 8, 2018 at 15:22
  • @SumitAnand Your code is working. It inserted the record, then took you to the account home page /001/o. It did exactly what you told it to do.
    – sfdcfox
    Sep 8, 2018 at 16:30
  • @KeithC Got it...from next time will post only relevant code...yes, I am studying and practicing from Trailheads and challenges... thanks for the help :) Sep 9, 2018 at 16:28
  • @sfdcfox yes...It clicked to me ....before taking to home page I added a condition to check size of Accounts wrapper ..the it worked fine... thanks for the help :) Sep 9, 2018 at 16:32

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .