You need to sign in to do that
Don't have an account?
Visualforce Save Command Button Redirect
I'm drawing a blank on how to use the standard {!Save} function in my visualforce on the command button. Basically after I click Save I want to redirect the page into a new page.
Here is my VF page code
<apex:page standardController="Lead" recordSetVar="leads" id="thePage" showHeader="true" sidebar="false" extensions="extContactApprovalPage" >
<apex:form >
<apex:pageBlock >
<apex:pageBlockTable value="{!leads}" var="l">
<apex:column >
<apex:outputField value="{!l.Name}"/>
<apex:facet name="header">Registrant Name</apex:facet>
</apex:column>
<apex:column >
<apex:outputField value="{!l.Approve_Picklist__c}"/>
<apex:facet name="header">Approve Picklist</apex:facet>
</apex:column>
<apex:column >
<apex:outputField value="{!l.Approve_Checkbox__c}"/>
<apex:facet name="header">Approve Checkbox</apex:facet>
</apex:column>
<apex:inlineEditSupport event="onClick" showOnEdit="saveButton, cancelButton"/>
</apex:pageBlockTable>
<apex:pageBlockButtons >
<!--<apex:commandButton value="Edit" action="{!save}" id="editButton" />-->
<apex:commandButton value="Save" action="{!save}" id="saveButton" reRender="none" />
<apex:commandButton value="Cancel" action="{!cancel}" id="cancelButton" />
</apex:pageBlockButtons>
</apex:pageBlock>
</apex:form>
<!-- Begin Default Content REMOVE THIS -->
<h1>Congratulations</h1>
This is your new Page: ContactApprovalPage
<!-- End Default Content REMOVE THIS -->
</apex:page>
and here is my extension:
public class extContactApprovalPage {
public extContactApprovalPage(ApexPages.StandardSetController controller) {
}
public PageReference save(){
PageReference reRend = new PageReference('/003');
return reRend;
}
}
Any assistance would be great thanks.
Here is my VF page code
<apex:page standardController="Lead" recordSetVar="leads" id="thePage" showHeader="true" sidebar="false" extensions="extContactApprovalPage" >
<apex:form >
<apex:pageBlock >
<apex:pageBlockTable value="{!leads}" var="l">
<apex:column >
<apex:outputField value="{!l.Name}"/>
<apex:facet name="header">Registrant Name</apex:facet>
</apex:column>
<apex:column >
<apex:outputField value="{!l.Approve_Picklist__c}"/>
<apex:facet name="header">Approve Picklist</apex:facet>
</apex:column>
<apex:column >
<apex:outputField value="{!l.Approve_Checkbox__c}"/>
<apex:facet name="header">Approve Checkbox</apex:facet>
</apex:column>
<apex:inlineEditSupport event="onClick" showOnEdit="saveButton, cancelButton"/>
</apex:pageBlockTable>
<apex:pageBlockButtons >
<!--<apex:commandButton value="Edit" action="{!save}" id="editButton" />-->
<apex:commandButton value="Save" action="{!save}" id="saveButton" reRender="none" />
<apex:commandButton value="Cancel" action="{!cancel}" id="cancelButton" />
</apex:pageBlockButtons>
</apex:pageBlock>
</apex:form>
<!-- Begin Default Content REMOVE THIS -->
<h1>Congratulations</h1>
This is your new Page: ContactApprovalPage
<!-- End Default Content REMOVE THIS -->
</apex:page>
and here is my extension:
public class extContactApprovalPage {
public extContactApprovalPage(ApexPages.StandardSetController controller) {
}
public PageReference save(){
PageReference reRend = new PageReference('/003');
return reRend;
}
}
Any assistance would be great thanks.
All Answers
So that line should read:
<apex:commandButton value="Save" action="{!save}" id="saveButton" />
Another thing you can try if that doesnt work, is set redirect to true on the pagereference...so that would look like this:
PageReference reRend = new PageReference('/003');
reRend.setRedirect(true);
return reRend;
The redirect works, but unfortunaltely my Save Functiontionality didnt work. For example in my sample i had an inline edit where users can click the checkbox. Once they check the box and click save, it should save thee record and redirect them to a Thank You page.
I was able to get the redirec to work but the Records wasn't saved. Any ideas?
public class extContactApprovalPage2 {
ApexPages.StandardController stdCtrl;
Public List <Lead> lead {get;set;}
public extContactApprovalPage2(ApexPages.StandardController controller) {
stdCtrl= controller;
lead = [select id, Name, Approve_Checkbox__c, Approve_Picklist__c, Email__c, Email from Lead where Email__c != null and isConverted= false];
}
public PageReference save(){
upsert lead;
PageReference reRend = new PageReference('/apex/ThankYou');
reRend.setRedirect(true);
return reRend;
}
}
I need to do th esame thing, I want to save and then redircet to a different page. Thank you for posting your code. My problem is with the unit testing. Would you be kind enough to post your test code too?
Thank you.
Stumbled across this as I was looking to do the same thing--is there any way to do it without writing a custom save action? Ideally of course I'd love to do this without needing to write an extension.
Thanks!
Jeff
I am using custom controller. i need to redirect standard salesforce new account creation page to my vf page when standard save is clicked.
any ideas would help me alot..??
Only Standard Controller uses the standard save action method, and if you want to override that then you use an extension on top of that.
If you are using a custom Controller, then you would have to define all your methods and save functionality. So if I was doing a SaveMethod() for an Account and redirect it to the newly created Account Page I would do something like:
Public PageReference SaveMethod(){
Acccount acc = new Account(
Name = 'Acc Test');
insert acc;
PageReference pageRef = new PageReference('/'+acc.id);
return pageRef;
}
Hope this helps! And please look at the documentation below if you have any other questions on this
https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_system_pagereference.htm
https://developer.salesforce.com/docs/atlas.en-us.pages.meta/pages/pages_quick_start_controller_setter_methods.htm
I have a single controller extension I use for all VisualForce pages that use a standard controller
In my case I want to pass the "retURL" parameter and have a save use that rather than redirect to the newly created detail page.
The nice bit here is that the same controller extension works for all object types.
I just replace the {!save} action in the page with {!submit}
// controller extension used by any VF page that wants to do a save-and-redirect
// so that the user does NOT end up on the detail page after saving a record
// it will call the standard save method, then redirect to the retURL parameter
public class submit_retURL_extn {
// Constructor
private ApexPages.StandardController sc;
public submit_retURL_extn(ApexPages.StandardController stdController) {
this.sc = stdController;
}
public PageReference submit() {
// fetch the redirect from the url
String next_url = ApexPages.currentPage().getParameters().get('retURL');
sc.save();
if ( next_url != null && next_url.length() > 0 ){
PageReference next_page = new PageReference(next_url);
next_page.setRedirect(true);
return next_page;
}else{
return(null);
}
}
}
The submit_retURL_extn looks pretty close to what I need.
I call a VF page with standard controller and this extension from my Quote page. The VF page shows just one field - a custom field called 'Site' which is a lookup to Account.
On the VF page the user can update this field to point to a different account.
When 'Submit' is pressed, the 'Site' custom field value is updated and the new account name and Id in 'Site' must be passed to the next VF page.
How can I pick up the updated value of name and Id for 'Site' to pass to the next page?
Thanks,
Mike.
One way is the to pass the id or the name as part of your url parameters when you do a redirect on a page reference.
hopefully that helps for now
Then when composing the url your going to send the user to just stick the ad on the end, so it'll be someting likeL
ret_URL = ret_URL + '&id=' + {!Site}
The new page will get an "id" parameter with the account id in it from the page with the custom lookup field.
Remember, if its the first parameter in the URL its a "?" not an "&"
Here's Paul's code that I have hacked to my needs:
Many Thanks.
PageReference next_page = new PageReference('/'+next_url);
And that should work.
Documentation is here
https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_system_pagereference.htm
Sorry try changing line 23 to the following:
PageReference next_page = new PageReference(''+next_url);
Sometimes the text string acts funky... also make sure to check if your code actually gets in that if statement.
Thanks for that - the url is actually working fine, the second VF page displays and the parameters are passed.
My problem is that it is the original account in the lookup field on the first page that is being passed to the second page, not the updated account. (The user sees a lookup to account on the first page, updates it and goes to the second page. The value of the account lookup is used for the records entered on the second page).
I'm missing something to do with refreshing the values in the fields. With Javascript I managed to get the updated account name to pass across but the old Id was still being sent. I then opted to try the controller extension route.
Any ideas?
Many Thanks,
Mike.
Problem was that using the JS route, the name of the account was being passed so I created a custom formula field to get the id. It was the value of the formula field that I was trying to use to pass the Id and that doesn't appear to get updated.
With the controller extension route, the id is passed as the value for the Account field. Using that instead of the formula field, the updated value gets passed, as everyone above says would be the case!
Thanks to all and remember not to use formula fields to pass values!