You need to sign in to do that
Don't have an account?

please fix bugs
HI experts,
requirement:-
=========
Create a visual force page which list all accounts in a table with a check box in front of every row.
Display two check boxes Opportunities and contacts and one submit button, on click of it should show the opportunities/contact list or both according to the selection.
every id column in all tables should point to detail record.
Opportunities and contacts should be editable and saved at a time on click of 'Save Opportunities','Save Contacts' button.
Almost I achieved this requirement but following bugs need to be fixed
=========================================================
1.Opportunities or contacts are not displaying in the same screen.
means :-contacts and opportunities are displaying on another screen,they should display on same screen under Account records table.
======
2.contacts/opportunities checkbox should disappear if user un selects and vice versa.
3.If there are no contacts or accounts for selects Accounts error message should be displayed,empty table should not display.
example error message:-contact records are not found for selected Accounts
================
but currently empty table is displaying.
following is code
=============
Apex controller
=================
public class Acc_con_Opp_Details
{
//list of collection of the wrapper class object
public list<accountwrapper> actwrap {set;get;}
//list of collection of Account,contact and opportunity objects
public list<Account> accounts {set;get;}
public list<Account> acts {set;get;}
public list<opportunity> opts {set;get;}
public list<opportunity> sopts {set;get;}
public list<contact> cnts {set;get;}
public list<contact> snts {set;get;}
public boolean oppbox {set;get;}//used as check box for opportunity
public boolean conbox {set;get;}//used as check box for contact
public boolean flag1 {set;get;}//used in account page block
public boolean flag2 {set;get;}//used in contact page block
public boolean flag3 {set;get;}//used in opportunity page block
//this variables are used for pagination purpose
private integer totalRecs = 0;//stores no.of total records
private integer index = 0;//used for tracking offset
private integer blockSize =5;//for setting size of page
//in this constructor we are setting values to boolean values
public Acc_con_Opp_Details()
{
flag1=true;
flag2=false;
flag3=false;
totalRecs = [select count() from Account];//returns total no.of account records
getactwrap();//calling getactwrap method.
}
//this method displays first five records
public void beginning()
{
oppbox=false;
conbox=false;
index = 0;
getactwrap();
}
//this method displays prevoius records
public void previous()
{
oppbox=false;
conbox=false;
index = index-blockSize;
getactwrap();
}
//this method displays next records
public void next()
{
oppbox=false;
conbox=false;
index = index+blockSize;
getactwrap();
}
//this method displays last remaining records
public void end()
{
oppbox=false;
conbox=false;
index = totalrecs - math.mod(totalRecs,blockSize);
getactwrap();
}
//this variable is used to enable or disable first and previous buttons
public boolean prev{get
{
if(index == 0)
return true;
else
return false;
} set;}
//this variable is used to enable or disable next and last buttons
public boolean nxt{get
{
if((index + blockSize) > totalRecs)
return true;
else
return false;
} set;}
//used to display opportunities and contacts w.r.t selected accounts
public void submit()
{
flag1=false;
acts=new list<Account>();
for(accountwrapper aw:actwrap)
{
if(aw.acflag){
acts.add(aw.acc);
}
}
//if we select contact check box,then it displays contacts for selected accounts
if(conbox)
{
flag3=true;
snts=[select id,lastName,Department,account.name from contact where accountid IN:acts];
for(Contact con:snts)
{
if(con.id==null)
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR,'could not found contact records for selected Accounts'));
}
}
//if we select opportunity check box,then it displays opportunities for selected accounts
if(oppbox)
{
flag2=true;
opts=[select id,name,stageName,leadsource,account.name from opportunity where accountId IN:acts];
for(Opportunity opt:opts)
{
if(opt.id==null)
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR,'could not found opportunity records for selected Accounts'));
}
}
}
//This method uses a simple SOQL query to return a List of Accounts
public void getactwrap(){
accounts = Database.Query('SELECT id,Name,phone FROM Account LIMIT :blockSize OFFSET :index');
actwrap=new list<accountwrapper>();
// As each Account is processed we create a new accountwrapper object and add it to the wrapper class(accountwrapper) list.
for(account a:accounts)
{
actwrap.add(new accountwrapper(a));
}
}
// this method uses dml operation to edit the existing opportunities values or to insert new oppt values
public void saveopps()
{
list<opportunity> opps=new list<opportunity>();
opps.addAll(opts);
upsert opps;
}
//his method uses dml operation to edit the existing contact values or to insert new contact values
public void savecons()
{
cnts = new list<contact>();
cnts.addall(snts);
upsert cnts;
}
//This is wrapper class which is collection of other class instances
//here wrapper class contains both the standard salesforce object Account and a Boolean value acflag
public class accountwrapper{
public account acc{set;get;}
public boolean acflag{set;get;}
//In this contructor When we create a new accountwrapper object we pass a Account that is set to the acc property.
// We also set the boolean value to false
public accountwrapper(account a){
acc=a;
acflag=false;
}
}
}
vf page
======
vf page
==========
<apex:page controller="Acc_con_Opp_Details" showHeader="false" docType="html-5.0">
<apex:form >
<!--This block dispalying account record details-->
<apex:pageblock rendered="{!flag1}">
<apex:pageblocktable value="{!actwrap}" var="a">
<apex:column >
<apex:facet name="header" >Select</apex:facet>
<apex:inputCheckbox value="{!a.acflag}"/>
</apex:column>
<!-- displays id,name and phone number for accounts-->
<apex:column value="{!a.acc.id}"/>
<apex:column value="{!a.acc.name}"/>
<apex:column value="{!a.acc.phone}"/>
</apex:pageblocktable>
<!-- this buttons are used to paginate account records-->
<apex:pageblockButtons >
<!--displays first five records-->
<apex:commandButton value="first" action="{!beginning}" disabled="{!prev}"/>
<!--displays previous records-->
<apex:commandButton value="previous" action="{!previous}" disabled="{!prev}"/>
<!--displays previous next records-->
<apex:commandButton value="next" action="{!next}" disabled="{!nxt}"/>
<!-- displays last records-->
<apex:commandButton value="last" action="{!end}" disabled="{!nxt}"/>
</apex:pageblockButtons>
<!-- check boxs for opportunities and contacts-->
<center> <apex:inputCheckbox value="{!oppbox}" disabled=""/>Opportunities
<apex:inputCheckbox value="{!conbox}" disabled=""/>Contacts
<apex:commandButton value="submit" action="{!submit}"/>
</center>
</apex:pageblock>
<!--this block displays opportunity details-->
<apex:pageblock rendered="{!flag2}" id="block">
<apex:pageblocktable value="{!opts}" var="o">
<apex:column >
<apex:facet name="header">Opportunity Id</apex:facet>
<apex:commandlink value="{!o.id}" Action="{!URLFOR($Action.opportunity.edit,o.Id)}"/>
</apex:column>
<apex:column value="{!o.account.name}" />
<apex:column >
<apex:facet name="header">Opportunity Name</apex:facet>
<apex:inputtext value="{!o.name}" />
</apex:column>
<apex:column >
<apex:facet name="header">Opportunity Stage</apex:facet>
<apex:inputtext value="{!o.stagename}"/>
</apex:column>
<apex:column >
<apex:facet name="header">Opportunity Leadsource</apex:facet>
</apex:column>
</apex:pageblocktable>
<apex:commandButton value="Save Opportunities" action="{!saveopps}"/>
</apex:pageblock>
<!--this block is used for displaying contact details -->
<apex:pageblock rendered="{!flag3}">
<apex:pageblocktable value="{!snts}" var="c">
<apex:column >
<apex:facet name="header">Contact Id</apex:facet>
<apex:commandlink value="{!c}" Action="{!URLFOR($Action.contact.edit,c)}"/>
</apex:column>
<apex:column value="{!c.account.name}"/>
<apex:column >
<apex:facet name="header">Contact Lastname</apex:facet>
<apex:inputtext value="{!c.lastname}"/>
</apex:column>
<apex:column >
<apex:facet name="header">Contact Department</apex:facet>
<apex:inputtext value="{!c.Department}"/>
</apex:column>
</apex:pageblocktable>
<apex:commandButton value="Save Contacts" action="{!savecons}"/>
</apex:pageblock>
</apex:form>
</apex:page>
=============================================================================================================================
requirement:-
=========
Create a visual force page which list all accounts in a table with a check box in front of every row.
Display two check boxes Opportunities and contacts and one submit button, on click of it should show the opportunities/contact list or both according to the selection.
every id column in all tables should point to detail record.
Opportunities and contacts should be editable and saved at a time on click of 'Save Opportunities','Save Contacts' button.
Almost I achieved this requirement but following bugs need to be fixed
=========================================================
1.Opportunities or contacts are not displaying in the same screen.
means :-contacts and opportunities are displaying on another screen,they should display on same screen under Account records table.
======
2.contacts/opportunities checkbox should disappear if user un selects and vice versa.
3.If there are no contacts or accounts for selects Accounts error message should be displayed,empty table should not display.
example error message:-contact records are not found for selected Accounts
================
but currently empty table is displaying.
following is code
=============
Apex controller
=================
public class Acc_con_Opp_Details
{
//list of collection of the wrapper class object
public list<accountwrapper> actwrap {set;get;}
//list of collection of Account,contact and opportunity objects
public list<Account> accounts {set;get;}
public list<Account> acts {set;get;}
public list<opportunity> opts {set;get;}
public list<opportunity> sopts {set;get;}
public list<contact> cnts {set;get;}
public list<contact> snts {set;get;}
public boolean oppbox {set;get;}//used as check box for opportunity
public boolean conbox {set;get;}//used as check box for contact
public boolean flag1 {set;get;}//used in account page block
public boolean flag2 {set;get;}//used in contact page block
public boolean flag3 {set;get;}//used in opportunity page block
//this variables are used for pagination purpose
private integer totalRecs = 0;//stores no.of total records
private integer index = 0;//used for tracking offset
private integer blockSize =5;//for setting size of page
//in this constructor we are setting values to boolean values
public Acc_con_Opp_Details()
{
flag1=true;
flag2=false;
flag3=false;
totalRecs = [select count() from Account];//returns total no.of account records
getactwrap();//calling getactwrap method.
}
//this method displays first five records
public void beginning()
{
oppbox=false;
conbox=false;
index = 0;
getactwrap();
}
//this method displays prevoius records
public void previous()
{
oppbox=false;
conbox=false;
index = index-blockSize;
getactwrap();
}
//this method displays next records
public void next()
{
oppbox=false;
conbox=false;
index = index+blockSize;
getactwrap();
}
//this method displays last remaining records
public void end()
{
oppbox=false;
conbox=false;
index = totalrecs - math.mod(totalRecs,blockSize);
getactwrap();
}
//this variable is used to enable or disable first and previous buttons
public boolean prev{get
{
if(index == 0)
return true;
else
return false;
} set;}
//this variable is used to enable or disable next and last buttons
public boolean nxt{get
{
if((index + blockSize) > totalRecs)
return true;
else
return false;
} set;}
//used to display opportunities and contacts w.r.t selected accounts
public void submit()
{
flag1=false;
acts=new list<Account>();
for(accountwrapper aw:actwrap)
{
if(aw.acflag){
acts.add(aw.acc);
}
}
//if we select contact check box,then it displays contacts for selected accounts
if(conbox)
{
flag3=true;
snts=[select id,lastName,Department,account.name from contact where accountid IN:acts];
for(Contact con:snts)
{
if(con.id==null)
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR,'could not found contact records for selected Accounts'));
}
}
//if we select opportunity check box,then it displays opportunities for selected accounts
if(oppbox)
{
flag2=true;
opts=[select id,name,stageName,leadsource,account.name from opportunity where accountId IN:acts];
for(Opportunity opt:opts)
{
if(opt.id==null)
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR,'could not found opportunity records for selected Accounts'));
}
}
}
//This method uses a simple SOQL query to return a List of Accounts
public void getactwrap(){
accounts = Database.Query('SELECT id,Name,phone FROM Account LIMIT :blockSize OFFSET :index');
actwrap=new list<accountwrapper>();
// As each Account is processed we create a new accountwrapper object and add it to the wrapper class(accountwrapper) list.
for(account a:accounts)
{
actwrap.add(new accountwrapper(a));
}
}
// this method uses dml operation to edit the existing opportunities values or to insert new oppt values
public void saveopps()
{
list<opportunity> opps=new list<opportunity>();
opps.addAll(opts);
upsert opps;
}
//his method uses dml operation to edit the existing contact values or to insert new contact values
public void savecons()
{
cnts = new list<contact>();
cnts.addall(snts);
upsert cnts;
}
//This is wrapper class which is collection of other class instances
//here wrapper class contains both the standard salesforce object Account and a Boolean value acflag
public class accountwrapper{
public account acc{set;get;}
public boolean acflag{set;get;}
//In this contructor When we create a new accountwrapper object we pass a Account that is set to the acc property.
// We also set the boolean value to false
public accountwrapper(account a){
acc=a;
acflag=false;
}
}
}
vf page
======
vf page
==========
<apex:page controller="Acc_con_Opp_Details" showHeader="false" docType="html-5.0">
<apex:form >
<!--This block dispalying account record details-->
<apex:pageblock rendered="{!flag1}">
<apex:pageblocktable value="{!actwrap}" var="a">
<apex:column >
<apex:facet name="header" >Select</apex:facet>
<apex:inputCheckbox value="{!a.acflag}"/>
</apex:column>
<!-- displays id,name and phone number for accounts-->
<apex:column value="{!a.acc.id}"/>
<apex:column value="{!a.acc.name}"/>
<apex:column value="{!a.acc.phone}"/>
</apex:pageblocktable>
<!-- this buttons are used to paginate account records-->
<apex:pageblockButtons >
<!--displays first five records-->
<apex:commandButton value="first" action="{!beginning}" disabled="{!prev}"/>
<!--displays previous records-->
<apex:commandButton value="previous" action="{!previous}" disabled="{!prev}"/>
<!--displays previous next records-->
<apex:commandButton value="next" action="{!next}" disabled="{!nxt}"/>
<!-- displays last records-->
<apex:commandButton value="last" action="{!end}" disabled="{!nxt}"/>
</apex:pageblockButtons>
<!-- check boxs for opportunities and contacts-->
<center> <apex:inputCheckbox value="{!oppbox}" disabled=""/>Opportunities
<apex:inputCheckbox value="{!conbox}" disabled=""/>Contacts
<apex:commandButton value="submit" action="{!submit}"/>
</center>
</apex:pageblock>
<!--this block displays opportunity details-->
<apex:pageblock rendered="{!flag2}" id="block">
<apex:pageblocktable value="{!opts}" var="o">
<apex:column >
<apex:facet name="header">Opportunity Id</apex:facet>
<apex:commandlink value="{!o.id}" Action="{!URLFOR($Action.opportunity.edit,o.Id)}"/>
</apex:column>
<apex:column value="{!o.account.name}" />
<apex:column >
<apex:facet name="header">Opportunity Name</apex:facet>
<apex:inputtext value="{!o.name}" />
</apex:column>
<apex:column >
<apex:facet name="header">Opportunity Stage</apex:facet>
<apex:inputtext value="{!o.stagename}"/>
</apex:column>
<apex:column >
<apex:facet name="header">Opportunity Leadsource</apex:facet>
</apex:column>
</apex:pageblocktable>
<apex:commandButton value="Save Opportunities" action="{!saveopps}"/>
</apex:pageblock>
<!--this block is used for displaying contact details -->
<apex:pageblock rendered="{!flag3}">
<apex:pageblocktable value="{!snts}" var="c">
<apex:column >
<apex:facet name="header">Contact Id</apex:facet>
<apex:commandlink value="{!c}" Action="{!URLFOR($Action.contact.edit,c)}"/>
</apex:column>
<apex:column value="{!c.account.name}"/>
<apex:column >
<apex:facet name="header">Contact Lastname</apex:facet>
<apex:inputtext value="{!c.lastname}"/>
</apex:column>
<apex:column >
<apex:facet name="header">Contact Department</apex:facet>
<apex:inputtext value="{!c.Department}"/>
</apex:column>
</apex:pageblocktable>
<apex:commandButton value="Save Contacts" action="{!savecons}"/>
</apex:pageblock>
</apex:form>
</apex:page>
=============================================================================================================================
Thank you very much karthik.This code is really help full.
I have go through your code,It is excellent,but i am unable to uder stand
1.)Why my code is displaying opportunities and contacts in different screen.Can you mention excatly at which point you made changes to display opportunities and contacts in same screen under accounts.
2.)Rest of your code is very clear.
3.)If it is possible, I here by requesting you to provide test class for code coverage
It was very clear,Thanks for your clarification.Please finish test class for code coverage.
Sorry for distrubing you,I need another functionality in above code.
current functionality
----------------------------
1.)currently if we uncheck the check boxes of opportunitis and contacts and click submitt button all the contacts and opportunities records related to accounts are getting disappear.
required functionality
-----------------------------
1.)On uncheck the check boxs of opportunities and contacts with out clicking submitt button all the contacts and opportunities records related to accounts need to disappear.
2.)If we select the check boxs of opportunities and contacts with out clicking submitt button all the contacts and opportunities records related to accounts need to dispaly.
please try to achieve above functionality.
.
Greatly appreciating your help.requrired check box functionality is achieved.Please help me to achieve few more functionalities in above code.
current functionality:
==============
1.)If I deselet account records still opportunities and contact records are displaying.
required functionalitiy:
===============
1.)If I deselect account records related opportunities and contact records need to be disappear.
2.)If I select account records,related opportunities and contact records need to be display.
And also plese fix following bugs,
-->Even though I didn't select any account and selected opportunites and clicked on submit it is showing error message. If I select any account and select opportunites check box and click on submit, then only it should show the error message.
-->I need to display a blank table with "No Opportunites Found" message in case the selected accounts doesn't have any opportunities.
The same is the case with contacts.
-->If click on next button in accounts table, still It is displaying opportunities and contacts even though I didn't select anything.
please help me to fix above bugs.
Thanks for quick reply.I here by requesting you to please achieve following things also.
->Even though I didn't select any account and selected opportunites and clicked on submit it is showing error message. If I select any account and select opportunites check box and click on submit, then only it should show the error message.
-->I need to display a blank table with "No Opportunites Found" message in case the selected accounts doesn't have any opportunities.
--> The same is the case with contacts.
-->If click on next button in accounts table, still It is displaying opportunities and contacts even though I didn't select anything.
Many many thanks for your responeses.Almost all bugs got fixed except few.Please help me out to achieve follwing thing,
Currently Error messages are displaying at top of account table.what I am expecting is
1.)In case the selected accounts doesn't have any opportunities.,error message should display in blank opportunity table under account table with "No Opportunites Found" message.
2.)In case the selected accounts doesn't have any contacts.,error message should display in blank contact table under account table with "No contacts Found" message.
please help me out.I here by providing my code.
Apex class
--------------
public class Acc_con_Opp_Details
{
//list of collection of the wrapper class object
public list<accountwrapper> actwrap {set;get;}
//list of collection of Account,contact and opportunity objects
public list<Account> accounts {set;get;}
public list<Account> acts {set;get;}
public list<opportunity> opts {set;get;}
public list<opportunity> sopts {set;get;}
public list<contact> cnts {set;get;}
public list<contact> snts {set;get;}
public boolean oppbox {set;get;}//used as check box for opportunity
public boolean conbox {set;get;}//used as check box for contact
public boolean flag1 {set;get;}//used in account page block
public boolean flag2 {set;get;}//used in contact page block
public boolean flag3 {set;get;}//used in opportunity page block
//this variables are used for pagination purpose
private integer totalRecs = 0;//stores no.of total records
private integer index = 0;//used for tracking offset
private integer blockSize =5;//for setting size of page
//in this constructor we are setting values to boolean values
public Acc_con_Opp_Details()
{
flag1=true;
flag2=false;
flag3=false;
totalRecs = [select count() from Account];//returns total no.of account records
getactwrap();//calling getactwrap method.
}
//this method displays first five records
public void beginning()
{
flag2 = false;
flag3 = false;
oppbox=false;
conbox=false;
index = 0;
getactwrap();
}
//this method displays prevoius records
public void previous()
{
flag2 = false;
flag3 = false;
oppbox=false;
conbox=false;
index = index-blockSize;
getactwrap();
}
//this method displays next records
public void next()
{
flag2 = false;
flag3 = false;
oppbox=false;
conbox=false;
index = index+blockSize;
getactwrap();
}
//this method displays last remaining records
public void end()
{
flag2 = false;
flag3 = false;
oppbox=false;
conbox=false;
index = totalrecs - math.mod(totalRecs,blockSize);
getactwrap();
}
//this variable is used to enable or disable first and previous buttons
public boolean prev{get
{
if(index == 0)
return true;
else
return false;
} set;}
//this variable is used to enable or disable next and last buttons
public boolean nxt{get
{
if((index + blockSize) > totalRecs)
return true;
else
return false;
} set;}
//used to display opportunities and contacts w.r.t selected accounts
public void submit()
{
flag1=false;
acts=new list<Account>();
for(accountwrapper aw:actwrap)
{
if(aw.acflag){
acts.add(aw.acc);
}
}
//if we select contact check box,then it displays contacts for selected accounts
if(conbox)
{
snts=[select id,lastName,Department,account.name from contact where accountid IN:acts];
if(snts.size()>0)
{
flag3=true;
}
else
{
// //dispalys error message if we does't found any contact records for selected accounts.
for(accountwrapper aw : actwrap)
{
if(aw.acflag)
ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING,'contact records are not found for selected Accounts.'));
}
}
}
else
{
flag3 = false;
}
//if we select opportunity check box,then it displays opportunities for selected accounts
if(oppbox)
{
opts=[select id,name,stageName,leadsource,account.name from opportunity where accountId IN:acts];
if(opts.size() >0)
{
flag2=true;
}
else
{
//dispalys error message if we does't found any opportunity records for selected accounts.
for(accountwrapper aw : actwrap) {
if(aw.acflag)
ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING,'opportunity records are not found for selected Accounts.'));
}
}
} else {
flag2 = false;
}
}
//it hides contacts and dispalys opportunitites on uncheck of contact check box
public void Hideandshowopp()
{
if(oppbox)
{
submit();
} else
{
flag2 = false;
}
}
// it hides opportunities and dispalys contacts on uncheck of opportunities check box
public void HideandshowCon()
{
if(conbox)
{
submit();
}
else
{
flag3 = false;
}
}
public void Hideandshowoppcon() {
Hideandshowopp();
Hideandshowcon();
}
//This method uses a simple SOQL query to return a List of Accounts
public void getactwrap() {
accounts = Database.Query('SELECT id,Name,phone FROM Account LIMIT :blockSize OFFSET :index');
actwrap=new list<accountwrapper>();
// As each Account is processed we create a new accountwrapper object and add it to the wrapper class(accountwrapper) list.
for(account a:accounts)
{
actwrap.add(new accountwrapper(a));
}
}
// this method uses dml operation to edit the existing opportunities values or to insert new oppt values
public void saveopps()
{
list<opportunity> opps=new list<opportunity>();
opps.addAll(opts);
upsert opps;
}
//his method uses dml operation to edit the existing contact values or to insert new contact values
public void savecons()
{
cnts = new list<contact>();
cnts.addall(snts);
upsert cnts;
}
//This is wrapper class which is collection of other class instances
//here wrapper class contains both the standard salesforce object Account and a Boolean value acflag
public class accountwrapper
{
public account acc{set;get;}
public boolean acflag{set;get;}
//In this contructor When we create a new accountwrapper object we pass a Account that is set to the acc property.
// We also set the boolean value to false.
public accountwrapper(account a)
{
acc=a;
acflag=false;
}
}
}
vf page
=======
<apex:page controller="Acc_con_Opp_Details" showHeader="false" docType="html-5.0">
<apex:form>
<!--This block dispalying account record details-->
<apex:pageblock rendered="true">
<apex:pageMessages></apex:pageMessages>
<apex:pageblocktable value="{!actwrap}" var="a">
<apex:column>
<apex:facet name="header" >Select</apex:facet>
<apex:inputCheckbox value="{!a.acflag}">
<apex:actionSupport event="onchange" action="{!Hideandshowoppcon}"/>
</apex:inputCheckbox>
</apex:column>
<!-- displays id,name and phone number for accounts-->
<apex:column value="{!a.acc.id}"/>
<apex:column value="{!a.acc.name}"/>
<apex:column value="{!a.acc.phone}"/>
</apex:pageblocktable>
<!-- this buttons are used to paginate account records-->
<apex:pageblockButtons >
<!--displays first five records-->
<apex:commandButton value="first" action="{!beginning}" disabled="{!prev}"/>
<!--displays previous records-->
<apex:commandButton value="previous" action="{!previous}" disabled="{!prev}"/>
<!--displays previous next records-->
<apex:commandButton value="next" action="{!next}" disabled="{!nxt}"/>
<!-- displays last records-->
<apex:commandButton value="last" action="{!end}" disabled="{!nxt}"/>
</apex:pageblockButtons>
<!-- check boxs for opportunities and contacts-->
<center>
<apex:inputCheckbox value="{!oppbox}">
<apex:actionSupport event="onchange" action="{!Hideandshowopp}"/>
</apex:inputCheckbox>Opportunities
<apex:inputCheckbox value="{!conbox}">
<apex:actionSupport event="onchange" action="{!HideandshowCon}"/>
</apex:inputCheckbox>Contacts
<apex:commandButton value="submit" action="{!submit}"/>
</center>
</apex:pageblock>
<!--this block displays opportunity details-->
<apex:pageblock rendered="{!flag2}" id="block" >
<apex:pageMessages></apex:pageMessages>
<apex:pageblocktable value="{!opts}" var="o">
<apex:pageMessages ></apex:pageMessages>
<apex:column >
<apex:facet name="header">Opportunity Id</apex:facet>
<apex:commandlink value="{!o.id}" Action="{!URLFOR($Action.opportunity.edit,o.Id)}"/>
</apex:column>
<apex:column value="{!o.account.name}" />
<apex:column >
<apex:facet name="header">Opportunity Name</apex:facet>
<apex:inputtext value="{!o.name}" />
</apex:column>
<apex:column >
<apex:facet name="header">Opportunity Stage</apex:facet>
<apex:inputtext value="{!o.stagename}"/>
</apex:column>
<apex:column >
<apex:facet name="header">Opportunity Leadsource</apex:facet>
</apex:column>
</apex:pageblocktable>
<apex:commandButton value="Save Opportunities" action="{!saveopps}"/>
</apex:pageblock>
<!--this block is used for displaying contact details -->
<apex:pageblock rendered="{!flag3}">
<apex:pageMessage summary="info pageMessage" severity="info" strength="3"/>
<apex:pageblocktable value="{!snts}" var="c">
<apex:column >
<apex:facet name="header">Contact Id</apex:facet>
<apex:commandlink value="{!c}" Action="{!URLFOR($Action.contact.edit,c)}"/>
</apex:column>
<apex:column value="{!c.account.name}"/>
<apex:column >
<apex:facet name="header">Contact Lastname</apex:facet>
<apex:inputtext value="{!c.lastname}"/>
</apex:column>
<apex:column >
<apex:facet name="header">Contact Department</apex:facet>
<apex:inputtext value="{!c.Department}"/>
</apex:column>
</apex:pageblocktable>
<apex:commandButton value="Save Contacts" action="{!savecons}"/>
</apex:pageblock>
</apex:form>
</apex:page>
please help me.
I here by requesting you to please fix below bugs in below code
1.)while selecting and deselecting account records check box,screen is getting blinking.Screen should not get blink
2.) If we uncheck account recocrds header check box automatically opportunities and contacts check boxs are unchecking, that's fine.But if we select account records individually with out selecting header check box and if we deselect them individually,Opportunities and contacts check boxs are not getting unchecked.
note:-even though if we select few account records individually with out selecting master check box,on deselection of that account records,automatically opportunities and contacts check boxs should get unchecked.
please help me out by resolving above bugs in below code.
I here by leaving the code.
=================
public class Acc_con_Opp_Details
{
//list of collection of the wrapper class object
public list<accountwrapper> actwrap {set;get;}
//list of collection of Account,contact and opportunity objects
public list<Account> accounts {set;get;}
public list<Account> acts {set;get;}
public list<opportunity> opts {set;get;}
public list<opportunity> sopts {set;get;}
public list<contact> cnts {set;get;}
public list<contact> snts {set;get;}
public boolean oppbox {set;get;}//used as check box for opportunity
public boolean conbox {set;get;}//used as check box for contact
public boolean flag1 {set;get;}//used in account page block
public boolean flag2 {set;get;}//used in contact page block
public boolean flag3 {set;get;}//used in opportunity page block
public boolean checkallflag {set;get;}
public Boolean oppError {set;get;}
public Boolean conError {set;get;}
//this variables are used for pagination purpose
private integer totalRecs = 0;//stores no.of total records
private integer index = 0;//used for tracking offset
private integer blockSize =5;//for setting size of page
private String sortDirection = 'ASC';
private String sortExp = 'Name';
//in this constructor we are setting values to boolean values
public Acc_con_Opp_Details()
{
flag1=true;
flag2=false;
flag3=false;
oppError=false;
conError=false;
checkallflag = false;
totalRecs = [select count() from Account];//returns total no.of account records
getactwrap();//calling getactwrap method.
}
public String sortExpression
{
get
{
return sortExp;
}
set
{
//if the column is clicked on then switch between Ascending and Descending modes
if (value == sortExp)
sortDirection = (sortDirection == 'ASC')? 'DESC' : 'ASC';
else
sortDirection = 'ASC';
sortExp = value;
}
}
public String getSortDirection()
{
//if not column is selected
if (sortExpression == null || sortExpression == '')
return 'ASC';
else
return sortDirection;
}
public void setSortDirection(String value)
{
sortDirection = value;
}
//this method displays first five records
public void beginning()
{
flag2 = false;
flag3 = false;
oppbox=false;
conbox=false;
checkallflag=false;
index = 0;
getactwrap();
}
//this method displays prevoius records
public void previous()
{
flag2 = false;
flag3 = false;
oppbox=false;
conbox=false;
checkallflag=false;
index = index-blockSize;
getactwrap();
}
//this method displays next records
public void next()
{
flag2 = false;
flag3 = false;
oppbox=false;
conbox=false;
checkallflag=false;
index = index+blockSize;
getactwrap();
}
//this method displays last remaining records
public void end()
{
flag2 = false;
flag3 = false;
oppbox=false;
conbox=false;
checkallflag=false;
index = totalrecs - math.mod(totalRecs,blockSize);
getactwrap();
}
//this variable is used to enable or disable first and previous buttons
public boolean prev{get
{
if(index == 0)
return true;
else
return false;
} set;}
//this variable is used to enable or disable next and last buttons
public boolean nxt{get
{
if((index + blockSize) > totalRecs)
return true;
else
return false;
} set;}
//used to display opportunities and contacts w.r.t selected accounts
public void submit()
{
flag1=false;
acts=new list<Account>();
List<Boolean> acflagList = new List<Boolean>();
for(accountwrapper aw:actwrap)
{
if(aw.acflag){
acts.add(aw.acc);
acflagList.add(aw.acflag);
}
}
if(acflagList.isEmpty()) {
oppbox=false;
conbox=false;
flag2=false;
flag3=false;
oppError=false;
conError=false;
}
//if we select contact check box,then it displays contacts for selected accounts
if(conbox)
{
snts=[select id,lastName,Department,account.name from contact where accountid IN:acts];
if(snts.size()>0)
{
flag3=true;
conError=false;
}
else
{
for(accountwrapper aw : actwrap) {
if(aw.acflag) {
flag3=true;
conError = true;
}
//ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING,'contact records are not found for selected Accounts.'));
}
}
} else {
flag3 = false;
}
//if we select opportunity check box,then it displays opportunities for selected accounts
if(oppbox)
{
opts=[select id,name,stageName,leadsource,account.name from opportunity where accountId IN:acts];
if(opts.size() >0)
{
flag2=true;
oppError=false;
}
else
{
for(accountwrapper aw : actwrap) {
if(aw.acflag) {
flag2=true;
oppError = true;
}
//ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING,'opportunity records are not found for selected Accounts.'));
}
}
} else {
flag2 = false;
}
}
//it hides contacts and dispalys opportunitites on uncheck of contact check box
public void Hideandshowopp()
{
if(oppbox)
{
submit();
} else {
flag2 = false;
}
}
// it hides opportunities and dispalys contacts on uncheck of opportunities check box
public void HideandshowCon()
{
if(conbox)
{
submit();
} else {
flag3 = false;
}
}
public void Hideandshowoppcon() {
Hideandshowopp();
Hideandshowcon();
}
//This method uses a simple SOQL query to return a List of Accounts
public void getactwrap() {
string sortFullExp = sortExpression + ' ' + sortDirection;
accounts = Database.Query('SELECT id,Name,phone FROM Account order by ' + sortFullExp + ' LIMIT :blockSize OFFSET :index');
actwrap=new list<accountwrapper>();
// As each Account is processed we create a new accountwrapper object and add it to the wrapper class(accountwrapper) list.
for(account a:accounts)
{
actwrap.add(new accountwrapper(a));
}
}
// this method uses dml operation to edit the existing opportunities values or to insert new oppt values
public void saveopps()
{
list<opportunity> opps=new list<opportunity>();
opps.addAll(opts);
upsert opps;
}
//his method uses dml operation to edit the existing contact values or to insert new contact values
public void savecons()
{
cnts = new list<contact>();
cnts.addall(snts);
upsert cnts;
}
//This is wrapper class which is collection of other class instances
//here wrapper class contains both the standard salesforce object Account and a Boolean value acflag
public class accountwrapper{
public account acc{set;get;}
public boolean acflag{set;get;}
//In this contructor When we create a new accountwrapper object we pass a Account that is set to the acc property.
// We also set the boolean value to false
public accountwrapper(account a){
acc=a;
acflag=false;
}
}
}
please fix the above mentioned bugs.
this is vf page and previous is apex controller
===============================
<apex:page controller="Acc_con_Opp_Details" showHeader="false" docType="html-5.0">
<script>
function checkallflag(allCheckboxes) {
var container = allCheckboxes;
while (container.tagName != "TABLE") {
container = container.parentNode;
}
var inputs = container.getElementsByTagName("input");
var checked = allCheckboxes.checked;
for (var i = 0; i < inputs.length; i++) {
var input = inputs.item(i);
if (input.type == "checkbox") {
if (input != allCheckboxes) {
input.checked = checked;
}
}
}
CallSubmitMethod();
}
</script>
<apex:form >
<apex:actionFunction name="CallSubmitMethod" action="{!submit}"/>
<!--This block dispalying account record details-->
<apex:pageblock rendered="true">
<apex:pageMessages ></apex:pageMessages>
<apex:pageblocktable value="{!actwrap}" var="a">
<apex:column >
<apex:facet name="header">
<apex:inputCheckbox onclick="checkallflag(this)" value="{!checkallflag}"/>
</apex:facet>
<!--<apex:facet name="header">Select</apex:facet>-->
<apex:inputCheckbox value="{!a.acflag}">
<apex:actionSupport event="onchange" action="{!Hideandshowoppcon}"/>
</apex:inputCheckbox>
</apex:column>
<!-- displays id,name and phone number for accounts-->
<apex:column value="{!a.acc.id}"/>
<apex:column >
<apex:facet name="header">
<apex:commandLink action="{!getactwrap}" value="Name{!IF(sortExpression=='name',IF(sortDirection='ASC','▼','▲'),'▼')}">
<apex:param value="name" name="column" assignTo="{!sortExpression}"></apex:param>
</apex:commandLink>
</apex:facet>
<apex:outputLabel >{!a.acc.Name}</apex:outputLabel>
</apex:column>
<apex:column value="{!a.acc.phone}"/>
</apex:pageblocktable>
<!-- this buttons are used to paginate account records-->
<apex:pageblockButtons location="top">
<!--displays first five records-->
<apex:commandButton value="first" action="{!beginning}" disabled="{!prev}"/>
<!--displays previous records-->
<apex:commandButton value="previous" action="{!previous}" disabled="{!prev}"/>
<!--displays previous next records-->
<apex:commandButton value="next" action="{!next}" disabled="{!nxt}"/>
<!-- displays last records-->
<apex:commandButton value="last" action="{!end}" disabled="{!nxt}"/>
</apex:pageblockButtons>
<!-- check boxs for opportunities and contacts-->
<center> <apex:inputCheckbox value="{!oppbox}">
<apex:actionSupport event="onchange" action="{!Hideandshowopp}"/>
</apex:inputCheckbox>Opportunities
<apex:inputCheckbox value="{!conbox}">
<apex:actionSupport event="onchange" action="{!HideandshowCon}"/>
</apex:inputCheckbox>Contacts
<!-- <apex:commandButton value="submit" action="{!submit}"/>-->
</center>
</apex:pageblock>
<!--this block displays opportunity details-->
<apex:pageblock rendered="{!flag2}">
<apex:pageblocktable value="{!opts}" var="o">
<apex:column >
<apex:facet name="header">Opportunity Id</apex:facet>
<apex:commandlink value="{!o.id}" Action="{!URLFOR($Action.opportunity.edit,o.Id)}"/>
</apex:column>
<apex:column value="{!o.account.name}" />
<apex:column >
<apex:facet name="header">Opportunity Name</apex:facet>
<apex:inputtext value="{!o.name}" />
</apex:column>
<apex:column >
<apex:facet name="header">Opportunity Stage</apex:facet>
<apex:inputtext value="{!o.stagename}"/>
</apex:column>
<apex:column >
<apex:facet name="header">Opportunity Leadsource</apex:facet>
</apex:column>
</apex:pageblocktable>
<apex:pageMessage rendered="{!oppError}" severity="error" strength="1" summary="No Opportunites Found" />
<apex:commandButton value="Save Opportunities" action="{!saveopps}"/>
</apex:pageblock>
<!--this block is used for displaying contact details -->
<apex:pageblock rendered="{!flag3}">
<apex:pageblocktable value="{!snts}" var="c">
<apex:column >
<apex:facet name="header">Contact Id</apex:facet>
<apex:commandlink value="{!c}" Action="{!URLFOR($Action.contact.edit,c)}"/>
</apex:column>
<apex:column value="{!c.account.name}"/>
<apex:column >
<apex:facet name="header">Contact Lastname</apex:facet>
<apex:inputtext value="{!c.lastname}"/>
</apex:column>
<apex:column >
<apex:facet name="header">Contact Department</apex:facet>
<apex:inputtext value="{!c.Department}"/>
</apex:column>
</apex:pageblocktable>
<apex:pageMessage rendered="{!conError}" severity="error" strength="1" summary="No Contacts Found" />
<apex:commandButton value="Save Contacts" action="{!savecons}"/>
</apex:pageblock>
</apex:form>
</apex:page>
I am waiting for your reply,please help me.
1.)After selecting the check boxs of account records and the check boxs of opportunities/contcts,If we uncheck all the account records completely, automatically checkboxs of contacts and opportunities should be unchecked.
please achieve it.
Thanks for quick reply,please ignore above issue,i have achieved it and also blinking screen issue also solved by using <apex:outputpanel> componenet.If any more things are required I will let you know.Thanks for support.
please help me to achieve following enchancements in above code
1.)Display all alphabets with command links on the account's table and upon click on any of the letter,account table should display account's records starting with the selected letter.
2.)If no account's records is selected and user clicks on opportunities/contacts check boxs then it should show error message that 'Choose atleast one account record to display opportunities' error message.Same is the case with contacts also.
3.)If no opportunities/contacts records are found for the selected account records, it should not display save opportunities/contacts button.
In above screen shot,you can observe that no opportunities are are found for selected accounts and it was displaying save opportunities button under opportunities table.we need to avoid that save opportunities button,if no opportunities are found for selected accounts.
please help me to achieve above mentioned functionalities in above code.
I am waititng for your response,Please help me.
I am waiting for your reply,Please help me by solving above issues.Greatly appreciate yourn help.
I have achieved filtering account records by using alphabetical order successfully.Please help me to solve, following bugs in below code,
1.)With Out Selecting chek boxs of account's record's, if user clicks on opportunities/contacts check boxs then it should show error message that 'Choose atleast one account record to display opportunities' error message.Same is the case with contacts also.
2.)If no opportunities/contacts records are found for the selected account records, it should not display save opportunities/contacts button.
In above screen shot,you can observe that no opportunities are are found for selected accounts and it was displaying save opportunities button under opportunities table.we need to avoid that save opportunities button,if no opportunities are found for selected accounts.
3.)Upon clicking on next button , column widths(positions) are not consistent.
Apex Controller
===========
public class Acc_con_Opp_Details
{
//list of collection of the wrapper class object
public list<accountwrapper> actwrap {set;get;}
//list of collection of Account,contact and opportunity objects
public list<Account> accounts {set;get;}
public list<Account> acts {set;get;}
public list<opportunity> opts {set;get;}
public list<opportunity> sopts {set;get;}
public list<contact> cnts {set;get;}
public list<contact> snts {set;get;}
public boolean oppbox {set;get;}//used as check box for opportunity
public boolean conbox {set;get;}//used as check box for contact
public boolean flag1 {set;get;}//used in account page block
public boolean flag2 {set;get;}//used in contact page block
public boolean flag3 {set;get;}//used in opportunity page block
public boolean checkallflag {set;get;}//used for header check box
public Boolean oppError {set;get;}//used to display opportunity error
public Boolean conError {set;get;}//used to display contacts error
public list<String> AlphaList {get; set;}//collection of alphabets
public String AlphaFilter {get; set;}//used to filter alphabets
private String Query;
//this variables are used for pagination purpose
private integer totalRecs = 0;//stores no.of total records
private integer index = 0;//used for tracking offset
private integer blockSize =5;//for setting size of page
private String sortDirection = 'ASC';
private String sortExp = 'Name';
public Map<String, String> mapAlpha{get; set;}
//in this constructor we are setting values to boolean variables
public Acc_con_Opp_Details()
{
flag1=true;
flag2=false;
flag3=false;
oppError=false;
conError=false;
checkallflag = false;
totalRecs = [select count() from Account];//returns total no.of account records
getactwrap();//calling getactwrap method.
AlphaList = new list<String> {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'Other', 'All'};
if (apexpages.currentpage().getparameters().get('alpha') == null) {
AlphaFilter = 'All';
} else {
AlphaFilter = apexpages.currentpage().getparameters().get('alpha');
}
}
public String sortExpression
{
get
{
return sortExp;
}
set
{
//if the column is clicked on then switch between Ascending and Descending modes
if (value == sortExp)
sortDirection = (sortDirection == 'ASC')? 'DESC' : 'ASC';
else
sortDirection = 'ASC';
sortExp = value;
}
}
public String getSortDirection()
{
//if not column is selected
if (sortExpression == null || sortExpression == '')
return 'ASC';
else
return sortDirection;
}
public void setSortDirection(String value)
{
sortDirection = value;
}
//this method displays first five records
public void beginning()
{
flag2 = false;
flag3 = false;
oppbox=false;
conbox=false;
checkallflag=false;
index = 0;
getactwrap();
}
//this method displays prevoius records
public void previous()
{
flag2 = false;
flag3 = false;
oppbox=false;
conbox=false;
checkallflag=false;
index = index-blockSize;
getactwrap();
}
//this method displays next records
public void next()
{
flag2 = false;
flag3 = false;
oppbox=false;
conbox=false;
checkallflag=false;
index = index+blockSize;
getactwrap();
}
//this method displays last remaining records
public void end()
{
flag2 = false;
flag3 = false;
oppbox=false;
conbox=false;
checkallflag=false;
index = totalrecs - math.mod(totalRecs,blockSize);
getactwrap();
}
//this variable is used to enable or disable first and previous buttons
public boolean prev{get
{
if(index == 0)
return true;
else
return false;
} set;}
//this variable is used to enable or disable next and last buttons
public boolean nxt{get
{
if((index + blockSize) > totalRecs)
return true;
else
return false;
} set;}
//used to display opportunities and contacts w.r.t selected accounts
public void submit()
{
flag1=false;
acts=new list<Account>();
List<Boolean> acflagList = new List<Boolean>();
for(accountwrapper aw:actwrap)
{
if(aw.acflag){
acts.add(aw.acc);
acflagList.add(aw.acflag);
}
}
if(acflagList.isEmpty()) {
oppbox=false;
conbox=false;
flag2=false;
flag3=false;
oppError=false;
conError=false;
}
//if we select contact check box,then it displays contacts for selected accounts
if(conbox)
{
snts=[select id,lastName,Department,account.name from contact where accountid IN:acts];
if(snts.size()>0)
{
flag3=true;
conError=false;
}
else
{
for(accountwrapper aw : actwrap) {
if(aw.acflag) {
flag3=true;
conError = true;
}
//ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING,'contact records are not found for selected Accounts.'));
}
}
} else {
flag3 = false;
}
//if we select opportunity check box,then it displays opportunities for selected accounts
if(oppbox)
{
opts=[select id,name,stageName,leadsource,account.name from opportunity where accountId IN:acts];
if(opts.size() >0)
{
flag2=true;
oppError=false;
}
else
{
for(accountwrapper aw : actwrap) {
if(aw.acflag) {
flag2=true;
oppError = true;
}
//ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING,'opportunity records are not found for selected Accounts.'));
}
}
} else {
flag2 = false;
}
}
//it hides contacts and dispalys opportunitites on uncheck of contact check box
//This method uses a simple SOQL query to return a List of Accounts
public void getactwrap() {
String QueryIf = '';
string sortFullExp = sortExpression + ' ' + sortDirection;
if (AlphaFilter == null || AlphaFilter.trim().length() == 0) {
AlphaFilter = 'All';
}
Query = 'SELECT Id, Name, phone ' + ' FROM Account';
if (AlphaFilter == 'Other') {
QueryIf = QueryFor(QueryIf, '(' + 'Name' + ' < \'A\' OR ' +
'Name' + ' > \'Z\') AND (NOT ' +
'Name' + ' LIKE \'Z%\') ');
} else if (AlphaFilter != 'All') {
QueryIf = QueryFor(QueryIf, '(' + 'Name' + ' LIKE \'' + String.escapeSingleQuotes(AlphaFilter) + '%\')' );
}
Query += QueryIf;
Query += ' ORDER BY ' + sortFullExp + ' LIMIT : blockSize OFFSET : index';
accounts = Database.Query(Query);
actwrap=new list<accountwrapper>();
// As each Account is processed we create a new accountwrapper object and add it to the wrapper class(accountwrapper) list.
for(account a:accounts)
{
actwrap.add(new accountwrapper(a));
}
flag2=false;
flag3=false;
oppbox=false;
conbox=false;
checkallflag=false;
}
public String QueryFor(String Q, String C) {
if (Q == '') {
return ' WHERE ' + C;
} else {
return Q + ' AND ' + C;
}
}
public void Hideandshowopp()
{
if(oppbox)
{
submit();
} else {
flag2 = false;
}
}
// it hides opportunities and dispalys contacts on uncheck of opportunities check box
public void HideandshowCon()
{
if(conbox)
{
submit();
} else {
flag3 = false;
}
}
public void Hideandshowoppcon() {
Hideandshowopp();
Hideandshowcon();
}
// this method uses dml operation to edit the existing opportunities values or to insert new oppt values
public void saveopps()
{
list<opportunity> opps=new list<opportunity>();
opps.addAll(opts);
upsert opps;
}
//his method uses dml operation to edit the existing contact values or to insert new contact values
public void savecons()
{
cnts = new list<contact>();
cnts.addall(snts);
upsert cnts;
}
//This is wrapper class which is collection of other class instances
//here wrapper class contains both the standard salesforce object Account and a Boolean value acflag
public class accountwrapper{
public account acc{set;get;}
public boolean acflag{set;get;}
//In this contructor When we create a new accountwrapper object we pass a Account that is set to the acc property.
// We also set the boolean value to false
public accountwrapper(account a){
acc=a;
acflag=false;
}
}
}
NOTE:-YOU CAN FIND VF PAGE IN BELOW POST
vf page
=====
<apex:page controller="Acc_con_Opp_Details" showHeader="false" docType="html-5.0">
<style type="text/css">
a.alpha-select
{
font-weight: bold;
text-decoration: none;
background-color: #C6E1FF;
color: #000000 !important;
}
</style>
<script>
function checkallflag(allCheckboxes) {
var container = allCheckboxes;
while (container.tagName != "TABLE") {
container = container.parentNode;
}
var inputs = container.getElementsByTagName("input");
var checked = allCheckboxes.checked;
for (var i = 0; i < inputs.length; i++) {
var input = inputs.item(i);
if (input.type == "checkbox") {
if (input != allCheckboxes) {
input.checked = checked;
}
}
}
CallSubmitMethod();
}
</script>
<apex:form >
<apex:actionFunction name="CallSubmitMethod" action="{!submit}"/>
<!--This block dispalying account record details-->
<apex:outputPanel id="par">
<apex:pageblock id="par1" rendered="true">
<apex:repeat value="{!AlphaList}" var="a">
<apex:commandLink value="{!a}" action="{!getactwrap}" rerender="par1" styleClass="alpha-link{!if(AlphaFilter=a,' alpha-select','')}">
<apex:param name="AlphaFilter" value="{!a}" assignTo="{!AlphaFilter}" />
<!--<apex:actionSupport event="onchange" action="{!Reset}"/>-->
</apex:commandLink>
<apex:outputText > | </apex:outputText>
</apex:repeat>
<apex:pageMessages ></apex:pageMessages>
<apex:pageblocktable value="{!actwrap}" var="a">
<apex:column >
<apex:facet name="header">
<apex:inputCheckbox onclick="checkallflag(this)" value="{!checkallflag}"/>
</apex:facet>
<!--<apex:facet name="header">Select</apex:facet>-->
<apex:inputCheckbox value="{!a.acflag}">
<apex:actionSupport event="onchange" action="{!Hideandshowoppcon}" reRender="par"/>
</apex:inputCheckbox>
</apex:column>
<!-- displays id,name and phone number for accounts-->
<apex:column value="{!a.acc.id}"/>
<apex:column >
<apex:facet name="header">
<apex:commandLink action="{!getactwrap}" value="Name{!IF(sortExpression=='name',IF(sortDirection='ASC','▼','▲'),'▼')}">
<apex:param value="name" name="column" assignTo="{!sortExpression}"></apex:param>
</apex:commandLink>
</apex:facet>
<apex:outputLabel >{!a.acc.Name}</apex:outputLabel>
</apex:column>
<apex:column value="{!a.acc.phone}"/>
</apex:pageblocktable>
<!-- this buttons are used to paginate account records-->
<apex:pageblockButtons location="top">
<!--displays first five records-->
<apex:commandButton value="first" action="{!beginning}" disabled="{!prev}"/>
<!--displays previous records-->
<apex:commandButton value="previous" action="{!previous}" disabled="{!prev}"/>
<!--displays previous next records-->
<apex:commandButton value="next" action="{!next}" disabled="{!nxt}"/>
<!-- displays last records-->
<apex:commandButton value="last" action="{!end}" disabled="{!nxt}"/>
</apex:pageblockButtons>
<!-- check boxs for opportunities and contacts-->
<center> <apex:inputCheckbox value="{!oppbox}">
<apex:actionSupport event="onchange" action="{!Hideandshowopp}"/>
</apex:inputCheckbox>Opportunities
<apex:inputCheckbox value="{!conbox}">
<apex:actionSupport event="onchange" action="{!HideandshowCon}"/>
</apex:inputCheckbox>Contacts
<!-- <apex:commandButton value="submit" action="{!submit}"/>-->
</center>
</apex:pageblock>
<!--this block displays opportunity details-->
<apex:pageblock rendered="{!flag2}">
<apex:pageblocktable value="{!opts}" var="o">
<apex:column >
<apex:facet name="header">Opportunity Id</apex:facet>
<apex:commandlink value="{!o.id}" Action="{!URLFOR($Action.opportunity.edit,o.Id)}"/>
</apex:column>
<apex:column value="{!o.account.name}" />
<apex:column >
<apex:facet name="header">Opportunity Name</apex:facet>
<apex:inputtext value="{!o.name}" />
</apex:column>
<apex:column >
<apex:facet name="header">Opportunity Stage</apex:facet>
<apex:inputtext value="{!o.stagename}"/>
</apex:column>
<apex:column >
<apex:facet name="header">Opportunity Leadsource</apex:facet>
</apex:column>
</apex:pageblocktable>
<apex:pageMessage rendered="{!oppError}" severity="error" strength="1" summary="No Opportunites Found" />
<apex:commandButton value="Save Opportunities" action="{!saveopps}"/>
</apex:pageblock>
<!--this block is used for displaying contact details -->
<apex:pageblock rendered="{!flag3}">
<apex:pageblocktable value="{!snts}" var="c">
<apex:column >
<apex:facet name="header">Contact Id</apex:facet>
<apex:commandlink value="{!c}" Action="{!URLFOR($Action.contact.edit,c)}"/>
</apex:column>
<apex:column value="{!c.account.name}" />
<apex:column >
<apex:facet name="header">Contact Lastname</apex:facet>
<apex:inputtext value="{!c.lastname}"/>
</apex:column>
<apex:column >
<apex:facet name="header">Contact Department</apex:facet>
<apex:inputtext value="{!c.Department}"/>
</apex:column>
</apex:pageblocktable>
<apex:pageMessage rendered="{!conError}" severity="error" strength="1" summary="No Contacts Found" />
<apex:commandButton value="Save Contacts" action="{!savecons}" />
</apex:pageblock>
</apex:outputPanel>
</apex:form>
</apex:page>
I am waiting for your response,Kindly please help me.
1.)I have solved 2nd and 3rd bugs successfully.Only 1st bug need to be solved.Please help to solve first bug.Waiting for your reply.
2.)And Why I am Unable see you replies for previous posts.Did you remove them?If you remove them why so??
Kindly please help to achieve following enhancements in below code
1.)If there are no accounts for a particular alphabet then it should show empty account table with "No Accounts Found" message and also first,prev,next,last buttons should be disabled as there are no records.
2.)Also put a text box component above the table and upon entering 3 or more letters then the corresponding accounts which contains the word should display. If user enters 1 or 2 letters then show error like please enter minimum 3 letters to search. If nothing is entered then no error should be displayed
Apex controller
===========
public class Acc_con_Opp_Details
{
//list of collection of the wrapper class object
public list<accountwrapper> actwrap {set;get;}
//list of collection of Account,contact and opportunity objects
public list<Account> accounts {set;get;}
public list<Account> acts {set;get;}
public list<opportunity> opts {set;get;}
public list<opportunity> sopts {set;get;}
public list<contact> cnts {set;get;}
public list<contact> snts {set;get;}
public string searchstring {get;set;}//used in searching account records
public boolean oppbox {set;get;}//used as check box for opportunity
public boolean conbox {set;get;}//used as check box for contact
public boolean flag1 {set;get;}//used in account page block
public boolean flag2 {set;get;}//used in contact page block
public boolean flag3 {set;get;}//used in opportunity page block
public boolean checkallflag {set;get;}//used for header check box
public Boolean oppError {set;get;}//used to display opportunity error
public Boolean conError {set;get;}//used to display contacts error
public Boolean oppboxError {set;get;}//used to dispaly opportunity error
public Boolean conboxError {set;get;}//used to display contacts error
public list<String> AlphaList {get; set;}//collection of alphabets
public String AlphaFilter {get; set;}//used to filter alphabets
private String Query;
//this variables are used for pagination purpose
private integer totalRecs = 0;//stores no.of total records
private integer index = 0;//used for tracking offset
private integer blockSize =5;//for setting size of page
private String sortDirection = 'ASC';
private String sortExp = 'Name';
public Map<String, String> mapAlpha{get; set;}
//in this constructor we are setting values to boolean variables
public Acc_con_Opp_Details()
{
flag1=true;
flag2=false;
flag3=false;
oppError=false;
conError=false;
oppboxError=false;
conboxError=false;
checkallflag = false;
totalRecs = [select count() from Account];//returns total no.of account records
getactwrap();//calling getactwrap method.
AlphaList = new list<String> {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'Other', 'All'};
if (apexpages.currentpage().getparameters().get('alpha') == null) {
AlphaFilter = 'All';
} else {
AlphaFilter = apexpages.currentpage().getparameters().get('alpha');
}
}
public String sortExpression
{
get
{
return sortExp;
}
set
{
//if the column is clicked on then switch between Ascending and Descending modes
if (value == sortExp)
sortDirection = (sortDirection == 'ASC')? 'DESC' : 'ASC';
else
sortDirection = 'ASC';
sortExp = value;
}
}
public String getSortDirection()
{
//if not column is selected
if (sortExpression == null || sortExpression == '')
return 'ASC';
else
return sortDirection;
}
public void setSortDirection(String value)
{
sortDirection = value;
}
//this method displays first five records
public void beginning()
{
flag2 = false;
flag3 = false;
oppbox=false;
conbox=false;
conboxError=false;
oppboxError=false;
checkallflag=false;
index = 0;
getactwrap();
}
//this method displays prevoius records
public void previous()
{
flag2 = false;
flag3 = false;
oppbox=false;
conbox=false;
conboxError=false;
oppboxError=false;
checkallflag=false;
index = index-blockSize;
getactwrap();
}
//this method displays next records
public void next()
{
flag2 = false;
flag3 = false;
oppbox=false;
conbox=false;
conboxError=false;
oppboxError=false;
checkallflag=false;
index = index+blockSize;
getactwrap();
}
//this method displays last remaining records
public void end()
{
flag2 = false;
flag3 = false;
oppbox=false;
conbox=false;
conboxError=false;
oppboxError=false;
checkallflag=false;
index = totalrecs - math.mod(totalRecs,blockSize);
getactwrap();
}
//this variable is used to enable or disable first and previous buttons
public boolean prev{get
{
if(index == 0)
return true;
else
return false;
} set;}
//this variable is used to enable or disable next and last buttons
public boolean nxt{get
{
if((index + blockSize) > totalRecs)
return true;
else
return false;
} set;}
//used to display opportunities and contacts w.r.t selected accounts
public void submit()
{
acts=new list<Account>();
List<Boolean> acflagList = new List<Boolean>();
for(accountwrapper aw:actwrap)
{
if(aw.acflag){
acts.add(aw.acc);
acflagList.add(aw.acflag);
}
}
if(acflagList.isEmpty()) {
if(oppbox)
oppboxError=true;
if(conbox)
conboxError=true;
flag2=false;
flag3=false;
oppError=false;
conError=false;
}
else
{
oppboxError=false;
conboxError=false;
}
//if we select contact check box,then it displays contacts for selected accounts
if(conbox)
{
snts=[select id,lastName,Department,account.name from contact where accountid IN:acts];
if(snts.size()>0)
{
flag3=true;
conError=false;
}
else
{
for(accountwrapper aw : actwrap) {
if(aw.acflag) {
flag3=true;
conError = true;
}
//ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING,'contact records are not found for selected Accounts.'));
}
}
} else {
flag3 = false;
}
//if we select opportunity check box,then it displays opportunities for selected accounts
if(oppbox)
{
opts=[select id,name,stageName,leadsource,account.name from opportunity where accountId IN:acts];
if(opts.size() >0)
{
flag2=true;
oppError=false;
}
else
{
for(accountwrapper aw : actwrap) {
if(aw.acflag) {
flag2=true;
oppError = true;
}
//ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING,'opportunity records are not found for selected Accounts.'));
}
}
} else {
flag2 = false;
}
}
//it hides contacts and dispalys opportunitites on uncheck of contact check box
//This method uses a simple SOQL query to return a List of Accounts
public void getactwrap() {
String QueryIf = '';
string sortFullExp = sortExpression + ' ' + sortDirection;
if (AlphaFilter == null || AlphaFilter.trim().length() == 0) {
AlphaFilter = 'All';
}
Query = 'SELECT Id, Name, phone ' + ' FROM Account';
if (AlphaFilter == 'Other') {
QueryIf = QueryFor(QueryIf, '(' + 'Name' + ' < \'A\' OR ' +
'Name' + ' > \'Z\') AND (NOT ' +
'Name' + ' LIKE \'Z%\') ');
} else if (AlphaFilter != 'All') {
QueryIf = QueryFor(QueryIf, '(' + 'Name' + ' LIKE \'' + String.escapeSingleQuotes(AlphaFilter) + '%\')' );
}
Query += QueryIf;
Query += ' ORDER BY ' + sortFullExp + ' LIMIT : blockSize OFFSET : index';
accounts = Database.Query(Query);
actwrap=new list<accountwrapper>();
// As each Account is processed we create a new accountwrapper object and add it to the wrapper class(accountwrapper) list.
for(account a:accounts)
{
actwrap.add(new accountwrapper(a));
}
flag2=false;
flag3=false;
oppbox=false;
conbox=false;
conboxError=false;
oppboxError=false;
checkallflag=false;
}
public String QueryFor(String Q, String C) {
if (Q == '') {
return ' WHERE ' + C;
} else {
return Q + ' AND ' + C;
}
}
public void Hideandshowopp()
{
if(oppbox)
{
submit();
} else {
flag2 = false;
oppboxError=false;
}
}
// it hides opportunities and dispalys contacts on uncheck of opportunities check box
public void HideandshowCon()
{
if(conbox)
{
submit();
} else {
flag3 = false;
conboxError=false;
}
}
public void Hideandshowoppcon() {
Hideandshowopp();
Hideandshowcon();
}
// this method uses dml operation to edit the existing opportunities values or to insert new oppt values
public void saveopps()
{
list<opportunity> opps=new list<opportunity>();
opps.addAll(opts);
upsert opps;
}
//his method uses dml operation to edit the existing contact values or to insert new contact values
public void savecons()
{
cnts = new list<contact>();
cnts.addall(snts);
upsert cnts;
}
//used for searching account records dynamically
public void search(){
string searchquery='select name,id from account where name like \'%'+searchstring+'%\' Limit 20';
accounts= Database.query(searchquery);
}
//This is wrapper class which is collection of other class instances
//here wrapper class contains both the standard salesforce object Account and a Boolean value acflag
public class accountwrapper{
public account acc{set;get;}
public boolean acflag{set;get;}
//In this contructor When we create a new accountwrapper object we pass a Account that is set to the acc property.
// We also set the boolean value to false
public accountwrapper(account a){
acc=a;
acflag=false;
}
}
}
NOTE:YOU CAN FIND VF PAGE IN BELOW POST
VF PAGE
=======
<apex:page controller="Acc_con_Opp_Details" showHeader="false" docType="html-5.0">
<style type="text/css">
a.alpha-select
{
font-weight: bold;
text-decoration: none;
background-color: #C6E1FF;
color: #000000 !important;
}
</style>
<script>
function checkallflag(allCheckboxes)
{
var container = allCheckboxes;
while (container.tagName != "TABLE") {
container = container.parentNode;
}
var inputs = container.getElementsByTagName("input");
var checked = allCheckboxes.checked;
for (var i = 0; i < inputs.length; i++) {
var input = inputs.item(i);
if (input.type == "checkbox") {
if (input != allCheckboxes) {
input.checked = checked;
}
}
}
CallSubmitMethod();
}
</script>
<apex:form >
<apex:actionFunction name="CallSubmitMethod" action="{!submit}"/>
<!--This block dispalying account record details-->
<apex:outputPanel id="par">
<apex:pageblock id="par1" rendered="true">
enter:<apex:inputText value="{!searchstring}"/>
<apex:commandButton value="Search records" action="{!search}"/>
<br/><br/> <apex:repeat value="{!AlphaList}" var="a">
<apex:commandLink value="{!a}" action="{!getactwrap}" rerender="par1" styleClass="alpha-link{!if(AlphaFilter=a,' alpha-select','')}">
<apex:param name="AlphaFilter" value="{!a}" assignTo="{!AlphaFilter}" />
<!--<apex:actionSupport event="onchange" action="{!Reset}"/>-->
</apex:commandLink>
<apex:outputText > | </apex:outputText>
</apex:repeat>
<apex:pageMessages ></apex:pageMessages>
<apex:pageblocktable value="{!actwrap}" var="a">
<apex:column >
<apex:facet name="header">
<apex:inputCheckbox onclick="checkallflag(this)" value="{!checkallflag}"/>
</apex:facet>
<!--<apex:facet name="header">Select</apex:facet>-->
<apex:inputCheckbox value="{!a.acflag}">
<apex:actionSupport event="onchange" action="{!Hideandshowoppcon}" reRender="par"/>
</apex:inputCheckbox>
</apex:column>
<!-- displays id,name and phone number for accounts-->
<apex:column value="{!a.acc.id}" width="30%"/>
<apex:column width="50%">
<apex:facet name="header">
<apex:commandLink action="{!getactwrap}" value="Name{!IF(sortExpression=='name',IF(sortDirection='ASC','▼','▲'),'▼')}">
<apex:param value="name" name="column" assignTo="{!sortExpression}"></apex:param>
</apex:commandLink>
</apex:facet>
<apex:outputLabel >{!a.acc.Name}</apex:outputLabel>
</apex:column>
<apex:column value="{!a.acc.phone}" width="50%"/>
</apex:pageblocktable>
<!-- this buttons are used to paginate account records-->
<apex:pageblockButtons location="top">
<!--displays first five records-->
<apex:commandButton value="first" action="{!beginning}" disabled="{!prev}" style="height:22px;width:57px;"/>
<!--displays previous records-->
<apex:commandButton value="previous" action="{!previous}" disabled="{!prev}" style="height:22px;width:57px;"/>
<!--displays previous next records-->
<apex:commandButton value="next" action="{!next}" disabled="{!nxt}" style="height:22px;width:57px;"/>
<!-- displays last records-->
<apex:commandButton value="last" action="{!end}" disabled="{!nxt}" style="height:23px;width:57px;"/>
</apex:pageblockButtons>
<!-- check boxs for opportunities and contacts-->
<center> <apex:inputCheckbox value="{!oppbox}">
<apex:actionSupport event="onchange" action="{!Hideandshowopp}"/>
</apex:inputCheckbox>Opportunities
<apex:inputCheckbox value="{!conbox}">
<apex:actionSupport event="onchange" action="{!HideandshowCon}"/>
</apex:inputCheckbox>Contacts
<!-- <apex:commandButton value="submit" action="{!submit}"/>-->
</center>
<apex:pageMessage rendered="{!oppboxError}" severity="error" strength="1" summary="Choose atleast one account record to display opportunities" />
<apex:pageMessage rendered="{!conboxError}" severity="error" strength="1" summary="Choose atleast one account record to display contacts" />
</apex:pageblock>
<!--this block displays opportunity details-->
<apex:pageblock rendered="{!flag2}">
<apex:pageblocktable value="{!opts}" var="o">
<apex:column >
<apex:facet name="header">Opportunity Id</apex:facet>
<apex:commandlink value="{!o.id}" Action="{!URLFOR($Action.opportunity.edit,o.Id)}"/>
</apex:column>
<apex:column value="{!o.account.name}" />
<apex:column >
<apex:facet name="header">Opportunity Name</apex:facet>
<apex:inputtext value="{!o.name}" />
</apex:column>
<apex:column >
<apex:facet name="header">Opportunity Stage</apex:facet>
<apex:inputtext value="{!o.stagename}"/>
</apex:column>
<apex:column >
<apex:facet name="header">Opportunity Leadsource</apex:facet>
</apex:column>
</apex:pageblocktable>
<apex:pageMessage rendered="{!oppError}" severity="error" strength="1" summary="No Opportunites Found" />
<apex:commandButton value="Save Opportunities" action="{!saveopps}" rendered="{!opts.size !=0}"/>
</apex:pageblock>
<!--this block is used for displaying contact details -->
<apex:pageblock rendered="{!flag3}">
<apex:pageblocktable value="{!snts}" var="c">
<apex:column >
<apex:facet name="header">Contact Id</apex:facet>
<apex:commandlink value="{!c}" Action="{!URLFOR($Action.contact.edit,c)}"/>
</apex:column>
<apex:column value="{!c.account.name}" />
<apex:column >
<apex:facet name="header">Contact Lastname</apex:facet>
<apex:inputtext value="{!c.lastname}"/>
</apex:column>
<apex:column >
<apex:facet name="header">Contact Department</apex:facet>
<apex:inputtext value="{!c.Department}"/>
</apex:column>
</apex:pageblocktable>
<apex:pageMessage rendered="{!conError}" severity="error" strength="1" summary="No Contacts Found" />
<apex:commandButton value="Save Contacts" action="{!savecons}" rendered="{!snts.size !=0}"/>
</apex:pageblock>
</apex:outputPanel>
</apex:form>
</apex:page>
I am waiting for your reply,Please help me.
Please help me.I am waiting for your reply.