Lagi kangen :-D, udah lama enggak posting tentang Visual Basic 6. Terakhir nulis sekitar 3-4 tahun yang lalu he he :-D.
Kali ini saya ingin membahas salah satu poin penting tetapi sering kali disepelekan ketika akan membuat aplikasi bisnis yaitu transaction. Padahal fitur ini sangat penting untuk menjaga konsistensi data, karena hampir bisa dipastikan semua aplikasi bisnis menggunakan skema header-detail.
Salah satu poin penting dari transaction adalah atomic, yaitu beberapa perintah dianggap sebagai satu kesatuan. Kalau satu gagal, yang lain juga harus dibatalkan.
Contoh pada saat terjadi order penjualan proses yang terjadi adalah :
Insert 1 kali ke tabel Order
Insert n kali ke tabel OrderDetail
Mengurangi stok barang (tidak di bahas di postingan ini), karena bisa juga diselesaikan dengan database trigger
Ketika insert ke tabel OrderDetail gagal, maka tabel Ordernya juga harus di batalkan (undo), klo enggak ya datanya jadi enggak konsisten, karena ada nota Order yang enggak ada OrderDetailnya.
Nah utk mempermudah proses transaction ini kita bisa menggunakan objek collection untuk menyimpan objek OrderDetail yang kemudian kita binding ke objek Ordernya. Berhubung Visual Basic 6 tidak mempunyai class collection yang sepadan dengan class collection yang ada di Visual Basic .NET atau bahasa pemrograman .NET lainnya, sebagai gantinya kita bisa menggunakan class Scripting.Dictionary. Tetapi untuk menggunakan class Scripting.Dictionary ini kita harus menambahkan referensi Microsoft Scripting Runtime terlebih dulu.
Dengan asumsi database berikut tabelnya sudah tersedia, langkah berikutnya adalah membuat class Order dan OrderDetail. Kedua class ini dikenal dengan istilah class model, yaitu class-class yang merupakan representasi dari tabel-tabel yang ada di database.
Nah class-class model ini biasanya mempunyai beberapa property yang juga merupakan representasi field-field yang ada di dalam tabel.
Setelah class-class model selesai dibuat, untuk urusan CRUD-nya kita buat class tersendiri atau yang dikenal dengan istilah class-class DAO atau Repository.
Class DAO ini biasanya berisi method-method standar seperti Save, Update, Delete dan Get. Tapi untuk contoh kali ini saya hanya menambahkan method Save. Karena kita ingin insert ke tabel Order dan OrderDetail dianggap sebagai satu kesatuan, maka diterapkanlah konsep transaction dengan menambahkan perintah-perintah transaction seperti BeginTrans, CommitTrans dan RollbackTrans.
Nah klo kita perhatikan di bagian constructor (Class_Initialize), terdapat perintah untuk membuat objek Connection dengan memanggil method GetOpenConnection dari class DbConnection.
Setelah semua kodenya lengkap kita tinggal melakukan testing seperti berikut :