You need to sign in to do that
Don't have an account?
mgodsey
VF version of record type selection page
I've created a VF page to replace the standard record type selection page. It starts by clicking a custom "New" button with the following URL: /apex/NewMediaPlanOverride?oppid={!Opportunity.Id}
Here is the VF page:
<apex:page controller="NewMediaPlanOverride">
<apex:form >
<apex:pageMessages />
<p style="font-size:20px"> What type of Media Plan are you creating?</p>
<apex:commandButton action="{!newProposal}" value="Proposal"/>
<apex:commandButton value="Insertion Order"/>
</apex:form>
</apex:page>
The code works when I have it written this way:
public with sharing class NewMediaPlanOverride {
public String oppId {get; set;}
public NewMediaPlanOverride() {
oppId = ApexPages.currentPage().getParameters().get('oppId');
}
public PageReference newProposal() {
Savepoint sp = Database.setSavepoint();
try{
Quote newQuote = new Quote();
Recordtype rt = [SELECT Name FROM RecordType WHERE Name = 'Proposal' and SObjectType = 'Quote' Limit 1];
String recTypeId = rt.Id;
//build the URL that the user will be redirected to
//Quote is a standard object so the prefix is consistant across orgs
String nextPage = '/0Q0/e?oppid=' + oppId + '&RecordType=' + recTypeId + '&retURL=%2F'+oppId + '&ent=Quote';
PageReference pageRef = new PageReference(nextPage);
return pageRef;
} catch(Exception e){
Database.rollback(sp);
ApexPages.addMessages(e);
return null;
}
}
However, since I'm going to have to repeat the redirect logic for different record types, I've tried to put it in its own method. Now when I click the button, it just stays on the same page instead of redirecting.
public with sharing class NewMediaPlanOverride {
public String oppId {get; set;}
public NewMediaPlanOverride() {
oppId = ApexPages.currentPage().getParameters().get('oppId');
}
public void newProposal() {
String recTypeId = getRecordTypeId('Proposal');
newQuote(recTypeId);
}
public PageReference newQuote(String recTypeId){
Savepoint sp = Database.setSavepoint();
try{
Quote newQuote = new Quote();
//build the URL that the user will be redirected to
//Quote is a standard object so the prefix is consistant across orgs
String nextPage = '/0Q0/e?oppid=' + oppId + '&RecordType=' + recTypeId + '&retURL=%2F'+oppId + '&ent=Quote';
PageReference pageRef = new PageReference(nextPage);
System.debug('[MF] nextPage: ' + nextPage);
System.debug('[MF] pageRef' + pageRef);
return pageRef;
} catch(Exception e){
System.debug('[MF] is there an error?' +e);
Database.rollback(sp);
ApexPages.addMessages(e);
return null;
}
}
public String getRecordTypeID(String type){
RecordType rt = [SELECT Name FROM RecordType WHERE Name =:type AND SObjectType = 'Quote' Limit 1];
String recTypeId = rt.Id;
return recTypeId;
}
}
Can anyone help me figure out why the second version of this code is not working? Here are the debug statements:
DEBUG|[MF] nextPage: /0Q0/e?oppid=006S00000070yVM&RecordType=012S00000004fibIAA&retURL=%2F006S00000070yVM&ent=Quote
DEBUG|[MF] pageRefSystem.PageReference[/0Q0/e?ent=Quote&oppid=006S00000070yVM&RecordType=012S00000004fibIAA&retURL=%2F006S00000070yVM]
Thank you!
Here is the VF page:
<apex:page controller="NewMediaPlanOverride">
<apex:form >
<apex:pageMessages />
<p style="font-size:20px"> What type of Media Plan are you creating?</p>
<apex:commandButton action="{!newProposal}" value="Proposal"/>
<apex:commandButton value="Insertion Order"/>
</apex:form>
</apex:page>
The code works when I have it written this way:
public with sharing class NewMediaPlanOverride {
public String oppId {get; set;}
public NewMediaPlanOverride() {
oppId = ApexPages.currentPage().getParameters().get('oppId');
}
public PageReference newProposal() {
Savepoint sp = Database.setSavepoint();
try{
Quote newQuote = new Quote();
Recordtype rt = [SELECT Name FROM RecordType WHERE Name = 'Proposal' and SObjectType = 'Quote' Limit 1];
String recTypeId = rt.Id;
//build the URL that the user will be redirected to
//Quote is a standard object so the prefix is consistant across orgs
String nextPage = '/0Q0/e?oppid=' + oppId + '&RecordType=' + recTypeId + '&retURL=%2F'+oppId + '&ent=Quote';
PageReference pageRef = new PageReference(nextPage);
return pageRef;
} catch(Exception e){
Database.rollback(sp);
ApexPages.addMessages(e);
return null;
}
}
However, since I'm going to have to repeat the redirect logic for different record types, I've tried to put it in its own method. Now when I click the button, it just stays on the same page instead of redirecting.
public with sharing class NewMediaPlanOverride {
public String oppId {get; set;}
public NewMediaPlanOverride() {
oppId = ApexPages.currentPage().getParameters().get('oppId');
}
public void newProposal() {
String recTypeId = getRecordTypeId('Proposal');
newQuote(recTypeId);
}
public PageReference newQuote(String recTypeId){
Savepoint sp = Database.setSavepoint();
try{
Quote newQuote = new Quote();
//build the URL that the user will be redirected to
//Quote is a standard object so the prefix is consistant across orgs
String nextPage = '/0Q0/e?oppid=' + oppId + '&RecordType=' + recTypeId + '&retURL=%2F'+oppId + '&ent=Quote';
PageReference pageRef = new PageReference(nextPage);
System.debug('[MF] nextPage: ' + nextPage);
System.debug('[MF] pageRef' + pageRef);
return pageRef;
} catch(Exception e){
System.debug('[MF] is there an error?' +e);
Database.rollback(sp);
ApexPages.addMessages(e);
return null;
}
}
public String getRecordTypeID(String type){
RecordType rt = [SELECT Name FROM RecordType WHERE Name =:type AND SObjectType = 'Quote' Limit 1];
String recTypeId = rt.Id;
return recTypeId;
}
}
Can anyone help me figure out why the second version of this code is not working? Here are the debug statements:
DEBUG|[MF] nextPage: /0Q0/e?oppid=006S00000070yVM&RecordType=012S00000004fibIAA&retURL=%2F006S00000070yVM&ent=Quote
DEBUG|[MF] pageRefSystem.PageReference[/0Q0/e?ent=Quote&oppid=006S00000070yVM&RecordType=012S00000004fibIAA&retURL=%2F006S00000070yVM]
Thank you!
https://developer.salesforce.com/forums/ForumsMain?id=906F000000095W3IAI