Pada Tutorial Membuat Program Biodata Karyawan yang lalu, ada script code yang bertujuan untuk memodifikasi properti Protect dari beberapa Column dalam datawindow, misalnya pada Tutorial Membuat Program Biodata Karyawan Part 7, disana ada script pada Event Clicked dari Command Button cb_tambah yg seperti ini (dibagian terakhirnya):
dw_karyawan.Modify("nama_karyawan.Protect ='1~tIf(IsRowNew(),0,1)'")dw_karyawan.Modify("jenis_kelamin.Protect ='1~tIf(IsRowNew(),0,1)'")
dw_karyawan.Modify("tempat_lahir.Protect ='1~tIf(IsRowNew(),0,1)'")
dw_karyawan.Modify("tanggal_lahir.Protect ='1~tIf(IsRowNew(),0,1)'")
dw_karyawan.Modify("status_nikah.Protect ='1~tIf(IsRowNew(),0,1)'")
dw_karyawan.Modify("pendidikan.Protect ='1~tIf(IsRowNew(),0,1)'")
dw_karyawan.Modify("alamat_lengkap.Protect ='1~tIf(IsRowNew(),0,1)'")
dw_karyawan.Modify("nomor_telepon.Protect ='1~tIf(IsRowNew(),0,1)'")
dw_karyawan.Modify("nomor_handphone.Protect ='1~tIf(IsRowNew(),0,1)'")
dw_karyawan.Modify("alamat_email.Protect ='1~tIf(IsRowNew(),0,1)'")
dw_karyawan.Modify("nama_bagian.Protect ='1~tIf(IsRowNew(),0,1)'")
dw_karyawan.Modify("nama_jabatan.Protect ='1~tIf(IsRowNew(),0,1)'")
dw_karyawan.Modify("status_kerja.Protect ='1~tIf(IsRowNew(),0,1)'")
dw_karyawan.Modify("tanggal_masuk.Protect ='1~tIf(IsRowNew(),0,1)'")
dw_karyawan.Modify("keterangan.Protect ='1~tIf(IsRowNew(),0,1)'")
Script code diatas adalah script untuk memProtect Column dalam datawindow kecuali column dibaris baru (Penambahan Data). Dengan model script diatas maka kita tentunya harus mengetikkan satu persatu dari semua column yang ingin diprotect, masalahnya adalah, bagaimana jika column yang harus diatur itu ada banyak dan datawindow yang lain juga harus dilakukan hal yang sama ? tentunya akan tidak efisien jika harus mengetikkan secara berulang-ulang, atau yang paling mudahnya mengcopy paste script diatas lalu mengganti nama datawindow dan nama masing-masing columnnya, namun hal itu juga menurut saya agak kurang efisien, maka solusi dari saya adalah dengan membuat Function dengan metode Looping untuk setiap column, sehingga script codenya bisa dirampingkan.
Analisa
Sebelum membuat Function, maka kita pasti harus melakukan analisa terlebih dahulu, hal ini perlu karena dengan analisa, maka kita akan dapat menentukan Return value dan argument-argument yang dibutuhkan, sehingga Function yang kita buat dapat dipanggil dimana saja. Dari script code diatas dapat saya simpulkan jika Function yang akan kita buat tidak memerlukan Return Value, dan argument yang dibutuhkan adalah Datawindow dan String, dimana argument Datawindow untuk mendefinisikan datawindow yang akan diakses dan String adalah Properti dan nilai dari propertinya.
Setelah analisa selesai, langsung saja kita buat Function tersebut, berikut adalah langkah-langkahnya:
Buat Function baru dengan struktur sebagai berikut:
Nama Function: f_set_columnReturn Type: (None)
Access: Public
Arguments:
Pass By
|
Argument Type
|
Argument Name
|
Value
|
datawindow
|
adw_name
|
Value
|
string
|
as_property
|
String ls_object, ls_control, ls_delimiter = "~t", ls_type
Integer li_pos, li_start, li_end
ls_object = adw_name.Describe("Datawindow.Objects") + "~t"
li_start = 1
li_pos = PosA(ls_object, ls_delimiter, li_start)
DO WHILE li_pos > 0
li_end = li_pos - li_start
ls_control = MidA(ls_object, li_start, li_end)
IF Not Isnull(ls_control) THEN
ls_type = adw_name.Describe(ls_control + ".Type")
IF ls_type = "column" THEN
adw_name.Modify(ls_control + "." + as_property)
END IF
END IF
li_start = li_pos + 1
li_pos = PosA(ls_object, ls_delimiter, li_start)
LOOP
Simpan Function ini.
Untuk menggunakan Function diatas, maka kita perlu memasukkan 2 argument, yakni datawindow dan string propertinya, misalnya:
f_set_column(dw_1, "Protect ='1~tIf(IsRowNew(),0,1)'")
f_set_column(dw_1, "Protect = 1")
f_set_column(dw_1, "Protect = 0")
f_set_column(dw_1, "Visible = 1")
f_set_column(dw_1, "Visible = 0")
Demikianlah trik singkat ini, semoga bermanfaat untuk anda.
Akhir kata, semoga sukses untuk semua yang sedang dan akan anda lakukan.