Field Name di Salesforce ada dua jenis : Autonumber atau Text(80). Jika kita pilih Autonumber, kita gak bisa mengubah nilainya. Tapi jika kita pilih Text, field ini jadi wajib.
Kadangkala kita ingin punya Autonumber sendiri, tidak memakai autonumber standard dari salesforce. Ini bisa ditangani dengan membuat trigger. Masalahnya, field Name itu wajib diisi dan user tidak bisa menyimpan sebuah record tanpa memberi isi pada field tersebut, padahal field tersebut nantinya akan ditimpa (replace) dengan trigger. Jadi terkesan user harus mengisi dengan sesuatu yang tidak berguna, hanya sekedar agar record bisa disimpan.
Salah satu solusi mengatasi ini adalah dengan memberi nilai default ke field Name tersebut, sehingga nilainya sudah otomatis ada, dan user tidak perlu repot-repot mengisinya. Ini bisa dilakukan dengan membuat sebuah VF Page sederhana, yang akan meng-override New button dan isinya cuma meredirect ke halaman New.
Berikut contoh code Controllernya. Sengaja malas mengubah detailnya, jadi aku copas apa adanya. Ini contoh jika object yang ingin diproses adalah Quotation. Source code ini sudah mengakomodasi pemilihan Record Type.
Kadangkala kita ingin punya Autonumber sendiri, tidak memakai autonumber standard dari salesforce. Ini bisa ditangani dengan membuat trigger. Masalahnya, field Name itu wajib diisi dan user tidak bisa menyimpan sebuah record tanpa memberi isi pada field tersebut, padahal field tersebut nantinya akan ditimpa (replace) dengan trigger. Jadi terkesan user harus mengisi dengan sesuatu yang tidak berguna, hanya sekedar agar record bisa disimpan.
Salah satu solusi mengatasi ini adalah dengan memberi nilai default ke field Name tersebut, sehingga nilainya sudah otomatis ada, dan user tidak perlu repot-repot mengisinya. Ini bisa dilakukan dengan membuat sebuah VF Page sederhana, yang akan meng-override New button dan isinya cuma meredirect ke halaman New.
Berikut contoh code Controllernya. Sengaja malas mengubah detailnya, jadi aku copas apa adanya. Ini contoh jika object yang ingin diproses adalah Quotation. Source code ini sudah mengakomodasi pemilihan Record Type.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// transition page to create new page with default Name field | |
public class NewQuotation_Controller | |
{ | |
public NewQuotation_Controller(ApexPages.StandardController controller) | |
{ | |
//CreateNew(); | |
} // constructor | |
// function to process | |
public Pagereference CreateNew() | |
{ | |
String strObject = 'Quotation__c'; | |
String strPrefix = Schema.getGlobalDescribe().get(strObject).getDescribe().getKeyPrefix(); | |
System.debug('DEBUG: prefix ' + strPrefix); | |
// get record type | |
String strNewPage = '/' + strPrefix + '/e?Name=Autonumber&nooverride=1'; | |
String idRecordType = ApexPages.CurrentPage().getParameters().get('RecordType'); | |
if (idRecordType != null) strNewPage += '&RecordType=' + idRecordType; | |
Set<String> setParams = ApexPages.CurrentPage().getParameters().keySet(); | |
String idOpp = ''; | |
String strOppPrefix = ''; | |
String[] arrTmp; | |
/* | |
for (String S: setParams) | |
{ | |
if (S.contains('_lkid')) | |
{ | |
idOpp = ApexPages.CurrentPage().getParameters().get(S); | |
arrTmp = S.split('_'); | |
strOppPrefix = arrTmp[0]; | |
} | |
// System.debug('DEBUG: S = ' + S); | |
} | |
if (idOpp != '') // search default opportunity, account and contact | |
{ | |
for(Opportunity_Custom__c O: [SELECT Id, Name, Account__r.Name, Contact__r.Name FROM Opportunity_Custom__c tunity WHERE Id = :idOpp LIMIT 1]) | |
{ | |
idOpp = O.Name; | |
// TODO : find default for account and contact | |
} | |
strNewPage += '&' + strOppPrefix + '=' + idOpp; | |
} | |
*/ | |
//System.debug('DEBUG: ' + strNewPage); | |
PageReference newPage = new PageReference(strNewPage); | |
return newPage; | |
} // function | |
// test method | |
public static testMethod void mySelfTest() | |
{ | |
Quotation__c objQ = new Quotation__c(); | |
ApexPages.StandardController tmpPage = new ApexPages.StandardController(objQ); | |
NewQuotation_Controller objC = new NewQuotation_Controller(tmpPage); | |
objC.CreateNew(); | |
} | |
} |
Comments