How do I get a variable back from a flow?

Go To StackoverFlow.com

1

I have a flow in SalesForce which creates a new object record and populates its fields. I then set a variable vAddendumId in the flow. I would like to be able to reference that Id on the corresponding VisualForce page controller, but I'm having problems getting at it. I know how to put variables into the flow from my page via URL "get" but I can't figure out the opposite direction.

Here's the code that I have now which assigns the Opportunity Id from oid in the URL string:

VisualForce Page:

<apex:page Controller="AddendumEntryController" TabStyle="Addendum__c">
    <flow:interview name="Addendum_Entry" finishLocation="{!backToAddendum}" >
        <apex:param name="vOpportunityId" value="{!opptyId}"/>
    </flow:interview>
</apex:page>

Controller:

public with sharing class AddendumEntryController {

    public ID getoppId = System.currentPagereference().getParameters().get('oid');
    public Flow.Interview.Addendum_Entry AddendumEntryFlow{get;set;}

    public String getOpptyId(){ return getoppId; }

    public PageReference getBackToAddendum(){

        PageReference send = new PageReference('/' + getaddendumId);
        send.setRedirect(true);
        return send;

    }

}

My endgoal is to send the user to the newly created object record when the flow is complete. Which means that I need to populate getaddendumId with the id from the flow.

Thanks in advance for any help given!

EDIT - Addition

I have tried a couple more things, one of which seems to be promising but is still throwing an error. I tried setting the variable equal to AddendumEntryFlow.vAddendumId. This gave an error about dereferencing a null object. I believe this is because vAddendumId is not set until later in the flow, but I can't be sure.

public Flow.Interview.Addendum_Entry AddendumEntry{get;set;}
public ID getaddendumId = AddendumEntry.vAddendumId;
2012-04-05 16:57
by VictorKilo


4

After a good amount of fiddling, I've worked out a solution. I needed to set the interview attribute on the page so that i could pull values from its contents. Then all that I needed to do was pull the value out of AddendumEntry.vAddendumId.

Final Code

AddendumEntry.page

<apex:page Controller="AddendumEntryController" TabStyle="Addendum__c">
    <flow:interview name="Addendum_Entry" interview="{!AddendumEntry}" finishLocation="{!backToAddendum}" >
        <apex:param name="vOpportunityId" value="{!opptyId}"/>
    </flow:interview>
</apex:page>

AddendumEntryController.cls

public with sharing class AddendumEntryController {

    public ID getoppId = System.currentPagereference().getParameters().get('oid');
    public Flow.Interview.Addendum_Entry AddendumEntry{get;set;}

    public String getOpptyId(){ return getoppId; }
    public ID returnId = getoppId;

    public PageReference getBackToAddendum(){

        if(AddendumEntry != null) returnId = AddendumEntry.vAddendumId;

        PageReference send = new PageReference('/' + returnId);
        send.setRedirect(true);
        return send;

    }

}

It actually turned out to be pretty straight forward. The only reason my previous attempts had failed was because I had not set interview="{!AddendumEntry}" on the page.

2012-04-05 19:17
by VictorKilo
Ads