You need to sign in to do that
Don't have an account?
Eric_Santiago
Frustration with apex:messages
http://community.salesforce.com/sforce/board/message?board.id=Visualforce&message.id=2452
http://www.salesforce.com/us/developer/docs/pages/Content/pages_controller_validation.htm
http://community.salesforce.com/sforce/board/message?board.id=Visualforce&thread.id=2298
http://www.salesforce.com/us/developer/docs/pages/Content/apex_pages_message.htm
OK. I've read all of the above thoroughly and I'm still having trouble kicking back a custom error message to a visualforce page using apex:messages. Any suggestions would be appreciated greatly.
I'm testing a stituation where I know I get a QueryException error (without the catch I get "System.QueryException: List has no rows for assignment to SObject"). I've tried variations with catch(Exception e) and Apex.Messages(e) and ApexPages.addmessage(e.getMessage()); but nothing works. Any suggestions?
Message Edited by Eric_Santiago on 07-09-2008 11:59 PM
Message Edited by Eric_Santiago on 07-10-2008 12:15 AM
http://www.salesforce.com/us/developer/docs/pages/Content/pages_controller_validation.htm
http://community.salesforce.com/sforce/board/message?board.id=Visualforce&thread.id=2298
http://www.salesforce.com/us/developer/docs/pages/Content/apex_pages_message.htm
OK. I've read all of the above thoroughly and I'm still having trouble kicking back a custom error message to a visualforce page using apex:messages. Any suggestions would be appreciated greatly.
Code:
public class dashboardController { public Employee__c getEmployee() { return [select id, kiosk__r.name, kiosk__c from Employee__c where user_name__c = :UserInfo.getUserId() Limit 1]; } public Rep_Quota__c getRepQuota() { try {
Rep_Quota__c repquota = [select id, Perf_Day__c, Perf_Week__c, Perf_Month__c from Rep_Quota__c Where Quota_Start_Date__c = THIS_MONTH and Employee__c = :getEmployee().id Limit 1];
return repquota;
} catch (QueryException e) {
ApexPages.Message msg= new ApexPages.Message(ApexPages.Severity.ERROR, 'No Rep Quota record found for current month!', 'No Rep Quota record found for current month!');
ApexPages.addmessage(msg);
return null; } } } <apex:page controller="dashboardController"> <apex:sectionHeader title="Rep Dashboard"></apex:sectionHeader> <apex:pageMessages/> <apex:pageBlock title="{!$User.FirstName} {!$User.LastName}" mode="view"> <apex:image id="user_graph1" value="http://chart.apis.google.com/chart—chs=300x200&cht=gom&chd=t:{!RepQuota.Perf_Day__c}&chl={!RepQuota.Perf_Day__c}&chds=0,200&chf=bg,s,EFEFEF&chtt=Yesterday"/> <apex:image id="user_graph2" value="http://chart.apis.google.com/chart–chs=300x200&cht=gom&chd=t:{!RepQuota.Perf_Week__c}&chl={!RepQuota.Perf_Week__c}&chds=0,200&chf=bg,s,EFEFEF&chtt=This Week"/> <apex:image id="user_graph3" value="http://chart.apis.google.com/chart˜chs=300x200&cht=gom&chd=t:{!RepQuota.Perf_Month__c}&chl={!RepQuota.Perf_Month__c}&chds=0,200&chf=bg,s,EFEFEF&chtt=This Month"/> <hr width="90%"/> <div align="center" style = "font-size:12pt;"><b>Quota Performance</b></div> </apex:pageBlock> </apex:page>
I'm testing a stituation where I know I get a QueryException error (without the catch I get "System.QueryException: List has no rows for assignment to SObject"). I've tried variations with catch(Exception e) and Apex.Messages(e) and ApexPages.addmessage(e.getMessage()); but nothing works. Any suggestions?
Message Edited by Eric_Santiago on 07-09-2008 11:59 PM
Message Edited by Eric_Santiago on 07-10-2008 12:15 AM
So to my controller I added
and to my page I added an action to the page tag;
Now it shows the error at the top of the page when it loads. Perfect.
I figured it out. There needed to be an action on the page to call the function. I thought the {!RepQuota.Perf_Day__c} would call the function and throw the expection message, but that wasn't the case.
Just want to correct this statement a little. {!RepQuota.Perf_Day__c} does call the function and throw the exception message. However by the time you've done this, your messages component has already been rendered, so you're not going to actually see the error even though it's there. You need to actually rerender either your whole page or that part of the page to get the message to show up, which is why you need some sort of action to be performed.
Your solution to use the action on the page component looks like a pretty good one for what you are trying to do. Your action returns null so the page refreshes, and there's your error.
One suggestion however. You have a lot of references to getRepQuota() in your page (and now one in your controller). This means every time you load your page, you're going to be calling getRepQuota 7 times, meaning you're making the same query 7 times. You should store off the value so you only have to do it once.
This is generally a good idea for all of the queries you're making in your getters. No sense in running them more than once if your criteria is not going to change.