Thursday, December 23, 2004

Welcome again!

Heya gank!

Thanks guys, for visiting Foxyland again.
Berita pertama: seperti yang sudah Anda lihat; Foxyland sudah pindah. Mudah-mudahan di sini lebih nyaman, karena gak ada passport .NET yang harus Anda isi untuk memberi comment.

Udah lama saya gak nulis blog. Alasannya; yah, klise deh... sibuk... Ada dua proyek baru yang menyita banyak waktu. Gimana gak nyita waktu, due date kedua proyek itu tanggal 3 Januari 2005! Kemaren malam rencananya, saya mau nulis, tapi kemaren malam saya keasyikan bikin replication di SQL Server. Tau-tau udah jam 02:30!

Enough mengenai project. Sekarang mengenai my life dulu. Liburan udah di depan mata. Besok hari libur sudah dimulai. Maka, dimulailah era kacau. Soalnya, kalau anak dua itu sekolah, mereka pulangnya udah siang (sekitar jam 12-an) dan pasti kecape'an. Mereka langsung bersih-bersih, makan, terus tidur siang sampai jam 14:30, atau kadang bisa sampai jam 16:00. Jadi kalau saya kerja di rumah, saya bisa kerja dengan tenang. Kalau saya pergi ke client, yang di rumah juga bisa santai. Tapi, saat liburan.... Aaaaaarrrgggghhhh... anak dua itu punya energi, gak tau berapa, gak tau berapa ratus juta joule. Unlimited kali'! Jadi mereka bisa maiiiiinnn terus, gak mau tidur siang, dan bikin kacau jadwal semua orang. Enaknya memang di ajak keluar kota. Rencana beberapa bulan yang lalu memang mau ke Bali, tapi ternyata Bali harus lain kali. Tahun ini si kembar itu harus masuk ke TK (mereka sekarang di playgroup). Anda tau berapa biaya masuk TK? Salah satu TK terbaik di kota Bandung ini uang masuknya Rp 7,000,000 (yup, that's seven million. It's not a typo!). TK alternatif lain yang sedang kami pertimbangkan juga, uang masuknya 'lebih murah'; Rp 4,000,000. Dan itu per anak! And believe it or not, pendaftaran untuk tahun ajaran 2005-2006 dimulai bulan Januari ini. Jadi, kalau ke Bali, bisa totos deh. Yah, paling juga bisa ke Jakarta atau ke Puncak. Kebetulan ada saudara di Jakarta yang udah lama gak ketemu.

And now, untuk tips and trick. Untuk tips and trick kali ini, saya akan membagikan suatu konsep yang mungkin baru bagi sebagian dari Anda. Konsep ini dikenal dengan istilah Data Driven Application. Pada dasarnya, inti dari konsep ini adalah, alur aplikasi ditentukan oleh data. ("Hah, maksudnya apa?"). Implementasi sederhana dari konsep ini adalah, Anda punya program seperti ini:
LOCAL lo
USE data1
LOCATE
liField1 = data1.field1
IF liField1 = 1
Messagebox ("Nomor 1")
ELSE
Messagebox ("Nomor 2")
ENDIF

Sederhana kan? Jadi, dengan merubah isi dari field1 di file data1.dbf, si program akan melakukan hal yang berbeda. Kalau isinya 1, maka yang dilakukan adalah mencetak 'Nomor 1', dan kalau isi bukan =1, yang dicetak adalah 'Nomor 2'.

Implementasi yang lebih jauh adalah data itu bukan sekedar nilai yang digunakan dalam kondisi. Tetapi, isi dari data itu adalah program. Bingung? Silahkan coba jalankan program di bawah ini, kemudian silahkan dipelajari. Cara menjalankan bisa kan? Simply, copy-and-paste coding di bawah ini ke command editor di VFP Anda. Bingung cara membuka command editor? Gunakan perintah MODI COMM demo.prg dari command window Anda!


*********************************************************************
* Program : Demo.prg *
* Author : foxy *
* Notes : Mendemonstrasikan konsep awal dan ide Data Driven *
* application. *
* Tools : VFP8SP1, VFP9b *
* *
* Feel free to modify and implement the idea for your needs. *
* *
*********************************************************************
&& Baris berikut memanggil procedure yang menyiapkan tabel
&& Baris ini mungkin tidak diperlukan pada real apps, karena
&& tabel itu sudah harus disiapkan saat design time
DO PrepareTable

&& Berikutnya program menanyakan primary key dari tabel
&& Pada aplikasi yang sesungguhnya, primary key ini bisa merupakan
&& hasil dari kondisi tertentu; misal:
&& IF llProgBelumDiregistrasi
&& liPK = 1
&& ELSE
&& liPK = 2
&& ENDIF
liInput = INT(VAL(INPUTBOX("Key_PK:", "Please enter primary key")))
IF liInput > 0 AND liInput <= 2
SELECT test
LOCATE FOR key_pk = liInput
&& Pada kasus seperti ini, saya sering melewatkan pengecekan
&& hasil LOCATE. Soalnya, karena tabel test sudah disiapkan
&& pada saat design, key_pk = liInput dijamin ada.
&& Jadi, pemeriksaan dengan FOUND() bisa diabaikan.
&& Lalu, simpan isi memo field coding ke variabel
STORE coding TO lcString
&& Jalankan variabel itu!
lvReturnValue = EXECSCRIPT(lcString)
ELSE
lcMsg = "PK should've either 1 or 2"
MESSAGEBOX(lcMsg, 64, "Ups..")
ENDIF

&& Procedure ini hanya untuk mempersiapkan file test saja.
&& Tidak ada yang spesial di procedure ini.
&& Cuman Insertion simple saja.
&& Setelah selesai, control dikembalikan ke main.
PROCEDURE PrepareTable
CLOSE TABLES ALL
IF FILE("test.dbf")
DELETE FILE test.dbf
ENDIF
CREATE TABLE test FREE (key_pk i, coding M)
TEXT TO lcCode1 TEXTMERGE NOSHOW PRETEXT 2
MESSAGEBOX("I Sail Over Number one Sea")
ENDTEXT
TEXT TO lcCode2 TEXTMERGE NOSHOW PRETEXT 2
LOCAL lcInput
lcInput = INPUTBOX("Password:", "Sailing is for authorized person only!")
IF lcInput = "foxy"
lcMsg = "Cool Password." + CHR(13) + "How d'ya get it?"
ELSE
lcMsg = "Teeet... Wrong password." + CHR(13) + ;
"FYI: the password should be foxy"
ENDIF
MESSAGEBOX(lcMsg, 0, "Now you're running two")
ENDTEXT
INSERT INTO test ;
VALUES (1, lcCode1)
INSERT INTO test ;
VALUES (2, lcCode2)
ENDPROC

***************************************************************************
* End

Ok. Semoga bisa menambah wawasan...

Foxy

No comments: