You need to sign in to do that
Don't have an account?
Dynamic redirect from a VF page with an embedded Flow
I just found out the way you can implement dynamic redirect with Flows embedded in a VF page. Here is an example of the VF page and the controller which redirect the user to the detail page of a Lead created within the Flow.
VF Page:
<apex:page controller="myAutoInsuranceController" sidebar="false" showHeader="false" >
<flow:interview name="Auto_Insurance_Quote" interview="{!myAutoFlow}" finishLocation="{!nextPage}"/>
</apex:page>
Controller:
public class myAutoInsuranceController {
public Flow.Interview.Auto_Insurance_Quote myAutoFlow { get; set; }
public String getmyID() {
if (myAutoFlow==null) return '';
else return myAutoFlow.vaLeadID;
}
public PageReference getNextPage(){
PageReference p = new PageReference('/' + getmyID() );
p.setRedirect(true);
return p;
}
}
Raj, when I try this code, myAutoFlow is always null. Do I need to call setter somewhere?
Well you have to change the code to launch your flow and access your variables
public Flow.Interview.Auto_Insurance_Quote myAutoFlow
myAutoFLow here would be an instance of a flow whose unique name is "Auto_Insutance_Quote" and this has to match the flow:interview property.
can you copy and paste your version of the VF page and controller?
VF page:
<apex:page standardController="Case" extensions="CaseFlowExtension" tabStyle="Case" >
<flow:interview name="new_flow" interview="{!myAutoFlow}" finishLocation="/{!nextPage}" >
<apex:param name="caseId" value="{!case.CaseNumber}"/>
</flow:interview>
</apex:page>
Controller:
public with sharing class CaseFlowExtension {
private final Case cas;
public Flow.Interview.new_flow myAutoFlow { get; set; }
public CaseLoanFlowExtension(ApexPages.StandardController stdController) {
this.cas = (Case)stdController.getRecord();
}
public String getMyFlowVar() {
if (myAutoFlow==null) return '';
else return myAutoFlow.vaFlow;
}
public String getNextPage() {
String vaFlow = getMyFlowVar();
if (vaFlow.equals('')) { return cas.Id;}
else if (vaFlow.equals('stop')) { return cas.Id; }
return null;
}
}
The controller is extension of Case standard controller. What I am trying to do is to call my Flow after save a Case. But myAutoFlow is always null in the getMyFlowVar(). I can't get the value from variable vaFlow which is defined in my Flow. Any idea what is wrong? Do I need to initiate myAutoFlow?
Not sure what you mean by "calling flow" aftet the case is saved. When and how is the VF page being invoked?
Sorry I forgot to paste save() method. This is handling saving a Case. It will return the Flow page reference.
public PageReference save() {
try {
upsert(cas);
} catch(System.DMLException e) {
ApexPages.addMessages(e);
return null;
}
//Case edit view
PageReference ref = (new ApexPages.StandardController(cas)).view();
if (cas.Reason.equalsIgnoreCase('Flow request')) {
ref = Page.NewFlowPage;
ref.setRedirect(false);
}
return ref;
}
This is very useful. I have applied it to my scenario, but cannot figure out how to write a test case for it.
How would you fill the flow variable name?
Hey Rajaram,
I've implemented the Class and VF page identically (minus the sidebar/header=False notations). It runs fine until it's time to load NextPage -- Instead of bringing me to my instance with a /RecordID, it wants to completely re-load the Salesforce login page. I'm running it in a Sandbox FWIW, but I can't imagine that makes any difference can it? Any suggestions?
Does anyone have a test method for the original post. I can only seem to get 12% coverage
Figured it out - The Visual Workflow needed to proceed to the next "step" to properly assign the ID to the variable within the workflow after the record is created.
I also have really low code coverage as well.
This is brilliant, thank you ever so!
I have just implemented something similar. Wondering how you wrote test class for this. Can you please share some inuts/code on the test class for myAutoInsuranceController ??