实现保存和新按钮不起作用

时间:2017-02-09 11:39:38

标签: salesforce extension-methods visualforce

我正在点击第

页上的创建保存和新功能的链接

How to implement "Save & New" functionality in a VisualForce Page

据我所知,

1.创建一个顶级类机会并实现扩展方法

public with sharing class Opportunity
{
  ApexPages.standardController m_sc = null;

  public Opportunity(ApexPages.standardController sc)
  {
    m_sc = sc;
  }


  public Pagereference doSaveAndNew()
  {
    SObject so = m_sc.getRecord();
    upsert so;

    string s = '/' + ('' + so.get('Id')).subString(0, 3) + '/e?';
    ApexPages.addMessage(new ApexPages.message(ApexPages.Severity.Info, s));
    return new Pagereference(s);
  }

  }

这个编译很好

2.创建新页面,扩展控制器,创建按钮和调用方法

<apex:page sidebar="false" standardController="Opportunity" extensions="Opportunity" >
   <apex:form >
    <apex:pageMessages />
    {!Opportunity.Name}

    <apex:commandButton action="{!doSaveAndNew}" value="Save & New"/>
  </apex:form>
   </apex:page>

这给了我错误“未知方法'OpportunityStandardController.doSaveAndNew()'”

我不知道在这个过程中我缺少了什么步骤

任何建议

2 个答案:

答案 0 :(得分:0)

APEX类扩展名不应与对象名相同 APEX类名 OpportunityController APEX OpportunityPage

代码应该是 <apex:page sidebar="false" standardController="Opportunity" extensions="OpportunityController" >

我认为类名称可能与对象标准名称相同

答案 1 :(得分:0)

正如约瑟夫所指出的那样,该页面试图访问标准控制器'OpportunityStandardController.doSaveAndNew()'中的方法并且无法找到它,因为扩展和标准控制器都被称为相同的东西,它只是在查看错了。

您可能只需要将控制器扩展名重命名为其他内容。我通常在类名的末尾抛出“Extension”,所以我知道它的用途。例如,可能是“OpportunitySaveExtension”之类的东西。然后更新您的visualforce页面以在“Extensions”属性中引用重命名的类。

扩展= “OpportunitySaveExtension”