Because the Visualforce page will be referenced in a contact-specific button, it must use that standard controller. Use a controller extension to add more logic to the page with Apex, which is where the page gets the ID of the interview to resume.
<apex:page standardController="Contact" extensions="MyControllerExtension_SurveyCustomers"> <flow:interview name="Survey_Customers" pausedInterviewId="{!pausedId}"/> </apex:page>
This Apex controller extension performs a SOQL query to get a list of paused interviews. If nothing is returned from the query, getPausedId() returns a null value, and the Visualforce page starts a new interview. If at least one interview is returned from the query, the Visualforce page resumes the first interview in that list.
public class MyControllerExtension_SurveyCustomers { // Empty constructor, to allow use as a controller extension public MyControllerExtension_SurveyCustomers( ApexPages.StandardController stdController) { } // Flow support methods public String getInterviews() { return null; } public String showList { get; set; } public String getPausedId() { String currentUser = UserInfo.getUserId(); List<FlowInterview> interviews = [SELECT Id FROM FlowInterview WHERE CreatedById = :currentUser AND InterviewLabel LIKE '%Survey Customers%']; if (interviews == null || interviews.isEmpty()) { return null; // early out } // Return the ID for the first interview in the list return interviews.get(0).Id; } }
To actually expose this Visualforce page to your users, make it available from the Contact page layout.
Field | Value |
---|---|
Label | Survey Customer |
Display Type | Detail Page Button |
Content Source | Visualforce Page |
Content | YourVisualforcePage |
Finally, add the button to your Contact page layout.