如何从流中获取变量?

时间:2012-04-05 16:57:17

标签: salesforce apex-code visualforce flow

我在SalesForce中有一个流程,它创建一个新的对象记录并填充其字段。然后我在流程中设置变量vAddendumId。我希望能够在相应的VisualForce页面控制器上引用Id,但是我遇到了问题。我知道如何通过URL“get”将变量放入我的页面流中,但我无法找出相反的方向。

以下是我现在在URL字符串中从Opportunity Id分配oid的代码:

VisualForce页面:

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

控制器:

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;

    }

}

我的结论是在流程完成时将用户发送到新创建的对象记录。这意味着我需要使用流中的id填充getaddendumId

提前感谢您提供任何帮助!

编辑 - 加法

我已经尝试了更多的东西,其中一个似乎很有希望,但仍然是一个错误。我尝试将变量设置为AddendumEntryFlow.vAddendumId。这给出了关于取消引用null对象的错误。我相信这是因为vAddendumId直到流程的后期才设置,但我无法确定。

public Flow.Interview.Addendum_Entry AddendumEntry{get;set;}
public ID getaddendumId = AddendumEntry.vAddendumId;

1 个答案:

答案 0 :(得分:4)

经过大量的摆弄后,我找到了解决方案。我需要在页面上设置interview属性,以便我可以从其内容中提取值。然后,我需要做的就是从AddendumEntry.vAddendumId中取出值。

最终代码

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;

    }

}
事实证明它非常直接。我之前尝试失败的唯一原因是因为我没有在页面上设置interview="{!AddendumEntry}"

相关问题