Social Icons

google plustwitterfacebookinstagramlinkedinrss feedcontact me

Kamis, 23 April 2015

Mengakses Properti Kontrol Dalam Datawindow

Untuk trik kali ini adalah tentang bagaimana caranya mengakses properti dari objek/control yang ada dalam datawindow. Sebelum saya mulai, saya akan berikan sedikit gambaran tentang bagaimana caranya mengakses properti dari objek/control yang ada dalam datawindow. Untuk mengakses/merubah properti sebuah objek/control dalam datawindow, ada dua cara, yaitu dengan menggunakan syntax dot notation atau menggunakan syntax describe/modify. Misalnya jika ingin merubah properti Visible dari control yang bernama kolom1 dari True Menjadi False, maka kita akan menuliskan script berikut ini:

  1. Dengan Dot Notation: dw_1.Object.kolom1.Visible = 0
  2. Dengan Modify: dw_1.Modify("kolom1.Visible = 0")
Sedangkan jika hanya ingin mengetahui nilai properti Visible dari kolom1, kita akan menuliskan script berikut ini:

  1. Dengan Dot Notation: li_visible = dw_1.Object.kolom1.Visible
  2. Dengan Describe: ls_visible = dw_1.Describe("kolom1.Visible")
Begitupun jika kita ingin mengetahui/merubah properti yang lainnya, nah sedikit masalah akan muncul ketika jumlah objek/control yang ingin kita rubah propertinya itu jumlahnya lumayan banyak, misalnya ada 20 kolom, jika menggunakan cara standar seperti diatas, maka kita sudah pasti harus menuliskan script diatas sebanyak 20 kali juga (dengan nama object/control yang berbeda-beda). Kalau buat saya sih sebenarnya hal ini tidak masalah, cuma agak kurang sedap dipandang aja jadinya kodingan kita. Untuk itulah kali ini saya ingin bagikan sebuah trik untuk mengantisipasi masalah seperti ini. Untuk triknya saya gunakan metode looping (untungnya Datawindow punya properti Objects dan ada metode Describe dan Modify). Sehingga script/kodingan kita akan terlihat "agak" professional daripada jika menggunakan cara standar yang harus menuliskan ulang metode yang sama untuk banyak objek/control.
Sebelum saya mulai lebih jauh lagi, sedikit mengingatkan, jika Properti Objects dari Datawindow itu berupa string kumpulan objek/control dalam datawindow tersebut dengan pemisahnya berupa karakter Tab (dalam powerbuilder dapat diidentifikasi dengan simbol ~t) untuk setiap objek/control., contohnya: kolom1 kolom2 teks1 teks2 kolom3 kolom4 teks3 teks4
Oke, sekarang saya langsung ke triknya, dan berikut adalah contoh ketika saya ingin merubah properti Visible menjadi False (0) dari setiap kolom dalam datawindow yang bernama dw_1, syntaxnya adalah sebagai berikut:
String ls_objek, ls_tipe
Integer li_len, li_pos, li_start, li_end
String ls_kontrol

ls_objek = dw_1.Describe("Datawindow.Objects") + "~t"
li_len = Len(ls_objek) 
li_start = 1
li_pos = PosA(ls_objek, "~t", li_start)

DO WHILE li_pos > 0
li_end = li_pos - li_start
ls_kontrol = MidA(ls_objek, li_start, li_end ) 
IF Not IsNull(ls_kontrol) THEN
ls_tipe = dw_1.Describe(ls_kontrol + ".Type")
IF ls_tipe = "column" THEN
dw_1.Modify(ls_kontrol + ".Visible=0")
END IF
END IF
li_start = li_pos + 1
li_pos = PosA(ls_objek, "~t", li_start )
LOOP

atau jika ingin menggunakan kriteria (dalam powerbuilder menggunakan expression) yang berarti Visiblenya situasional/kondisional, misalnya tergantung nilai dikolom tersebut, maka tinggal diganti baris ke-16 dari script diatas, menjadi seperti ini:
String ls_objek, ls_tipe
Integer li_len, li_pos, li_start, li_end
String ls_kontrol

ls_objek = dw_1.Describe("Datawindow.Objects") + "~t"
li_len = Len(ls_objek) 
li_start = 1
li_pos = PosA(ls_objek, "~t", li_start)

DO WHILE li_pos > 0
li_end = li_pos - li_start
ls_kontrol = MidA(ls_objek, li_start, li_end ) 
IF Not IsNull(ls_kontrol) THEN
ls_tipe = dw_1.Describe(ls_kontrol + ".Type")
IF ls_tipe = "column" THEN
dw_1.Modify(ls_kontrol + ".Visible='0~tIf(" + ls_kolom + ">0,1,0)'")
END IF
END IF
li_start = li_pos + 1
li_pos = PosA(ls_objek, "~t", li_start )
LOOP
Script diatas, jika nilai/data pada kolom tersebut lebih dari 0 maka kolom tersebut ditampilkan, selain itu disembunyikan.
Kalau dihitung jumlah barisnya, memang script diatas jadi lebih banyak daripada jika menggunakan script standar (untuk jumlah objek/control yang ingin diubah propertinya kurang dari 20), namun meski begitu, seperti yang sudah saya katakan sebelumnya, menurut pendapat saya metode looping ini akan sedikit "menaikkan" level programming kita, he he he. Namun jika jumlah objek/kontrolnya diatas 30, tentu metode looping diatas lebih efisien, apalagi jika ternyata ada perubahan dalam desain datawindownya, dimana ada penambahan/pengurangan objek/control dalam datawindow, maka kita tidak perlu lagi merubah script yang telah kita buat, lain halnya jika kita menggunakan metode standar, tentunya jika ada pengurangan/penambahan objek/kontrol dalam datawindownya maka kita juga harus menghapus/menambahkan script sesuai dengan perubahan datawindow tersebut.

Demikianlah trik ini, semoga bermanfaat.
Akhir kata, semoga sukses untuk semua yang sedang dan akan anda lakukan.

Tidak ada komentar:

Posting Komentar

Silahkan berikan komentar anda.

 

Term Of Service

Untuk mengetahui tentang penggunaan blog ini, silahkan buka halaman Term Of Service atau klik TOS untuk langsung membuka halaman Term Of Service

Privacy Policy

Untuk mengetahui kebijakan privacy dalam blog ini, silahkan buka halaman Privacy Policy atau klik Disini untuk langsung membuka halaman Privacy Policy