Как реализовать функцию «Сохранить и создать» на странице VisualForce

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

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

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

Что-то вроде этого...

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

person Sam    schedule 19.01.2012    source источник


Ответы (2)


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

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

Чтобы использовать ваш контроллер в качестве расширения, измените его конструктор, чтобы он принимал ссылку 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>

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

person Matt Lacey    schedule 19.01.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;
}
person Jeremy Ross    schedule 19.01.2012
comment
Если вы будете развертывать это за пределами своей организации разработчиков, для любого решения с настраиваемыми контроллерами потребуется версия Enterprise Edition или выше. - person Jeremy Ross; 19.01.2012