如何在VisualForce页面中实现“保存和新建”功能

时间:2012-01-19 05:22:19

标签: salesforce apex-code visualforce force.com

我知道这是如何保存记录

<apex:commandButton action="{!save}" value="Save"/>

现在我需要一个按钮来保存当前记录并重置表单以输入另一条记录。

像这样......

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

2 个答案:

答案 0 :(得分:3)

新记录页面的URL是{org URL} / {3字母对象前缀} / e?“。

您可以按如下方式定义save方法,其中m_sc是对其构造函数中传递给您的扩展的standardController的引用:

  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);
  }

要将控制器用作扩展,请修改它的构造函数以将StandardController引用作为参数:

public class TimeSheetExtension
{
  ApexPages.standardController m_sc = null;

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

  //etc.

然后只需修改页面中的<apex:page>标记,将其作为扩展程序引用:

<apex:page standardController="Timesheet__c" extensions="TimeSheetExtension">
  <apex:form >
    <apex:pageMessages />
    {!Timesheet__c.Name}
    <apex:commandButton action="{!doCancel}" value="Cancel"/>
    <apex:commandButton action="{!doSaveAndNew}" value="Save & New"/>
  </apex:form>
</apex:page>

请注意,您不需要在类名中使用Extension,我只是这样做是明智的。您不应该修改页面上的任何其他内容来使用此方法。

答案 1 :(得分:2)

理想情况下,您可以使用ApexPages.Action类。但是当我试图使用它时,它太麻烦了。已经有一段时间了,所以你可能想要使用{!URLFOR($Action.Account.New)}动作来玩它。

的工作原理只是使用PageReference将用户重定向到“新”网址。

例如,如果这是针对帐户的,

public PageReference SaveAndNew() {
    // code to do saving goes here

    PageReference pageRef = new PageReference('/001/e');
    return pageRef;
}