I know that this is how to save a record
<apex:commandButton action="{!save}" value="Save"/>
Now I want a button to save the current record and reset the form to input another record.
Something like this...
<apex:commandButton action="{!SaveAndNew}" value="Save & New"/>
The URL for the new record page is the {org URL}/{3 letter object prefix}/e?".
You could define your save method as follows, where m_sc is a reference to the standardController passed to your extension in it's constructor:
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);
}
To use your controller as an extension, modify it's constructor to take a StandardController reference as an argument:
public class TimeSheetExtension
{
ApexPages.standardController m_sc = null;
public TimeSheetExtension(ApexPages.standardController sc)
{
m_sc = sc;
}
//etc.
Then just modify your <apex:page>
tag in your page to reference it as an extension:
<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>
Note that you don't need Extension in the class name, I just did that to be sensible. You shouldn't need to modify anything else on your page to utilise this approach.
Ideally, you could use the ApexPages.Action class for this. But when I've tried to use it, it's been too buggy. It's been a while, so you might want to play with it using the {!URLFOR($Action.Account.New)}
action.
What will work is simply using a PageReference
to redirect the user to the "new" URL.
For example, if this were for Accounts,
public PageReference SaveAndNew() {
// code to do saving goes here
PageReference pageRef = new PageReference('/001/e');
return pageRef;
}