Как реализовать функцию «Сохранить и новый» на странице VisualForce - PullRequest
4 голосов
/ 19 января 2012

Я знаю, что это как сохранить запись

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

Теперь я хочу кнопку, чтобы сохранить текущую запись и сбросить форму для ввода другой записи.

Как то так ...

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

Ответы [ 2 ]

3 голосов
/ 19 января 2012

URL-адрес для новой страницы записи: {org URL} / {Трехбуквенный префикс объекта} / e? ".

Вы можете определить свой метод сохранения следующим образом, где 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>

Обратите внимание, что вам не нужно расширение в имени класса, я просто сделал это, чтобы быть разумным. Вам не нужно ничего менять на своей странице, чтобы использовать этот подход.

2 голосов
/ 19 января 2012

В идеале для этого можно использовать класс ApexPages.Action.Но когда я пытался использовать его, он был слишком глючным.Прошло какое-то время, поэтому вы можете поиграть с ним, используя действие {!URLFOR($Action.Account.New)}.

То, что будет работать , просто использует PageReference, чтобы перенаправить пользователя на"URL.

Например, если это было для Аккаунтов,

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

    PageReference pageRef = new PageReference('/001/e');
    return pageRef;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...