Salesforce memiliki tipe data berupa autonumber, yang akan terisi otomatis dengan nilai yang selalu bertambah (auto increment). Ternyata ini tidak hanya untuk field Name, tapi kita juga bisa menambah baru. Kita juga bisa menentukan berapa jumlah karakter dari nilai autonumber yang kita inginkan. Misalnya kita ingin field itu berisi 5 karakter, maka kita cukup atur {00000} dan nilainya nanti akan menjadi 00001, 00002 dst. Kita bahkan bisa menggabungkan dengan huruf tertentu, misal X-{00}, akan menjadi X-01 dst. Atau bahkan dengan tahun, bulan dan tanggal record tersebut dibuat, misal {YYYY}/{MM}/{000} akan menghasilkan 2012/11/001 dst.
Meskipun demikian, ada beberapa kekurangan yang belum aku temukan solusinya selain dengan membuat trigger untuk menghasilkan nilai nomor urut (running number) tersebut. Berikut beberapa kasus yang sepertinya tidak bisa dihandle hanya dengan field auto number tersebut.
Sebenarnya untuk setiap kasus manapun, algoritma dasarnya adalah standard.
Sebagai contoh, kita ingin menghasilkan nomor Invoice sendiri, tanpa menggunakan field autonumber yang standard. Object Invoice memiliki field sebagai berikut:
* Name - Text(80)
* Account__c - Lookup (Account)
* Invoice_Date__c - Date
* Invoice_Type__c - Picklist(A, B, C)
* Month_Code__c - Formula (Year-Month of Invoice Date)
* Acc_Running_No__c - Number(10,0)
Field Name akan kita gunakan sebagai nomor Invoice, dan kita tidak ingin menggunakan standard autonumber, melainkan dengan Text. Tentu saja kita tidak mau user menginput sendiri nomor invoice karena mereka akan mengeluh ketika harus mengelola nomor urut sendiri. Jadi kita bantu dengan mengisi secara otomatis. Di sini kita batasi, bahwa nomor invoice akan digerenate khusus untuk record baru (insert) saja.
Masih banyak kasus lain tentunya, tapi setidaknya contoh-contoh sederhana di atas bisa memberi ide bagaimana membuat nomor sendiri.
Meskipun demikian, ada beberapa kekurangan yang belum aku temukan solusinya selain dengan membuat trigger untuk menghasilkan nilai nomor urut (running number) tersebut. Berikut beberapa kasus yang sepertinya tidak bisa dihandle hanya dengan field auto number tersebut.
- Nomor urut yang perlu di-reset secara berkala, misal per bulan atau per tahun.
- Nomor urut yang unik untuk setiap data tertentu. Misal, nomor urut Account berdasar huruf awal.
- Nomor urut yang unik untuk setiap data terkait (lookup). Misal, nomor urut Invoice tiap Account punya urutan tersendiri.
Sebenarnya untuk setiap kasus manapun, algoritma dasarnya adalah standard.
- Cari nomor urut terakhir
- Increment angka
- Format angka
- Simpan data
Sebagai contoh, kita ingin menghasilkan nomor Invoice sendiri, tanpa menggunakan field autonumber yang standard. Object Invoice memiliki field sebagai berikut:
* Name - Text(80)
* Account__c - Lookup (Account)
* Invoice_Date__c - Date
* Invoice_Type__c - Picklist(A, B, C)
* Month_Code__c - Formula (Year-Month of Invoice Date)
* Acc_Running_No__c - Number(10,0)
Field Name akan kita gunakan sebagai nomor Invoice, dan kita tidak ingin menggunakan standard autonumber, melainkan dengan Text. Tentu saja kita tidak mau user menginput sendiri nomor invoice karena mereka akan mengeluh ketika harus mengelola nomor urut sendiri. Jadi kita bantu dengan mengisi secara otomatis. Di sini kita batasi, bahwa nomor invoice akan digerenate khusus untuk record baru (insert) saja.
Kasus 1 : Nomor Invoice reset setiap tahun, berdasar Created Date
File: https://gist.github.com/4162169Kasus 2 : Nomor Invoice reset setiap bulan, berdasar Invoice Date
Di sini kita akan menggunakan Month_Code__c untuk memudahkan query.
File: https://gist.github.com/4176831
Kasus 3 : Nomor Invoice setiap customer/account memiliki urutan sendiri
Nah di sini, aku merasa perlu menggunakan field Acc_Running_No__c untuk menyimpan nomor terakhir, karena agak sulit saat melakukan query dalam menentukan nomor terbesar File: https://gist.github.com/4203741Masih banyak kasus lain tentunya, tapi setidaknya contoh-contoh sederhana di atas bisa memberi ide bagaimana membuat nomor sendiri.
Comments