自定义按钮或使用自定义控制器链接到Visualforce页面

Dan*_*ger 6 salesforce visualforce

我有一个Visualforce页面使用自定义控制器,用于编辑机会下的多个记录.

我想创建一个从Opportunities到此Visualforce页面的自定义按钮或链接.

目前链接如下:

/apex/ExamplePage?oppId={!Opportunity.Id}
Run Code Online (Sandbox Code Playgroud)

这在开发沙箱中工作正常,但是当它作为托管包的一部分部署时,链接会断开,因为页面引用没有名称空间前缀.

我在Force.com讨论板上发现了托管包重定向问题,暗示应该可以使用$ Page来引用URL中的Visualforce页面.例如

{!URLFOR($Page.MyExamplePage,'',[objectId = campaign.id])}
Run Code Online (Sandbox Code Playgroud)

但这样做只会给我语法错误:

错误:字段$ Page.MyExamplePage不存在.检查拼写.

该帖子的另一部分建议使用Apex类和Execute Javascript来解决它.但在我看来,这只是将名称空间问题转移到了Javascript中.

如何安全地引用Visualforce页面以在托管包内外工作?

Ada*_*dam 7

最好从Apex PageReference返回值执行此操作.这样的东西会起作用:

public PageReference returnPage()
{
   return Page.MyExamplePage;
}
Run Code Online (Sandbox Code Playgroud)

然后从Visualforce调用它:

<apex:commandButton value="Go To New Page" action="{!returnPage}"/>
Run Code Online (Sandbox Code Playgroud)

Apex Page调用将为您处理翻译.

[编辑]

像这样创建一个简单的Visualforce页面:

<apex:page standardController="Opportunity" extensions="TheController" action="{!returnPage}"/>
Run Code Online (Sandbox Code Playgroud)

将上面的returnPage()方法添加到新的TheController(或其他)类中.它甚至不需要构造函数.该类可以如下所示:

public TheController
{
   public PageReference returnPage()
   {
      return Page.MyExamplePage;
   }
}
Run Code Online (Sandbox Code Playgroud)

然后从商机设置页面转到按钮和链接,并创建一个新的自定义Visualforce按钮,选择刚刚创建的新页面.

应该这样做.