Galian Telkom

Hmm.... ^_^

Sunday, May 28, 2006

AcceptRejectRule

Alkisah ada seorang programmer newbie ingin membuat apikasi untuk menyelesaikan tugas dari gurunya. entah kenapa pilihannya jatuh kepada dot net 1.1, padahal pada saat itu sudah muncul dot net 2.0. akhirnya dengan naif-nya, sang programmer newbie itu menggunakan dot net 1.1 bajakan version, walaupun rekan2 seperguruannya menyarankan untuk menggunakan dot net 2.0 karena dot net 1.1 itu cupuww.

hari berganti hari, akhirnya ramalan rekan tadi jadi kenyataan. sang programmer menghadapi masalah yang sangat pelik. ketika dia ingin mengupdate banyak table sekaligus, entah kenapa hanya parent table-nya saja yang tersimpan. kebingungan, akhirnya sang programmer tersebut mempelajari struktur dari ado.net. setelah beberapa hari, akhirnya dia menemukan bahwa ternyata ado.net membuat flag di setiap datarow yang disebut dengan rowstate. isi rowstate bisa added, modified, deleted, atau unchanged. ternyata ini rahasia mengapa ado.net bisa begitu cerdasnya sehingga bisa mengetahui row mana yang harusnya di insert/update/delete.

dengan berbekal kemampuan debugging yang amat sangat tolol (msgbox everywhere), sang programmer menemukan ternyata sebelum parent tablenya disimpan, status row di child tablenya masih "added". namun setelah disimpan, ternyata statusnya tiba2 berubah menjadi "unchanged". hmmm... pantas saja child tablenya tidak mau tersimpan, wong statusnya udah berubah duluan. kalau begitu, statusnya harus aku kembalikan menjadi "added" supaya bisa tersimpan, pikir sang programmer.

namun apa yang terjadi? ternyata properti RowState bersifat Read Only! sang programmerpun kebingungan bagaimana cara merubah rowstate. setelah beberapa saat googling, akhirnya sang programmer mendapati kenyataan yang sangat mengejutkan. fitur untuk merubah RowState baru diimplementasikan di dot net 2.0!! sedih, kesal, marah, campur aduk jadi satu. tidak kehabisan akal, akhirnya sang programmer mencoba membuat datarow baru, kemudian mengkopi isi dari datarow yang lama. sejauh ini kelihatannya cukup berhasil - RowState-nya sudah berubah menjadi "added". namun ternyata ketika disimpan ke database muncul exception2 yang tidak jelas penyebabnya.

sang programmer hampir-hampir putus asa menghadapi kenyataan pahit ini, sebelum akhirnya dia menemukan biang kerok dari semua permasalahan yang terjadi. ternyata yang menyebabkan status datarow berubah secara misterius adalah karena adanya pemanggilan terhadap method AcceptChanges dari child table ketika parent table disimpan. sementara pemanggilan terhadap method AcceptChange akan selalu dilakukan ketika suatu table disimpan. hmmm oke, berarti aku harus mencari cara untuk mendisable pemanggilan terhadap method AcceptChange, pikir sang programmer.

berbagai cara dilakukan untuk mendisable pemanggilan AcceptChange, namun tidak ada yang berhasil. mulai dari mengubah2 properti dari dataadapter, sampai dengan membuat handler khusus. sampai pada akhirnya sang programmer menemukan website yang menarik. ternyata ada property bernama AcceptRejectRule yang ada di datarelation yang menyatakan apa yang dilakukan kepada row yang berkaitan jika suatu row dirubah. default valuenya adalah cascade. iseng-iseng sang programmer merubah valuenya menjadi none, dan... apa yang terjadi sodara2... it works!! bahkan tanpa melakukan pengkopian datarow yang super duper narajis, statusnya tetap "added"!! hooorayy!! , teriak sang programmer. saking senangnya dia menendang monitornya sampai meledak. kabooomm!! akhirnya sang programmer mati dengan sukses.

hmm... jadi ini good ending apa bad ending nih? ah sudahlah yang penting gw seneng bgt hari ini, huahahaha ^_^.

0 Comments:

Post a Comment

<< Home