Powerbuilder tutorial
-
Upload
dzas42 -
Category
Technology
-
view
149 -
download
12
Transcript of Powerbuilder tutorial
POWERBUILDER #2
Dalam PB #2 ini anda akan belajar membuat window type “mdi!” dan cara membuat “menu”, buka
workspace yg pernah anda buat di latihan PB #1 :
Rancangan aplikasi yg akan di buat nantinya adalah …berupa aplikasi dg layar utama dan ada menu
untuk menjalankan window/form/modul entri yg ada.
Jadi tidak spt waktu latihan 1st di PB #1 yg tampil hanya berupa window tunggal saja.
Tipe data window utama untuk aplikasi dan bersifat spt screen, di PB dikenal sebagai type window
mdi! (multiple document interface)
Sebuah type window mdi!, type window ini sendiri harus memiliki “menu”
Ok sebelum anda tambah bingung…..ikuti saja langkah2 berikut….
Membuat MENU :
Klik tombol “New” ……pilih tab “PB Object” pilih “Menu” dan klik tombol OK…
© mztolo 2006 – PB #2 membuat menu 1
Tampak di painter anda modul menu painter…tempat anda membuat menu…
Klik kanan pada
text “untitled0” …
spt ini dan klik
“Insert Submenu
Item”
Ketik “&File” spt
tampak di gambar
di bawah ini….
Tanda “&” pada
nama2 menu di
gunakan sbg shortcut…
sehingga bisa di panggil
© mztolo 2006 – PB #2 membuat menu 2
dengan menekan ALT+F
Tampak juga di propertiesnya spt ini…..
Klik kanan di “&File” dan klik
“Insert Submenu Item” untuk
membuat sub-menunya…
Ketik “Entri &Siswa” spt
tampak di gambar
bawah…
Ulangi langkah2 di atas
untuk membuat sub-menu
berikutnya…sehingga
hasilnya spt ini
Di layar sebelah
kanan tampak
layout/display/preview tampilan menu yg telah di buat….
Selanjutnya buat menu item lain …dg cara klik kanan “&File” dan klik spt di bawah ini..
© mztolo 2006 – PB #2 membuat menu 3
Ketik spt tampak
berikut ini….
Dan buat sub-menu
“Transaksi” serta
menu item berikutnya
sehingga hasilnya spt
ini…
Save dan beri nama “mn_siswa” spt tampak di gambar bawah…
Dengan demikian
proses pembuatan
menu sudah
selesai…
Tampak
“mn_siswa” sudah
ada di tree system
anda :
© mztolo 2006 – PB #2 membuat menu 4
Ok selanjutnya double click window “w_utama” ….
Perhatikan :
Title =“Program Entri
Data Siswa”
WindowType =mdi!
WindowState
=maximized!
Icon =Form!
Selanjutnya klik tombol di
kanan entrian
“MenuName”
Tampak modul spt ini…
Dan klik tombol
OK……sehingga
tampak di
properties spt
gambar di bawah
ini….
Save perubahan
window
“w_utama”….
© mztolo 2006 – PB #2 membuat menu 5
……dan coba run aplikasi …klik icon
Yap…..sukses…….
Hapus text “Latihan 1st ku” dan tombol “Close”…..maka jika di run akan spt ini…
© mztolo 2006 – PB #2 membuat menu 6
Note :
Menu-menu di atas belum berisi command/koding, sehingga jika anda klik menu “Exit” pun
window/aplikasi tdk akan “Close” atau “Exit”
Bagaimana cara mengisinya ?
Mari kita lakukan………..
Double click di “mn_siswa” untuk melakukan modifikasi menu tersebut…
Selanjutnya double click di menu item “E&xit” agar event click nya aktif….
Ketik koding spt tampak di gambar bawah….
Perhatikan :
if messagebox('Exit','Anda Yakin ?',question!,YesNo!) = 1 then
halt
end if
Note :
“m_file.m_exit” artinya m_exit (“E&xit”) merupakan sub-menu dari m_file (“&File”)
Pada saat anda klik menu “Exit” maka akan keluar pertanyaan spt ini…
© mztolo 2006 – PB #2 membuat menu 7
Jika anda klik tombol “Yes”
maka sistem akan “HALT” alias
berhenti atau close…(nilai
return valuenya 1, kalo 2 adalah
“No” … perhatikan susunan “YesNo!” …yes=1 ..no=2)
Perhatikan gambar di atas dan perhatikan koding-nya…anda bisa ambil kesimpulan sendiri….misal
“question!” itu simbol “?” spt tampak di gambar….begitu juga text yg lainnya….
Untuk koding yg lain akan dibuat sambil jalan…nantikan sample berikutnya
Sukses untuk anda !!
© mztolo 2006 – PB #2 membuat menu 8
POWERBUILDER #3
Untuk latihan berikut ini Anda siapkan database “sekolah” dengan table “tblsiswa” di mysql anda,
adapun struktur tablenya spt ini :
1. nis char(8)
2. nama varchar(50)
3. kota varchar(15)
4. tgllhr date
5. jkel char(1)
6. tabungan float(10,0)
Spt tampak di bawah ini, dg mySQLFront 2.5 :
Selanjutnya buka workspace yg pernah anda buat di latihan PB sebelumnya :
© mztolo 2006 – PB #2 membuat menu 9
Setelah database mysql anda create selanjutnya adalah membuat koneksi database dengan
cara….klik icon “Database”
Klik tombol “+” di depan
ODB ODBC sehingga …
ter-expand….
Klik kanan di ODB ODBC
…dan klik “New
Profile….“
© mztolo 2006 – PB #2 membuat menu 10
Tampil modul “Database Profile Setup – ODBC” spt ini……
Isi data/value spt
tampak di
atas…..
Profile Name:
=sekolah
User ID:
=root
Isolation Level:
=Read
Uncommitted
Driver-Specific
Parameters: =
DRIVER={MySQL ODBC 3.51 Driver};DESC=;DATABASE=sekolah;
SERVER=guzrud;UID=root;PASSWORD=;PORT=3306;OPTION=3;STMT=;
Note :
sekolah adalah nama databasenya
guzrud adalah nama servernya, sesuaikan dg nama server anda
root adalah id standard koneksi ke mysql nya
“Commit on Disconnect” jangan di centang !
Klik tombol “Apply”
Klik tab “Preview” sehingga tampak spt ini…..
© mztolo 2006 – PB #2 membuat menu 11
Klik tombol
“Copy” untuk
mengcopy listing
profile
koneksinya….
(perhatikan kalo
copy listing
tersebut masih
dlm kondisi ter-
blok spt tampak
di gambar atas)
Gunanya untuk
apa ?! …nanti
anda tahu
Klik tombol
“Test
Connection”
untuk
memastikan connection successful…..
Yap….sukses…. !!
Klik tombol OK…..
Selanjutnya untuk keluar dari
modul profile ini klik tombol
OK lagi……
Tampak profile koneksi
“sekolah” telah tercipta…..
Klik kanan dan “Connect” …
© mztolo 2006 – PB #2 membuat menu 12
Perhatikan tanda centang warna hijau yg menandakan koneksi yg aktif.
Ok selanjutnya double
click “object application”
siswa….
Dalam “open” event nya di atas command “open(w_utama)” klik kanan mouse dan “paste” listing
kode profile koneksinya ….shg hasilnya spt ini…( jadi tahu kan kenapa tadi anda diminta untuk click
tombol “Copy” lihat hal. 4)
Tambahkan command untuk “connect” stl listing tersebut sbl “open(w_utama)”
connect;
© mztolo 2006 – PB #2 membuat menu 13
if SQLCA.SQLDBCode<>0 then
messagebox('Koneksi Gagal',SQLCA.SQLErrText,stopsign!)
halt close
end if
Note :
connect; adalah perintah untuk konek ke database sesuai listing SQLCA nya…
jika SQLCA.SQLDBCode bernilai selain 0 (nol) maka koneksi gagal…jika koneksi gagal maka
sistem close.
SQLCA sendiri di PB adalah sebuah object dg type “Transaction” yg berfungsi menangani koneksi ke
database, SQLCA di deklarasikan sbg variable yg bersifat global dan merupakan object standard PB
untuk koneksi ke database.
Sehingga menjadi spt ini…
Mmmmm
kenapa
harus ada
2x koneksi
…lalu yg di
pakai yg
mana ?
Dua-duanya
di pakai…..
Koneksi di
“Database”
akan kepakai pada saat kita desain datawindow….interface untuk datanya (baik sbg query maupun
editing dan report)
Sedangkan koneksi di object aplikasi dipakai untuk koneksi pada saat aplikasi itu running
Simpan perubahan yg terjadi …ini akan terpakai pada saat pembuatan datawindow, ada di sample
berikutnya
Dengan demikian proses pembuatan profile koneksi data sudah selesai
© mztolo 2006 – PB #2 membuat menu 14
Sukses untuk anda !!
© mztolo 2006 – PB #2 membuat menu 15
POWERBUILDER #4
Sample kali ini adalah membuat modul entry untuk data “siswa”….
Modul ini berupa window dgn beberapa tombol dan datawindow sbg interface datanya.
Datawindow sendiri berfungsi sbg display, serta memungkinkan user untuk memanipulasi, update data
dan informasi yg lain.
Window sendiri dalam hal ini berfungsi sbg tempat datawindow tersebut.
Jadi kalo digambarkan akan memiliki urutan sb :
Data – Datawindow – Window
Mari kita mulai…….Klik tombol “New” sampai tampil spt ini…..
Pilih tab “DataWindow”, pilih “Freeform” dan klik tombol OK
© mztolo 2006 – PB #2 membuat menu 16
Klik tombol “Next >”
© mztolo 2006 – PB #2 membuat menu 17
Klik table “tblsiswa” dan klik tombol “Add All” serta diikuti tombol OK, sampai tampil modul spt
ini……
© mztolo 2006 – PB #2 membuat menu 18
Klik tombol “Next >”
© mztolo 2006 – PB #2 membuat menu 19
Untuk mengakhiri klik tombol “Finish” …datawindow anda sudah jadi…
Setup/lihat update properties… datawindow-nya….klik menu “Rows” dan klik menu “Update
Propertiesnya”……spt ini
© mztolo 2006 – PB #2 membuat menu 20
Perhatikan ….setting updatenya sudah benar….klik OK
Note :
Allow Updates–nya sudah di centang
Table to Update–nya sudah benar
© mztolo 2006 – PB #2 membuat menu 21
Updateable Columns–nya sudah benar
Unique Key Column(s)–nya juga sudah benar sesuai primary key mysql sbg databasenya.
Begitu juga klausa dan key modifikasinya juga sudah benar.
Save datawindow tersebut……dg nama “dw_entri_siswa”……dan klik OK
Tampak di system
tree anda ……
Selanjutnya
membuat window
sbg tempat kontrol
datawindow
“dw_entri_siswa”
tersebut
Tidak perlu saya
jelaskan secara
rinci langkah2 nya
karena di sample
sebelumnya telah
ada sample membuat window.
© mztolo 2006 – PB #2 membuat menu 22
Perhatikan di window ini ada 9 tombol spt tampak di gambar atas…..
Perhatikan propertiesnya ….anda buat spt contoh ini..
Klik datawindow
“dw_entri_siswa” yg ada di
system tree dan drag ke
window….spt ini
Rapikan sehingga menjadi
spt ini…(atur lebar dan tata
letakknya)
© mztolo 2006 – PB #2 membuat menu 23
Perhatikan properties datawindow “dw_entri_siswa”….
Name control datawindow ini
adalah “dw_1” ….nama ini
bisa anda ganti sesuai
keinginan anda…sementara
kita pakai “dw_1” dulu…..
Double click di area kosong window untuk mengaktifkan “open” event nya dan ketik :
dw_1.setTransObject(SQLCA)
Selanjutnya mari kita isi click event dari masing2 tombolnya…..
Kita mulai dari tombol “Retrieve”….. double click tombol tsb….ketik koding ini :
dw_1.retrieve()
Note :
dw_1 adalah nama dari kontrol datawindownya spt yg dijelaskan di atas
setTransObject(SQLCA) berfungsi untuk memberikan sepisifikasi object transaksi yg di pergunakan,
dalam hal ini adalah SQLCA.
retrieve() adalah perintah untuk SELECT (table/view) atau EXEC (store procedure).
© mztolo 2006 – PB #2 membuat menu 24
Double click tombol “Add” dan ketik koding berikut….(untuk menambah)
dw_1.ScrollToRow(dw_1.insertrow(0))
dw_1.setcolumn(1)
dw_1.setfocus()
Note :
insertrow(0) berfungsi untuk menambahkan data baru
scrolltorow() tersendiri berfungsi untuk mengeser pointer ke row baru/kosong tsb.
setcolumn(1) aktifkan kolom 1
setfocus() aktifkan kursor
Double click tombol “Update” dan ketik koding berikut…(untuk menyimpan)
if dw_1.update()=1 then
commit;
messagebox('Info..','Penyimpanan Sukses !',information!,ok!)
else
rollback;
messagebox('Info..','Penyimpanan Gagal !',information!,ok!)
return
end if
Note :
Jka update() sukses, return value =1 maka “commit” jika tidak akan di “rollback” atau di kembalikan
spt keadaan sbl proses editing.
Double click tombol “Delete” dan ketik koding berikut…(untuk hapus data)
if messagebox("Hapus Data","Anda Yakin ?",Exclamation!,YesNo!,2)=2 then return -1
if dw_1.rowcount()>0 then
dw_1.deleterow(0)
dw_1.setfocus()
if dw_1.update()=1 then
commit;
messagebox('Info..','Penghapusan Sukses !',information!,ok!)
else
rollback;
© mztolo 2006 – PB #2 membuat menu 25
messagebox('Info..','Penghapusan Gagal !',information!,ok!)
return -1
end if
else
return -1
end if
Note :
deleterow(0) berfungsi untuk menghapus row aktif.
Double click tombol “Close” dan ketik koding berikut…(untuk close window)
close(parent)
Double click tombol “<<” dan ketik koding berikut…(untuk go top)
if dw_1.getrow() = 1 then
messagebox(":)","Data pertama !",Information!,Ok!)
else
dw_1.scrolltorow(1)
end if
Note :
getrow() berfungsi untuk mengecek row aktif di datawindow ….jika = 1 artinya di row pertama.
scrolltorow(1) artinya mengeser pointer ke record/row 1
Double click tombol “<” dan ketik koding berikut…(untuk ke row sebelumnya)
if dw_1.getrow() = 1 then
messagebox(":)","Data pertama !",Information!,Ok!)
else
dw_1.scrollpriorrow()
end if
Note
© mztolo 2006 – PB #2 membuat menu 26
scrollpriorrow() untuk menggeser pointer ke row sebelumnya
Double click tombol “>” dan ketik koding berikut…(untuk ke row berikutnya)
if dw_1.getrow() =dw_1.rowcount() then
messagebox(":)","Data terakhir !",Information!,Ok!)
else
dw_1.scrollnextrow()
end if
Note :
rowcount() untuk mengetahui jml row/record yg ada di datawindow
scrollnextrow() untuk ke row berikutnya
Double click tombol “>>” dan ketik koding berikut…(untuk go bottom)
if dw_1.getrow() = dw_1.rowcount() then
messagebox(":)","Data terakhir !",Information!,Ok!)
else
dw_1.scrolltorow(dw_1.rowcount() )
end if
Note :
scrolltorow(jml row datawindow) artinya sama juga ke row terakhir
Ok…..koding sudah selesai …save window anda dg nama “w_entri_siswa”
Selanjutnya double click menu “Entri &Siswa” dan ketik koding untuk memanggil window
“w_entri_siswa” spt ini……
© mztolo 2006 – PB #2 membuat menu 27
Perhatikan koding di m_file.m_entrisiswa :
opensheet(w_entri_siswa,w_utama,2,original!)
Note :
Membuka window “w_entri_siswa” sbg sheet atau lembar kerja yg bernaung di bawah/di dalam
window “w_utama”.
Angka 2 menunjukkan nomor menu item yg diasosiasikan dg sheet yg di buka.
original! menandakan window di open sesuai ukuran aslinya.
(anda bisa melihat detail penjelasan di help PB….blok command yg ingin dilihat detail helpnya dan
tekan tombol Shift + F1)
Kenapa dipakai opensheet() bukan open(w_utama) spt contoh sebelumnya ?
Kalo anda pakai open(w_utama) maka akan di anggap window terpisah dari window mdi!-nya dan
bersifat tdk “always on the top” atau modeless
Save perubahan di menu “mn_siswa” …..
Jalankan aplikasi anda…..klik tombol “Run” klik menu File > Entri Siswa
© mztolo 2006 – PB #2 membuat menu 28
Begitulah tampilan sheet/window entri anda…..jika data sudah ada klik tombol “Retrieve” untuk
menampilkan data yg pernah di entri….
Klik tombol “ADD” isi data spt ini dan klik tombol “Update”…
© mztolo 2006 – PB #2 membuat menu 29
Yap….data tersimpan dg sukses
klik OK
Ok dengan demikian sample
datawindow dan window entri sudah selesai
Apakah sample di atas sudah maksimal ?! Jelas belum….
Anda masih bisa mempercantik tampilan-nya dan memberikan toolbars sheetnya…
Akan di bahas di sample berikutnya……
Sukses untuk anda !!
© mztolo 2006 – PB #2 membuat menu 30
POWERBUILDER #5
Perhatikan sheet/window entri yg pernah anda buat sebelumnya……
Masih lugu dan belom di make-up
Dari system tree double click
window entri siswa
“w_entri_siswa” shg tampak
spt ini…
Dan rightclick di area
datawindow control
nya….shg tampak spt berikut
© mztolo 2006 – PB #2 membuat menu 31
Untuk modifikasi datawindow nya…klik “Modify DataWindow…”
Sehingga tampak spt di bawah….
© mztolo 2006 – PB #2 membuat menu 32
Paling atas adalah design layout dari datawindownya…spt anda pernah buat
Bawahnya adalah preview dari datawindownya
Sedang yg paling bawah adalah list dari field2 databasenya.
Tekan dan tahan tombol control dan klik text keterangan dari field2 yg ada spt ini…
© mztolo 2006 – PB #2 membuat menu 33
Lalu di
propertiesnya
anda setting
border nya spt
ini…”underline”
Hasilnya spt ini….
Selanjutnya
coba click area
kosong dari
datawindow
anda dan klik
lagi text
“Tgllhr :”
seperti ini :
Ubah property
text “Tgllhr :”
di kolom
textnya spt
tampak…..berikut ini :
© mztolo 2006 – PB #2 membuat menu 34
Ganti “Text” yg ada dg
“Lahir :” saja….shg tampak spt
ini dan hasilnya….
Anda coba ubah “Jkel :”
menjadi “Sex :” …shg tampak
spt ini hasil akhirnya….
Tekan dan
tahan tombol
control lagi serta click semua field yg ada….spt ini :
Atur property
“border”
nya…spt ini :
Hasilnya spt
ini :
Anda juga bisa
coba pilihan
tampilan
© mztolo 2006 – PB #2 membuat menu 35
border yg lain :
Selanjutnya rapikan dan
rapatkan item2 atau field yg ada
di situ…spt ini :
Serta rapatkan
“band” detail
anda ke
atas….klik
mouse dan
geser ke atas
…spt ini :
Ok…close
painter editing
datawindow
ini dan jgn
lupa save
perubahan yg
ada….
Perhatikan window anda…….spt ini :
© mztolo 2006 – PB #2 membuat menu 36
Rapikan datawindow control dan tombol2 yg ada di window/sheet tersebut….spt ini :
Anda juga bisa atur “border/borderstyle” datawindow control nya shg menjadi spt ini :
© mztolo 2006 – PB #2 membuat menu 37
Close dan save
perubahan
tersebut…..lalu jalankan aplikasi dan panggil window/sheet :
Lebih indah bukan …..
Dengan demikian sample “make-up” text, control field, window dan datawindow control sudah selesai
Anda bisa coba sendiri dg efek bold, italic dan warna sesuai selera anda ….
© mztolo 2006 – PB #2 membuat menu 38
Akhir kata…..Sukses untuk anda !!
© mztolo 2006 – PB #2 membuat menu 39
POWERBUILDER #6
Jalankan aplikasi anda dan buku sheet/window entri data siswa …spt ini
Klik data di “nis” dan tekan tombol ENTER ! Apa yg terjadi ?!
Data akan bergeser/bergerak ke record selanjutnya.
Untuk menggeser pointer dari satu field/kolom ke field/kolom lain, misal dari “nis” ke “nama” bisa
anda pakai tombol “tab” atau “tabulator”
Bagimana jika kita ingin mengeser pointer antar field/data dg tombol panah atas/bawah atau tombol
enter ?
Anda harus menambahkan “event” di datawindow controlnya.
Mari kita lakukan
Pada kondisi window painter editing …klik datawindow control anda….
© mztolo 2006 – PB #2 membuat menu 40
Selanjutnya klik tab “Event List” yg ada di bawah…spt tampak di gambar
Selanjutnya klik kanan mouse dan pilih “Add” untuk menambah event baru.
Pilih powerbuilder object-nya datawindow control yg bernama “dw_1”
© mztolo 2006 – PB #2 membuat menu 41
© mztolo 2006 – PB #2 membuat menu 42
Ketik di “Return Type” pilih “long” dan untuk “Event Name” ketik “ue_tombol”
Selanjutnya di “Event ID:” pilih “pbm_dwnkey”
Dan hasilnya akan spt ini…..
© mztolo 2006 – PB #2 membuat menu 43
Selanjutnya anda bisa mengetik koding di dalam event “ue_tombol” ini….(ingat nama ini bebas
ya….tdk harus ue_tombol, justru yg penting adalah “Event ID” nya.
Anda perhatikan argument type “keycode” dan namenya “key” serta “keyflags” adalah default value
yg di punyai “pbm_dwnkey” jika ini blom keluar/ada biarkan saja, pada saat close event editor ini
nantinya jika keluar info untuk “Ignore” tekan “Yes” saja….
Isi koding event-nya spt ini :
int li_column_number,li_column_count,first_column
boolean lb_enter,lb_dwnrow,lb_uparrow
lb_enter =keydown(keyenter!)
lb_dwnrow =keydown(keydownarrow!)
lb_uparrow =keydown(keyuparrow!)
li_column_number =dw_1.getcolumn()
li_column_count =integer(dw_1.object.datawindow.column.count)
first_column =1
if keyflags=0 then
if lb_enter or lb_dwnrow then
if li_column_number=integer(dw_1.object.datawindow.column.count) then
dw_1.setcolumn(first_column)
© mztolo 2006 – PB #2 membuat menu 44
else
dw_1.setcolumn(li_column_number + 1)
end if
elseif lb_uparrow then
if li_column_number=1 then
dw_1.setcolumn(integer(dw_1.object.datawindow.column.count))
else
dw_1.setcolumn(li_column_number - 1)
end if
end if
elseif keyflags=1 then
if lb_uparrow then
if li_column_number=integer(dw_1.object.datawindow.column.count) then
dw_1.setcolumn(first_column)
else
dw_1.setcolumn(li_column_number + 1)
end if
elseif lb_enter or lb_dwnrow then
if li_column_number=1 then
dw_1.setcolumn(integer(dw_1.object.datawindow.column.count))
else
dw_1.setcolumn(li_column_number - 1)
end if
end if
else
return 0
end if
return 1
Keterangan :
Keyflags = 0 artinya tanpa ada penekanan tombol kombinasi dg tombol function lain.
Keyflags = 1 ada penekanan tombol dg Shift
Keyflags = 2 ada penekanan tombol dg Ctrl
Keyflags = 3 ada penekanan tombol dg Shift + Ctrl
Keyflags = 4 ada penekanan tombol dg Alt dst-nya.
© mztolo 2006 – PB #2 membuat menu 45
Keydown berfungsi untuk menentukan tombol apakah yg di tekan user.
Keydown(enter!) artinya jika/apakah yg di tekan ENTER…..
Anda perhatikan koding berikut ini….
li_column_number =dw_1.getcolumn()
// getcolumn() untuk mengetahui posisi kolom aktif
li_column_count =integer(dw_1.object.datawindow.column.count)
// untuk mengetahui jml kolom dlm 1 row/record
Selanjutnya……..
if lb_enter or lb_dwnrow then
// apakah yg di tekan enter atau panah bawah ?
if li_column_number=integer(dw_1.object.datawindow.column.count) then
// jika posisi kolom aktif = kolom terakhir/jml kolom
dw_1.setcolumn(first_column)
// posisi pointer kembali ke kolom pertama
else
dw_1.setcolumn(li_column_number + 1)
// jika tidak maka jalankan pointer ke kolom berikutnya
end if
elseif lb_uparrow then
// jika yg di tekan tombol panah atas
if li_column_number=1 then
// jika di posisi kolom 1 (pertama)
dw_1.setcolumn(integer(dw_1.object.datawindow.column.count))
// jalankan pointer di kolom terakhir
else
dw_1.setcolumn(li_column_number - 1)
// jika tdk di posisi terakhir maka jlnkan pointer ke kolom sblm nya
end if
end if
Demikianlah semoga bisa memberikan gambaran event penekanan tombol di datawindow
Note :
Lalu apakah kita harus membuat “event” ini di semua datawindow ? Yap benar…
© mztolo 2006 – PB #2 membuat menu 46
Tidak efisien dong kalo hrs ketik koding lagi ? Benar sekali…
Lalu solusinya bagaimana ? Yaitu dg membuat function yg bisa di panggil oleh “event” ini, jadi cukup
koding 1x saja.
Nanti anda akan belajar cara membuat function…..tunggu aja
Coba jalankan aplikasi dan buka sheet entri data siswa…spt ini
Klik di kolom “Nama” dan coba tekan tombol ENTER atau panah atas/bawah
Dan coba juga dikombinasikan dg tombol Shift
Dengan demikian sample pembuatan “event” keydown di datawindow control sudah selesai
Akhir kata…..Sukses untuk anda !!
© mztolo 2006 – PB #2 membuat menu 47
POWERBUILDER #8
Coba jalankan dan buka sheet entri data siswa anda spt ini….
Perhatikan modul di atas …ada 9 tombol yg di pakai…
Bagaimana jika kita ingin buat semacam toolbar saja ?
Atau di PB istilahnya menu sheet/window…..
Langkah2 nya sama dg waktu anda membuat “menu” yg ada di sample terdahulu
Klik “New” pilih “Menu” di tab “PB Object” dan klik tombol OK
Selanjutnya buat menu pertama “Retrieve” dg icon spt tampak di bawah ini :
© mztolo 2006 – PB #2 membuat menu 48
Lanjutkan dg item menu yg lain shg hasilnya spt ini…
© mztolo 2006 – PB #2 membuat menu 49
Perhatikan picture2 yg ada sudah disediakan oleh PB…..
Klik tombol save …beri nama “mn_sheet” …dan klik OK
Untuk koding
isinya biarkan
kosong dulu…….
Selanjutnya buka
dan modifikasi
form entri data
siswa….spt ini
© mztolo 2006 – PB #2 membuat menu 50
Perhatikan di “MenuName” isi dg menu sheet nya….dan simpan/save perubahan form ini
Pada saat modul sheet entri data siswa di jalankan …akan tampak spt ini…
Langkah selanjutnya ?
1. Membuat event untuk retrieve, add, update, delete, close, top, prior, next dan bottom.
© mztolo 2006 – PB #2 membuat menu 51
2. Mengisi event2 tersebut dg koding spt yg ada di tombol2 itu
3. Delete semua tombol yg ada……krn sudah tdk kita pakai lagi
4. Isi koding di menu sheet anda untuk menjalankan koding yg ada di sheet/window
Ok…mari kita lakukan satu per satu
Membuat event di sheet/window :
ue_retrive = untuk event retrieve
ue_add = untuk event add
ue_update = untuk event update
ue_delete = untuk event delete
ue_close = untuk event close
ue_top = untuk event top
ue_prior = untuk event prior/previous
ue_next = untuk event next
ue_bottom = untuk event bottom
Double click “w_entri_siswa” dari system tree anda untuk modifikasi….
Klik tab “event” di bawah dan ..dari modul event itu klik kanan mouse….lalu pilih “Add”
© mztolo 2006 – PB #2 membuat menu 52
Ketik nama event-nya “ue_retrieve” spt ini..dan isi koding event-nya
Klik kanan di event tersebut dan pilih “New Event”
Ketik nama event-nya “ue_add” ….
© mztolo 2006 – PB #2 membuat menu 53
Lakukan hal yg sama untuk event2 berikutnya….
Isi “ue_update” :
if dw_1.update()=1 then
commit;
messagebox('Info..','Penyimpanan Sukses !',information!,ok!)
else
rollback;
messagebox('Info..','Penyimpanan Gagal !',information!,ok!)
return
end if
Isi “ue_delete” :
if messagebox("Hapus Data","Anda Yakin ?",Exclamation!,YesNo!,2)=2 then return
if dw_1.rowcount()>0 then
dw_1.deleterow(0)
dw_1.setfocus()
if dw_1.update()=1 then
commit;
messagebox('Info..','Penghapusan Sukses !',information!,ok!)
else
rollback;
messagebox('Info..','Penghapusan Gagal !',information!,ok!)
© mztolo 2006 – PB #2 membuat menu 54
return
end if
else
return
end if
Isi “ue_close” :
close(this)
Isi “ue_top” :
if dw_1.getrow() = 1 then
messagebox(":)","Data pertama !",Information!,Ok!)
else
dw_1.scrolltorow(1)
end if
Isi “ue_prior” :
if dw_1.getrow() = 1 then
messagebox(":)","Data pertama !",Information!,Ok!)
else
dw_1.scrollpriorrow()
end if
Isi “ue_next” :
if dw_1.getrow() =dw_1.rowcount() then
messagebox(":)","Data terakhir !",Information!,Ok!)
else
dw_1.scrollnextrow()
end if
Isi “ue_bottom” :
if dw_1.getrow() = dw_1.rowcount() then
messagebox(":)","Data terakhir !",Information!,Ok!)
else
dw_1.scrolltorow(dw_1.rowcount() )
end if
© mztolo 2006 – PB #2 membuat menu 55
Kalo anda perhatikan koding yg di tulis di event2 tersebut ada yg mirip sekali dg koding yg ada di
click event tombol dan ada juga yg perlu di sesuaikan….
Misal di tombol “close” dan di event “ue_close”
Yg pertama tertulis “close(parent)” yg ke dua tertulis “close(this)”
Bagi anda yg sudah memahami bahwa koding mengacu pada object yg ada pasti sudah tahu….ketika
di tombol pake “parent” krn sheet tersebut adalah parent dari tombol, tetapi ketika di event yg
notabene ada di sheet tersebut maka cukup pake kata “this”.
Begitu jg return value, krn event ini semua “(None)” untuk return type/value nya maka, koding yg
dulu di tombol ada “return -1” cukup kita tuliskan “return” saja…..
Ok..selanjutnya hapus semua tombol yg ada…..serta save….
Dan isi koding di menu sheet nya ….
Doubleclick “mn_sheet” untuk modifikasi….kemudian doubleclick item “retrieve” serta isi koding spt
ini…
© mztolo 2006 – PB #2 membuat menu 56
Lakukan hal yg sama untuk item menu yg lain…...
Untuk “ue_add” spt ini parentwindow.triggerevent ("ue_add") dst-nya….
Setelah semua di isi dan di simpan/save jalankan aplikasi dan open sheet nya …yap…
Atau spt ini….
© mztolo 2006 – PB #2 membuat menu 57
Atau spt ini….
Anda juga bisa memakai menu text nya…spt ini
© mztolo 2006 – PB #2 membuat menu 58
Perlu saya jelaskan juga bahwa logika tombol pada dasarnya sama juga dg apa yg pernah saya berikan
samplenya untuk aplikasi developer yg lain……
Begitu juga koding yg ada masih dpt dikembangkan, semisal untuk data master – detail.
Ok ..saya harapkan anda tekun dan teliti serta jgn patah semangat…itu lah yg akan membawa anda ke
level selanjutnya dan level yg tak akan anda duga nantinya
(jgn lupa perbanyak doa dan rasa syukur kepada –Nya)
Dengan demikian sample pembuatan “menu sheet” sudah selesai
Akhir kata…..Sukses untuk anda !!
© mztolo 2006 – PB #2 membuat menu 59
POWERBUILDER #9
Latihan kali ini kita akan mencoba membuat sample untuk entri sheet master – detail, atau header –
detail.
Maka di perlukan 2 table lagi spt ini (untuk mySQL saya pake myISAM) :
Master ”tblhujian” dg key “nis”
Detail “tbldujian” dg key “kode” yg merupakan nilai hasil “autoincrement”
Sebelum anda membuat datawindownya, pastikan koneksi ke database “sekolah” masih aktif atau
terkoneksi :
© mztolo 2006 – PB #2 membuat menu 60
Untuk selanjutnya mari
kita buat datawindow
untuk masternya terlebih
dahulu.
Klik tombol “new” di
dalam tab
“DataWindow” pilih type datawindow “Freeform” dan klik tombol OK
Pilih “Quick Select” ….terus
perhatikan “Retrieve on Preview”
tdk usah di centang maksudnya
apa….agar pada waktu window
tercipta tdk langsung tampil di
“preview”
Mengapa ? Jika data kosong no problem tapi kalo data anda jutaan maka anda harus nunggu preview
selesai dulu setiap kali anda modifikasi datawindow itu.
Selanjutnya stl memilih spt di atas …
klik tombol “Next”
Pilih “tblhujian” …pilih semua field/kolomnya …dan klik OK
© mztolo 2006 – PB #2 membuat menu 61
Klik tombol “NEXT” dan klik “FINISH” sampai tampil spt ini :
Rapikan menjadi
spt ini :
Bagaimana jika
untuk “nis” saya ingin
tampilkan “nama siswa”
jadi bukan “nis” nya.
Atau dg kata lain dlm bentuk “combobox”
Untuk membuat combobox yg me-refer ke data lain di PB anda harus membuat suatu “datawindow”
baru yg diistilahkan “dropdown datawindow”
Nah krn data “nis” ini nanti me-refer dari data “tblsiswa” maka waktu membuat drowdown
datawindow kita memakai data dari “tblsiswa” tersebut.
Coba save dulu window yg baru saja anda buat ini dg nama “dw_entri_h_ujian”
Selanjutnya buat window baru, langkahnya sama dg cara di atas hanya anda pilih type window
“tabular”.
Dengan sumber data “tblsiswa” dan di ambil kolom “nis” dan “nama” spt ini :
Anda tarik
band header
ke atas dg
mouse anda,
sehingga judul kolom tertutup (atau anda hapus dan tarik band header ke atas jg boleh).
Tujuannya
apa ? Kita
tidak mau
memakai header/judul kolom tersebut.
Selanjutnya klik detail “nis” dan hapus…dg menekan tombol “DEL”
Kenapa kolom
© mztolo 2006 – PB #2 membuat menu 62
“nis” disertakan diwaktu awal membuat dropdown datawindow ini jika akhirnya di hapus ?
Memang benar data ini di hapus …tetapi pada dasarnya hanya di hapus di tampilan saja, sedangkan
data “nis” sebenarnya tetap harus ada dan nantinya dipakai untuk dikirimkan ke datawindow
parentnya yaitu dlm hal ini “dw_entri_h_ujian”
Geser kolom nama merapat ke depan…..
Terus percantik
dg merubah
properti “bordernya” …..
Hasilnya spt ini….
Simpan dg nama
“dddw_siswa”
Selanjutnya buka kembali datawindow “dw_entri_h_ujian”.
Klik kolom “nis” dan tarik perlebar spt ini dg mouse :
Selanjutnya klik tab “EDIT” di properties datawindow ini….
Setting spt tampak di gambar bawah…
© mztolo 2006 – PB #2 membuat menu 63
Style Type nya :
DropDownDW
Always Show Arrow di
centang
H ScrollBar di centang
DataWindow isi dg nama
“dddw_siswa”
Display Column atau kolom
data yg ingin di tampilkan
adalah “nama”
Data Column atau data yg
ingin disimpankan ke
datawindow
“dw_entri_h_ujian” di kolom
“nis”
(dengan demikian sewaktu
kita memilih nama siswanya,
data “nis” dari dddw_siswa
akan dikirim ke “nis” yg ada
di dw_entri_h_ujian)
Tampak hasilnya spt ini :
Rapikan shg menjadi spt
ini….(kasih jarak sedikit
di bagian bawah detail)
Simpan kembali
perubahan ini………
Selanjutnya buat
sheet/window master – detailnya…
© mztolo 2006 – PB #2 membuat menu 64
Mmmmmm….. cara cepatnya adalah buka sheet anda yg sudah jadi “w_entri_siswa”
Save As sebagai “w_entri_ujian”
Hapus datawindow yg ada di situ yg merupakan datawindow “w_entri_siswa”
Selanjutnya ganti dg datawindow “dw_entri_h_ujian”
Tampak hasilnya spt di gambar atas….
Jangan lupa ganti title sheet nya dg “Entri Data Ujian”
Simpan modifikasi terserbut dan close……….
Selanjutnya modifikasi menu “mn_siswa” dan double click di item “&Ujian Susulan” serta ketik
kodingnya….. spt ini “opensheet(w_entri_ujian,w_utama,2,original!)”
© mztolo 2006 – PB #2 membuat menu 65
Simpan perubahan
menu “mn_siswa”
dan coba jalankan
aplikasi ini…..
Klik menu
“Transaksi =>
Ujian Susulan”
sampai tampil
sheetnya…..
Jika ada datanya klik tombol “retrieve”….jika belum klik tombol “new”
© mztolo 2006 – PB #2 membuat menu 66
Klik combobox nya dan pilih nama siswanya sesuai data yg telah di entrikan di modul entri data
siswa.
Sehingga hasilnya spt ini…..
Ok sementara header/masternya dulu… detail akan di lanjutkan di bagian berikutnya…
© mztolo 2006 – PB #2 membuat menu 67
Pastikan latihan di atas sukses terlebih dahulu…shg kita bisa melanjutkan ke bagian detailnya…..
Akhir kata…..Sukses untuk anda !!
© mztolo 2006 – PB #2 membuat menu 68
POWERBUILDER #9 bag. 2
Selanjutnya mari kita buat detail nya berdasar table “tbldujian” di bawah :
Ok…. mari kita review prinsip master – detail terlebih dahulu
Data master anda secara database tersimpan spt ini….
NIS dan PENGAWAS
NIS berisi data spt “001”, “ABC007” dsb-nya sbg nomor induk siswanya
PENGAWAS berisi data spt “AMIR”, “KROMO ATEMO” yaitu nama2 pengawas
Data detail anda secara database tersimpan spt ini….
KODE, NIS, PELAJARAN dan NILAI
KODE merupakan data auto_increment yg akan diisi otomatis oleh databasenya dan berisi angka 1, 2,
3 dst nya. Data ini jg berfungsi sbg key master/update untuk data detailnya.
NIS berisi data “001” dst nya. Kenapa data ini diperlukan di detail ? Yap…diperlukan krn data ini
berfungsi dan bersifat sbg data untuk merelasikan data detail ke masternya.
Jadi semua data detail dg NIS=”001” merupakan data detail dari master dg NIS=”001” juga, hal inilah
yg di sebut dg konsep one to many.
PELAJARAN dan NILAI akan berisi nama pelajaran dg nilai nya.
Lalu bagaimana dg cara menampilkan data detailnya ?
PELAJARAN dan NILAI adalah data yg perlu disajikan di detailnya.
Untuk KODE dan NIS itu tidak perlu ditampilkan, krn kedua data ini hanya di pakai dlm kaitannya dg
procedure update dan relasi dg master.
© mztolo 2006 – PB #2 membuat menu 69
User/pemakai aplikasi anda tidak perlu tahu KODE dan NIS yg di replacekannya.
Ok selanjutnya …buat datawindow type tabular spt ini :
Hapus header
dan kolom
KODE serta
NIS… rapikan
shg menjadi spt ini :
Klik menu “Rows” dan
klik “Update
Properties…” spt ini….
Tampak modul “specify
Update Properties” – nya :
Untuk table yg memakai key auto_increment atau key yg tercreate otomatis maka “Identity Column:”
© mztolo 2006 – PB #2 membuat menu 70
nya harus di isi sesuai kolom-nya.
Karena table “tbldujian” ini memakai “KODE” sbg key auto_increment-nya maka isi “Identity
Column” nya spt ini :
Selanjutnya klik tombol OK…dan kembali ke paint datawindow-nya.
Selanjutnya buat
“Retrieval Arguments”
dg klik tombol shg
tampli spt ini :
Klik menu
“Design” dan klik
“Retrieval
Arguments…” spt
ini :
Sampai tampil
modul spt ini :
© mztolo 2006 – PB #2 membuat menu 71
Ketik spt di bawah ini dan klik OK
Selanjutnya klik tab
“WHERE” dan ketik
command spt ini :
Selanjutnya close dan save dg nama “dw_entri_d_ujian”…..
Datawindow dg retrieval argument jika anda retrieve akan menampilkan modul spt ini :
© mztolo 2006 – PB #2 membuat menu 72
Modul ini meminta anda untuk memasukkan “value” sesuai type data argument-nya.
Lalu apakah waktu aplikasi jalan akan selalu tampil modul di atas ? Mengganggu dong ?
Modul di atas tidak akan tampil krn sewaktu kita retrieve datawindow tsb kita sertakan langsung value
argumentnya spt ini : dw_2.retrieve(“001”)
Note :
Kenapa retrieval argument harus di buat ?
Yap…sekenarionya spt ini….data master detail terdiri atas 2 datawindow.
Pertama atau yg di atas (spt yg telah anda buat berdasar artikel #9a) adalah data master.
Yg kedua atau yg bawah adalah data detailnya.
Asumsinya begini…setiap data master digeser ke data/row untuk siswa yg berbeda maka data detail
akan mengikuti/berisi dg data detail yg sesuai dg masternya.
Nah untuk “memfilter” data detail ini agar sesuai dg data masternya di perlukanlah “retrieval
argument” di datawindow detailnya.
Jadi “retrieval arguments” sama dg “filter” ? Tidak juga krn PB mengenal “filter” sendiri.
Ok..mari kita lanjutkan….buka sheet master detail (w_entri_ujian) yg telah anda buat sebelumnya :
© mztolo 2006 – PB #2 membuat menu 73
Drag n drop datawindow “dw_entri_d_ujian” dan tambahkan 2 tombol spt ini :
Jika anda perhatikan di
sheet anda sekarang
sudah ada 2 datawindow
untuk master dg nama
“dw_1” dan detail dg
nama “dw_2”.
Selanjutnya buka event
“OPEN” dan modifikasi
kodingnya spt ini :
dw_1.setTransObject(SQLCA)
dw_2.setTransObject(SQLCA)
dw_1.retrieve()
dw_2.setrowfocusindicator(hand!)
Note :
Semua datawindow harus sudah di set transaksi objectnya dg SQLCA
Setrowfocusindicator(hand!) untuk menampilkan penunjuk row berbentuk tangan/jari telunjuk…mmm
nanti anda bisa melihatnya sendiri
© mztolo 2006 – PB #2 membuat menu 74
Event “ue_update” anda ganti spt ini :
if dw_1.getrow()=0 or dw_1.rowcount()=0 then return
dw_1.accepttext()
dw_2.accepttext()
if dw_1.update()=1 and dw_2.update()=1 then
if sqlca.sqlnrows<0 then
rollback ;
messagebox("Info..","Penyimpanan Gagal !",information!,ok!)
return
end if
commit;
messagebox('Info..','Penyimpanan Sukses !',information!,ok!)
else
rollback;
messagebox('Info..','Penyimpanan Gagal !',information!,ok!)
return
end if
Note :
Getrow dan rowcount dipakai untuk memastikan bahwa data window tdk dlm kondisi kosong.
Acceptext() berfungsi untuk menyimpan isi data baris aktif pada kontrol datawindow ke dlm buffer
kontrol datawindow. Jika fungsi ini tdk di jalankan maka baris aktif adalah baris aktif sebelumnya.
Doubleclick di dw_1 dan isi event “rowfocuschanged” dg ini :
if dw_1.rowcount()=0 or dw_1.getrow()=0 then return
string ls_nis
if dw_1.rowcount() > 0 then
ls_nis=dw_1.getitemstring(dw_1.getrow(),"nis")
end if
dw_2.retrieve(ls_nis)
© mztolo 2006 – PB #2 membuat menu 75
Note :
Rowfocuschanged diperlukan jika user mengeser row master/header maka detail akan di retrieve
sesuai key relasinya. Perhatikan koding dw_2.retrieve(ls_nis)
Ls_nis sendiri diambil dari data nis yg ada di dw_1.
Perhatikan koding ini ls_nis=dw_1.getitemstring(dw_1.getrow(),"nis")
Inilah kenapa di awal tadi kita harus membuat retrieval arguments di datawindow detail.
Semoga anda semakin paham dan jelas
Isi click event tombol “Add detail” dg ini :
if dw_1.rowcount()=0 or dw_1.getrow()=0 then return
dw_1.accepttext()
string ls_nis
ls_nis=dw_1.getitemstring(dw_1.getrow(),'nis')
dw_2.scrolltorow(dw_2.insertrow(0))
dw_2.setcolumn(3)
dw_2.setfocus()
dw_2.setitem(dw_2.getrow(),'nis',ls_nis)
Note :
Agar setiap data detail yg ditambahkan terelasi dg data masternya maka di datadetail harus di
set/simpan data key relasi yaitu berupa data “nis”
Perhatikan koding ini dw_2.setitem(dw_2.getrow(),'nis',ls_nis)
dw_2.setcolumn(3) kenapa 3 ? Betul krn kolom “pelajaran” adalah kolom urutan ke 3 yg ada di
“tbldujian”
Isi click event tombol “Del detail” dg ini :
if dw_1.rowcount()=0 or dw_1.getrow()=0 then return
if messagebox("Hapus Data","Hapus ?",Exclamation!,YesNo!,2)=1 then
dw_2.deleterow(0)
parent.triggerevent("ue_update")
© mztolo 2006 – PB #2 membuat menu 76
end if
Ok..selanjutnya coba jalankan aplikasi anda ….dan buka sheet master detailnya spt ini :
Klik tombol “Add
detail” dan anda isi
spt ini :
** mmmm ada
gambar telunjuk !
itulah
setrowfocusindicator(hand!) (
Ok …form master detail sudah selesai …selamat mencoba
Dan nantikan sample berikutnya…..
Akhir kata…..Sukses untuk anda !!
© mztolo 2006 – PB #2 membuat menu 77
POWERBUILDER #9 bag. 3
Masih seputar sheet master detail, coba anda buka event “ue_delete” modifikasi koding deletenya dg
koding berikut agar detailnya jg ikut terhapus :
if dw_1.rowcount()=0 or dw_1.getrow()=0 then return
if messagebox("Hapus Data","Anda Yakin ?",Exclamation!,YesNo!,2)=2 then return
dw_1.accepttext()
string ls_nis
ls_nis=dw_1.getitemstring(dw_1.getrow(),'nis')
dw_1.deleterow(0)
dw_1.setfocus()
if dw_1.update()=1 then
commit;
delete from tbldujian where nis=:ls_nis ;
messagebox('Info..','Penghapusan Sukses !',information!,ok!)
else
rollback;
messagebox('Info..','Penghapusan Gagal !',information!,ok!)
return
end if
Note :
Perhatikan cara penulisan SQL Command untuk “delete” –nya.
delete from tbldujian where nis=:ls_nis ;
(ditulis dg memakai “:” titik dua setelah tanda sama dengan dan setiap perintah SQL ini agar di
jalankan selalu diakhiri dg tanda “;” titik koma)
Ok sekarang coba
anda tambahkan di
detailnya data yg
banyak….spt ini :
Jml row di detail
sebenarnya ada 6, yg
© mztolo 2006 – PB #2 membuat menu 78
tampak 4 row.
Agar memudahkan user dlm melihat data yg tersembunyi/dibagian bawah anda bisa menambahkan
“vertical scrollbar” di datawindownya. Bagaimana caranya ?
Klik datawindow detailnya di painter/editor dan centang “VscrollBar” spt di bawah :
Simpan kembali perubahan dan coba jalankan………
Note :
Anda jg bisa
tambahkan
“horizontal scrollbar”
jika datawindow anda
lebar.
Hal ini jg bisa anda
terapkan untuk
“dropdown
© mztolo 2006 – PB #2 membuat menu 79
datawindow” anda.
Untuk dropdown datawindow caranya klik dddw-nya dan centang “VscrollBar” nya.
OK mari kita lanjutkan………..
Validasi proses penghapusan pada dasarnya bisa anda kembangkan lagi… misal jika master akan
dihapus akan keluar pesan kalo detail sudah berisi alias transaksi sudah terjadi. Logikanya
bagaimana ? Yaitu dg mengecek keberadaan data detail untuk kode master yg akan di hapus.
Selain itu anda bisa dg memberikan relasi di databasenya (mis: MsSQL) yg tentunya akan
memberikan pesan error atau informasi tentang sudah adanya relasi/transaksi jika ada proses
delete/penghapusan data.
Berikutnya saya akan memberikan sample yg menarik, coba buka sheet ujian spt ini :
© mztolo 2006 – PB #2 membuat menu 80
Dalam kondisi data
sudah terisi spt
tampak di sheet
atas….seharusnya
combo untuk nama
siswa terproteksi atau
disable artinya tdk
memberikan
kesempatan user
untuk merubahnya
krn ini menyangkut primary key-nya.
Sekarang coba kita bikin suatu kesalahan editing misalnya dg mengganti nama siswa di atas dg nama
lain yg sebenarnya data itu jg sudah pernah di entrikan.
Dengan kata lain kita coba bikin error krn primary key yg sudah kita masukkan kita entri kembali spt
ini :
Coba nama Rudy
anda ganti menjadi
Tini dan save
perubahan itu…apa
yg terjadi ?
Tampak
modul error
dari odbc
mysql-nya yg
menyatakan
adanya
duplikasi entri
Lalu coba anda lihat lagi apakah data dg nama siswa Rudy tersebut masih ada ?
Ternyata sudah tidak ada !! Kenapa ?
Close aplikasi anda …dan coba modifikasi datawindow “dw_entri_h_ujian”
© mztolo 2006 – PB #2 membuat menu 81
Setelah itu coba lihat “Update Properties…” nya tampak spt ini :
Perhatikan di bagian “Key Modification” nya…..
Tampak “rule” proses updatenya adalah “Delete” dulu baru “Insert” sehingga jika terjadi kasus spt tadi
maka data “tblhujian” sbg master akan di hapus terlebih dahulu baru dilakukan insert yg ternyata
gagal krn primary key terjadi duplikat.
Sedangkan proses hapus sudah terjadi..itulah yg menyebabkan data siswa Rudy terhapus.
Lalu bagaimana pemecahannya ? Ada 2 cara….
Cara PERTAMA :
Dengan menganti rule update di atas dg memilih “Use Update” di key modificationnya.
Klik OK dan save kembali
datawindow anda …dan coba
kembali kasus spt di atas tadi.
Krn data Rudy sudah terhapus coba input ulang lagi untuk latihan kali ini.
Detailnya tdk usah di entri kembali, krn untuk kasus di atas yg terhapus hanya data di masternya alias
“tblhujian” nya.
Sekarang coba anda lakukan langkah penggantian nama siswa yg notabene sudah pernah di inputkan
spt di hal. 3 dan save.
© mztolo 2006 – PB #2 membuat menu 82
Apa yg terjadi ? Tampak pesan errornya tetapi data siswa Rudy tdk terhapus !!
Benarkah ? Coba klik tombol “Retrieve” ..yap data masih spt semula
Semoga anda bisa mengambil kesimpulan dari contoh kasus di atas….amien.
Cara KEDUA :
Modifikasi datawindow master anda serta klik kolom “nis”
Setelah itu di propertiesnya klik icon warna merah di kanan tulisan “Protect” spt tampak pada gambar
di atas.
Tampak modul untuk mengetik koding …
© mztolo 2006 – PB #2 membuat menu 83
Ketik koding berikut “if (isrownew(),0,1)” dan klik tombol OK.
Tampak ada perubahan di propertiesnya spt ini :
Note :
Properties “Protect” berfungsi
untuk melakukan proteksi
terhadap kolom yg ada dengan
nilai true/1 atau false/0.
Untuk kasus di atas jika
row/kolom bukan kolom baru
maka kolom tersebut akan di
protect/disabled. Dengan kata
lain kolom hanya enabled jika
pada saat row baru atau pada
saat penambahan data baru.
Dan tentu saja hal ini bisa anda terapkan untuk datawindow yg lain juga.
Save datawindow krn perubahan tersebut..dan jalankan sheet ujian spt ini :
© mztolo 2006 – PB #2 membuat menu 84
Sekarang jika anda
klik combo nama
siswa tersebut tidak
akan bisa dlm kondisi
data sudah ada spt
tampak di gambar
atas
Lain halnya jika anda
klik tombol
tambah/new/add spt ini :
Ok…dengan
demikian sampai
disini dulu
penambahan dari saya
Nantikan sample2 dan
kasus2 yg lain dan
berbeda
selanjutnya……
Tetaplah kreatif dg
selalu memaksimalkan logika anda….dan jangan lupa untuk selalu berdoa dan bersyukur kepada-Nya.
Akhir kata…..Sukses untuk anda !!
© mztolo 2006 – PB #2 membuat menu 85
POWERBUILDER #10
Coba jalankan aplikasi anda dan buka sheet entri data siswa nya spt ini :
Tampak disana “nis” 007 adalah milik Tini Pratiwi……
Coba anda klik tombol/new ….dan isi data spt ini (dg nis=007 juga) :
Terus coba lakukan save/penyimpanan data…..apa yg terjadi ?!
Tampak informasi error updatenya yg mengatakan adanya duplikasi entry…..
Modul
datawindow
error ini masih
© mztolo 2006 – PB #2 membuat menu 86
standar dengan informasi sesuai informasi error yg dikeluarkan oleh odbc mysql nya.
Bagaimana jika kita ingin membuat pesan error yg kita definisikan sendiri ?
Caranya adalah dengan membuat function untuk itu ….
(jika lupa caranya baca2 lagi artikel sebelum2 nya ya )
Klik tombol new dan pilih function di tab “PB Object” sampai tampil modul untuk membuat fungsi.
Isi nama fungsi dan arguments yg dipakai spt ini :
Anda isi dg koding spt ini :
/* mztolo 2006
anda bisa melihat message error mysql yg lain di help mysql nya
pesan error ini akan berbeda antara 1 database dg database yg lainnya
*/
long kodeerror
string pesan,judul
kodeerror = sqldbcode
pesan =sqlerrtext
judul =title
string ls_pesan,ls_kodeerror
ls_kodeerror="("+string(kodeerror)+")"
if kodeerror=1062 then
ls_pesan=ls_kodeerror+' Data pernah di entri !'
messagebox(judul,ls_pesan,Information!,Ok!,1)
elseif kodeerror=1048 then
© mztolo 2006 – PB #2 membuat menu 87
ls_pesan=ls_kodeerror+ ' Kode kosong !'
messagebox(judul,ls_pesan,Information!,Ok!,1)
elseif kodeerror=1027 then
ls_pesan=ls_kodeerror+' Data sedang di edit user lain !'
messagebox(judul,ls_pesan,Information!,Ok!,1)
else
ls_pesan=ls_kodeerror+pesan
messagebox(judul,ls_pesan,Information!,Ok!,1)
end if
return 1
Selanjutnya anda save dg nama “f_dberror”
Lalu modifikasi sheet entri data siswa anda “w_entri_siswa” spt ini :
Doubleclick di kontrol datawindow-nya…..
Kemudian di method/event “dberror” anda ketik koding spt ini :
return f_dberror (sqldbcode,sqlerrtext,'Master Siswa')
© mztolo 2006 – PB #2 membuat menu 88
Selanjutnya save dan coba jalankan serta buka sheet entri data siswa…anda coba kembali entri dg
“nis” yg sama spt di atas (hal. 1)
Tampak pesan error yg tampil
adalah pesan error yg telah
anda definisikan di fungsi
“f_dberror” tadi.
Sekarang anda coba add data baru lagi…”nis” kosongin dan isi data yg lain spt ini :
Terus anda coba save….apa yg tampak ?!
Pesan error atau informasi kalo
kode/primary key kosong !!
Sekarang coba add data baru lagi
dan biarkan semua kosong spt ini :
© mztolo 2006 – PB #2 membuat menu 89
Terus coba save …dan apa yg terjadi ?!
Tampak informasi proses
penyimpanan sukses !! Nah lho ?
Tapi jika anda lihat di database
mysql anda jelas tidak ada
penambahan data kosong.
Artinya apa ? Capture error 1048 untuk primary key tidak terjadi dan jika di cek di message errornya
juga tidak keluar pesan apa-apa.
Ini sulitnya jika masih keluar pesan error nomor 10xx maka anda bisa menambahkan message
errornya di fungsi “f_dberror”
Nah lalu bagaimana jika pesan yg tampil akan mengatakan kalo data harus di isi semuanya atau tidak
boleh kosong ?
Anda ubah koding savenya “ue_update” menjadi spt ini :
string ls_nis
dw_1.accepttext()
if dw_1.update()=1 then
ls_nis=dw_1.getitemstring(dw_1.getrow(),'nis')
if isnull(ls_nis) then
messagebox('Info..','Data tdk boleh kosong !',information!,ok!)
return
else
commit;
© mztolo 2006 – PB #2 membuat menu 90
messagebox('Info..','Penyimpanan Sukses !',information!,ok!)
end if
else
rollback;
messagebox('Info..','Penyimpanan Gagal !',information!,ok!)
return
end if
Sample di atas hanya mengecek 1 kolom null atau tidak…untuk kolom2 yg lain silahkan di coba
sendiri…..
Sekarang jika data kosong anda save akan keluar pesan spt ini :
Terapkan juga fungsi
“f_dberror” ini untuk kontrol
datawindow yg lain…..
Ok cukup ini dulu…..silahkan
anda kembangkan menjadi lebih bagus lagi
Akhir kata…..Sukses untuk anda !!
© mztolo 2006 – PB #2 membuat menu 91
POWERBUILDER #11
Anda pasti ingat waktu pertama kali membuat sample PB ini….
Anda membuat suatu aplikasi yg mempunyai sheet yg bersifat MDI (multiple document interface).
Lalu apakah sample yg sudah dikerjakan masih bersifat SDI ? Tidak ! Hanya memang menu sheet yg
dibuat tidak mendukung MDI (atau bahasa lainnnya kurang memaksimalkan kemampuan MDI nya)
Berikut cara memaksimalkannya
Pertama ubah menu utama anda “mn_siswa” menjadi spt ini :
Perhatikan ada penambahan
item menu “Edit” , “Window”
dan “Help” yg penting adalah
“Edit” dan “Window” dlm
kaitannya dg konsep MDI.
Untuk “Edit” tdk perlu ada sub-
item menu-nya.
Setting visible dan enablenya jgn dicentang alias tidak mau di tampilkan di menu utama.
Begitu juga untuk menu
“Window” jgn dicentang
juga.
Kemudian untuk koding click
event dari masing2 sub-menu
item “Window” adalah sbb :
Clicked event Tile Vertical :
w_utama.ArrangeSheets ( Tile! )
Clicked event Tile Horizontal : w_utama.ArrangeSheets ( TileHorizontal! )
Clicked event Layer : w_utama.ArrangeSheets ( Layer! )
Clicked event Cascade : w_utama.ArrangeSheets ( Cascade! )
Untuk “Help” dan “About” biarkan aja dulu
Selanjutnya kita akan membuat menu yg merupakan “turunan” dari “mn_siswa” sbg menu sheet yg
baru.
© mztolo 2006 – PB #2 membuat menu 92
Caranya klik menu “File” dan klik “Inherit…”
Selanjutnya tampil spt ini :
Pastikan “Objects of Type:” nya “Menus”
Terus di kolom atasnya pilih menu “mn_siswa” dan klik tombol OK
Selanjutnya tampak menu baru yg merupakan inherit dari mn_siswa spt ini :
Kemudian tambahkan
sub-menu item untuk
“Edit” spt ini :
© mztolo 2006 – PB #2 membuat menu 93
Dengan
koding clicked
event yg sama
dg menu sheet
yg pernah
anda buat.
Jangan lupa di
propertiesnya
untuk menu
“Window” dan
“Edit” dicentang visible dan enabled nya.
Selanjutnya save dg nama
“mn_sheet2”
Buka sheet “w_entri_siswa” dan
ubah menunya menjadi
“mn_sheet2”
Lakukan juga untuk sheet
“w_entri_ujian” dan jangan
lupa di save perubahan itu.
Sekarang coba jalankan aplikasi
anda ….
© mztolo 2006 – PB #2 membuat menu 94
Perhatikan anda bisa membuka sheet lebih dari satu secara bersamaan ( MDI )
Pada saat anda aktif atau click sheet entri data siswa maka fungsi toolbar akan berlaku untuk sheet itu,
begitu juga sebaliknya jika anda click sheet entri data ujian.
© mztolo 2006 – PB #2 membuat menu 95
Anda lihat daftar sheet yg aktif ada di menu “Transaksi” bagaimana jika kita ingin letakkan di menu
“Window” ?
Caranya mudah ubah saja clicked event di menu yg menjalankan masing2 sheet dari koding spt ini :
opensheet(w_entri_siswa,w_utama,2,original!)
menjadi spt ini…..
opensheet(w_entri_siswa,w_utama,5,original!)
Perhatikan angka “2” dan angka “5” di atas ….
Menu “Transaksi” adalah urutan menu ke 2 pada “mn_siswa”
© mztolo 2006 – PB #2 membuat menu 96
Sedangkan menu “Window” ada di urutan ke 5
Mudah bukan ?!
Save perubahan dan jalankan aplikasinya…serta buka sheet serta buktikan
Anda juga bisa coba susunan window tile/vertical spt ini :
© mztolo 2006 – PB #2 membuat menu 97
Atau cascade spt ini :
© mztolo 2006 – PB #2 membuat menu 98
Ok…sampai disini dulu dan nantikan sample berikutnya….
Tambahan……..
Coba cek di “target” untuk event open kodingnya spt ini :
// mztolo 260106
// Profile sekolah
SQLCA.DBMS = "ODBC"
SQLCA.Lock = "RU"
SQLCA.AutoCommit = False
SQLCA.DBParm = "ConnectString='DRIVER={MySQL ODBC 3.51 Driver};DESC=;
DATABASE=sekolah;SERVER=guzrud;UID=root;PASSWORD=;
PORT=3306;OPTION=3;STMT=;'"
connect ;
if SQLCA.SQLDBCode<>0 then
messagebox('Koneksi Gagal',SQLCA.SQLErrText,stopsign!)
© mztolo 2006 – PB #2 membuat menu 99
halt close
end if
open(w_utama)
Untuk event close isi koding spt ini :
disconnect ;
Note :
Mungkin anda pernah ketemu penulisan spt ini “connect using sqlca ;”
Kenapa di atas hanya di tulis connect ; saja tanpa statement using sqlca ?
Pada dasarnya default transaksi koneksi adalah SQLCA maka penulisan “connect ;” saja sudah cukup,
pemakaian using sqlca jika adanya lebih dari 1 transaksi koneksi.
Sehingga kita harus menjelaskan secara detail ke sistem koneksi yg mana yg dipakai.
Semoga ini bisa menambah pemahaman anda…..amien
Akhir kata…..Sukses untuk anda !!
POWERBUILDER #12
Berikut ini sample mencetak data (datawindow) siswa….
Pertama anda buat datawindow sbg layout cetakkannya…..
Mmmmm jadi cetak juga pake datawindow ? Betul sekali….
Baik interface entri ataupun layout cetakan data…semua memakai datawindow….
Jadi buat data window spt ini :
Selanjutnya anda tarik “band” header ke bawah untuk mengetik judul laporan tersebut shg menjadi spt
ini :
© mztolo 2006 – PB #2 membuat menu 100
Dan blok serta geser ke bawah judul kolom yg tampak masih di atas….mjd spt ini :
Selanjutnya klik object text spt ini ….
Selanjutnya klik di area kosong di atas
judul2 kolom …spt ini :
© mztolo 2006 – PB #2 membuat menu 101
Ganti “value” text dengan “SMA 1 SUNTER” dan perhatikan perubahan di detailnya
Buat lagi text judul yg lain dan rapikan dg menggeser-geser dg mouse sehingga hasilnya akan menjadi
spt ini :
© mztolo 2006 – PB #2 membuat menu 102
Kemudian blok/soroti semua judul kolom dan ubah properti bordernya mjd spt ini :
Sekarang jika anda klik kanan dan retrieve di previewnya akan tampak spt ini :
Anda perhatikan nilai tabungan masih “polos” belum ada pemisah di nilai ribuannya…
Sekarang mari kita kasih format untuk memberikan tanda pemisah ribuan….
Pertama klik kolom “tabungan” di detail dan ubah propertie nya spt ini :
© mztolo 2006 – PB #2 membuat menu 103
Perhatikan di tab “Format” anda ketik saja spt ini ‘#,###.00’
Selanjutnya membuat total dari semua tabungan siswa....caranya klik kolom “tabungan”
Dan klik object “sum” spt ini :
Simsalabim……..summary tercipta spt
ini :
© mztolo 2006 – PB #2 membuat menu 104
Jangan lupa format display-nya di setting juga agar pemisah ribuan-nya ada
Selanjutnya rapikan tampilan layout cetakan dan atur size kertasnya spt ini :
© mztolo 2006 – PB #2 membuat menu 105
Untuk menambahkan tulisan “halaman sekian dari total halaman” caranya “
Klik object “compute page” spt ini :
Selanjutnya geser ke bawah band
“footer” spt ini :
Dan klik di area kosong di bawah total tabungan spt ini….
Tampak sudah tercipta…….
Selanjutnya save datawindow tersebut dg nama “dw_lap_tabungan”
Kemudian anda buat window untuk preview form cetak tersebut spt ini :
© mztolo 2006 – PB #2 membuat menu 106
Dengan title window =
“Form cetak data
tabungan....”
Tambahkan 2 tombol :
Tombol Print dg click
event “dw_1.print()”
Tombol Close dg click
event “Close(parent)”
Adapun properti
datawindow-nya spt ini :
Isi koding “Open” event
window tersebut spt ini :
© mztolo 2006 – PB #2 membuat menu 107
dw_1.settransobject(sqlca)
dw_1.retrieve()
dw_1.object.datawindow.print.preview='yes'
Note :
Tampak di koding itu spt biasa akan di set transaksi object nya.
Selanjutnya di retrieve data-nya dan tampilkan data secara print “preview”
Ok…kemudian save window tersebut dg nama “w_lap_tab”
Di menu untuk menjalankan window tersebut isi dengan koding spt ini :
opensheet(w_lap_tab,w_utama,5,original!)
© mztolo 2006 – PB #2 membuat menu 108
Jalankan aplikasi dan buka window/sheet laporang tersebut…
Anda bisa desain window dg lebih lebar agar tampilan bisa penuh..silahkan
Dan jika anda klik tombol “Print” maka data akan tercetak…..
Bagiamana jika ingin mencetak dari kode sekian s/d kode sekian ?
Bagaimana jika ingin merubah ukuran kertas dan jenis printer ?
Bagaimana jika ingin outputnya ke FILE ?
Bagaimana jika ingin mencetak dari halaman sekian s/d halaman sekian ?
Bagaimana jika ingin mencetak 2 copies ?
© mztolo 2006 – PB #2 membuat menu 109
Bagaimana jika ingin mencetak dg besar 1 ½ kali dari besar normal ?
Mmmmm… kelak semua akan saya coba berikan samplenya
Ok …cukup dulu ya ……
Akhir kata…..Sukses untuk anda !!
© mztolo 2006 – PB #2 membuat menu 110
POWERBUILDER #12 (b)
Ok mari kita melangkah ke depan lagi
Coba modifikasi window preview cetak anda menjadi spt ini….
Note :
Ada tambahan 5 radio button
1 checkbox
1 tombol preview (jadi sekenarionya nanti kita tdk mau data langsung tampil spt sample sebelumnya,
tetapi user hrs klik tombol preview dahulu)
© mztolo 2006 – PB #2 membuat menu 111
Terus ubah lebar window menjadi = 4078 dan tinggi = 2748
Ubah juga lebar datawindow menjadi = 3941 dan tinggi = 1976
Judul dan icon window/sheet silahkan juga kalo mau di ubah
Kemudian hapus koding yg ada di event “Open” agar datawindow tdk langsung “retrieve” atau di
tampilkan.
Coba klik datawindow “dw_1” dan hapus “dataobject” dw_lap_tabungan spt ini :
Menjadi spt ini…..maksudnya
apa agar data siswa tdk
langsung di tampilkan/preview :
Dan isi koding di click event
tombol “Preview” spt ini :
dw_1.dataobject='dw_lap_tabungan'
dw_1.settransobject(sqlca)
dw_1.retrieve()
dw_1.object.datawindow.print.preview='yes'
Note :
Perhatikan dw_1 adalah nama kontrol datawindow yg ada di window/sheet
Isi dataobject-nya pada saat klik tombol ini dg perintah dw_1.dataobject= ….
Selanjutnya spt biasa set transaksi objectnya, retrieve dan preview-kan.
Isi koding click event radio button “50%” dg ini :
if dw_1.describe('datawindow.print.preview')='yes' then
dw_1.Object.DataWindow.print.preview.zoom =50
dw_1.Modify("datawindow.zoom =50 ")
end if
Isi koding click event radio button “85%” dg ini :
if dw_1.describe('datawindow.print.preview')='yes' then
dw_1.Object.DataWindow.print.preview.zoom =85
© mztolo 2006 – PB #2 membuat menu 112
dw_1.Modify("datawindow.zoom =85 ")
end if
dst-nya………………
Note :
Perintah2 yg berhubungan dg “preview” dapat diterapkan/dijalankan jika datawindow ada di posisi
“preview” juga.
Untuk mengetahui atau mendapatkan indormasi apakah datawindow dlm kondisi “preview” dipakai
perintah “describe”
Jadi anda tambah perbendaharaan 1 perintah lagi yaitu perintah “describe” lebih detailnya baca help
PB
Selanjutnya preview datawindownya di set zoom dahulu agar tampilan previewnya ikut berubah
sesuai besaran angka prosentasenya (100% = ukuran normal)
Selanjutnya agar waktu tercetak datawindow besarnya sesuai yg kita inginkan maka lakukan
modifikasi di zoom datawindow-nya.
Nanti anda bisa buktikan waktu anda cetak di printer…….
Simsalabim…tercetak sesuai besar zoom nya …SECARA FISIK !!
Isi koding click event checkbox “Rulers” dg ini :
if dw_1.describe('datawindow.print.preview')='yes' then
if this.checked then
dw_1.object.datawindow.print.preview.rulers='yes'
else
dw_1.object.datawindow.print.preview.rulers='no'
end if
end if
Perintah ini untuk menampilkan “rulers” di pinggiran tampilan preview anda.
Spt tampak di bawah ini :
© mztolo 2006 – PB #2 membuat menu 113
Berikut jika tdk pake rulers :
Coba juga tampilan “zoom” 85% nya spt ini :
© mztolo 2006 – PB #2 membuat menu 114
Note :
Garis biru yg tampak di gambar atas adalah garis pembatas untuk area cetak.
Anda bisa menggeser ke arah “dalam” yg akan menandakan margin kiri dan kanan dari layout cetakan
anda.
Yg ini untuk “zoom” 150% :
Selanjutnya mari kita buat “range” untuk mencetak kode “nis” sekian s/d sekian.
Tambahkan 2 buah “SingleLineEdit” kontrol spt ini :
Tujuannya adalah untuk entri kode “nis”
Anda juga bisa mencoba dg membuat datawindow untuk hal tsb di atas, tentunya dg membuat
dropdown datawindow-nya.
Atau dg memakai kontrol spt combobox…..silahkan di kembangkan
Selanjutnya anda ubah koding tombol “Preview” dg spt ini :
string kode1,kode2,dwfilter
kode1 =righttrim(sle_1.text)
© mztolo 2006 – PB #2 membuat menu 115
kode2 =righttrim(sle_2.text)
dw_1.dataobject='dw_lap_tabungan'
dw_1.settransobject(sqlca)
if len(kode1)>0 and len(kode2)>0 then
dwfilter ="nis >='"+kode1+"' and nis <='"+kode2+"'"
elseif len(kode1) > 0 and len(kode2)=0 then
dwfilter ="nis ='"+kode1+"'"
elseif len(kode1) = 0 and len(kode2) >0 then
dwfilter ="nis ='"+kode2+"'"
else
dwfilter=" "
end if
dw_1.setfilter(dwfilter)
dw_1.filter()
dw_1.retrieve()
dw_1.object.datawindow.print.preview='yes'
Note :
Ntuk kasus ini saya berikan sample dg perintah “FILTER”
Anda bisa lihat cara memasukkan data “nis” ke variable yg ada (kode1 dan kode2), begitu jg cara
menyiapkan variablenya.
Selain itu perhatikan validasi untuk pengecekan apakah kode1 dan kode2 ada isi-nya.
Begitu juga dg cara penulisannya untuk variable “setfilter” yaitu “dwfilter”
Setelah itu agar filter jalan atau dilakukan maka lakukan “setfilter” sbg kondisinya dan lakukan
“filter” untuk datawindow tersebut…dan retrieve tentunya.
Jika “setfilter” diisi variable yg kosong ( dwfilter=” “) maka filter tdk akan berlaku atau berarti data
akan ditampilkan semua.
Simpan perubahan dan coba tampilkan……spt ini :
© mztolo 2006 – PB #2 membuat menu 116
Mmmm…..ok sampai ini dulu…..
Sedikit2 aja…biar anda bisa meresapi koding, kegunaan dan artinya
Akhir kata…..Sukses untuk anda !!
POWERBUILDER #13
Setelah membaca sample 12(e) mungkinkah ada timbul pertanyaan dalam benak anda ?
Apakah setiap proses cetak harus memerlukan masing2 1 window/sheet cetak….
Jadi kalo ada proses cetak 10 maka perlu juga 10 sheet preview ?
Sedangkan jika kita lihat semua koding sama dan hanya 1 perbedaan yaitu tentang datawindow object-
nya saja.
Ok ..benar sekali… kenapa kita tidak membuat atau cukup 1 sheet preview saja ?
Artinya sheet preview tersebut harus bisa menerima parameter untuk object datawindow yg berbeda.
Jika PB bisa….tentunya…lalu dg perintah apa ?
Untuk membuka sheet biasa anda memakai ini :
opensheet(w_lap_tab,w_utama,5,original!)
Nah untuk opensheet dg parameter dg perintah ini :
OpenSheetWithParm ( sheetrefvar, parameter {, windowtype }, mdiframe{, position {,
arrangeopen } } )
Ok sebelum kita melangkah lebih jauh coba buka/modify sheet “w_lap_tab” dan save as dengan nama
© mztolo 2006 – PB #2 membuat menu 117
“w_preview”.
“w_preview” inilah yg akan kita pakai…window preview yg sudah anda buat biarkan saja sbg
dokumentasi anda untuk belajar.
Selanjutnya di click event masing2 menu cetak coba anda ganti dg perintah2 ini :
Untuk “laporan data siswa”…..
OpenSheetWithParm(w_preview,”dw_lap_tabungan”,w_utama,5,original!)
Untuk “laporan per group” …..
OpenSheetWithParm(w_preview,”dw_lap_ujian”,w_utama,5,original!)
Lalu apakah langsung bisa dijalankan …perintah ini dari menu ?
Mmmmm……sheet “w_preview” anda harus diberikan perintah untuk menangkap parameter yg
disertakan di perintah tersebut di atas. Caranya ?
Ok….perlu anda ketahui untuk meng-capture/menangkap/store data parameter itu PB mengenal 3
perintah :
Message.DoubleParm Numeric
Message.PowerObjectParm PowerObject (PowerBuilder objects, including user-defined structures)
Message.StringParm String
Anda perhatikan…jika yg dilewatkan berupa data numeric dipakai perintah “Message.DoubleParm”.
Jika data string pakai “Message.StringParm”
Dan jika berupa “structure”, PB object yg lain maka pakai “Message.PowerObjectParm”.
Karena yg dilewatkan berupa data string contoh : ”dw_lap_ujian”
Maka modify sheet “w_preview” anda di clickevent tombol PREVIEW dg koding ini :
// mztolo 2006
string kode1,kode2,dwfilter
string ls_nama_window
ls_nama_window = Message.StringParm
kode1 =righttrim(sle_1.text)
kode2 =righttrim(sle_2.text)
© mztolo 2006 – PB #2 membuat menu 118
dw_1.dataobject=ls_nama_window
dw_1.settransobject(sqlca)
if len(kode1)>0 and len(kode2)>0 then
dwfilter ="nis >='"+kode1+"' and nis <='"+kode2+"'"
elseif len(kode1) > 0 and len(kode2)=0 then
dwfilter ="nis ='"+kode1+"'"
elseif len(kode1) = 0 and len(kode2) >0 then
dwfilter ="nis ='"+kode2+"'"
else
dwfilter=" "
end if
dw_1.setfilter(dwfilter)
dw_1.filter()
dw_1.retrieve()
dw_1.object.datawindow.print.preview='yes'
Penjelasan…….
Perhatikan perubahan koding di click event tombol PREVIEW di atas….
Terutama yg saya ketik dg warna merah……..
Pertama spt biasa anda siapkan variable untuk tempat nama datawindow itu
string ls_nama_window
Setelah itu store data sesuai yg dilewatkan parameter dg perintah ini…
ls_nama_window = Message.StringParm
Dan anda isikan dataobject untuk dw_1 dengan perintah ini…..
dw_1.dataobject=ls_nama_window
Dengan demikian “w_preview” sudah bisa anda pakai untuk type cetakan laporan tabungan dan daftar
nilai ujian.
Hebatnya lagi capture parameter itu bisa dilakukan di koding sebuah click event tombol.
Jadi tdk harus anda set di open event sheet….atau event lain yg running atau dijalankan waktu sheet
pertama kali ditampilkan.
Bagaimana jika data hasil store parameter itu mau kita pakai disemua event sheet ?
© mztolo 2006 – PB #2 membuat menu 119
Karena kalo spt sample di atas itu hanya bisa dipakai di event click tombol PREVIEW saja.
Pertama anda harus declare variable untuk datanya di “Instance Variables” spt ini :
string
ls_nama_window
Terus capture datanya anda ketik di open event dari sheet tersebut spt ini :
ls_nama_window = Message.StringParm
Sehingga koding di click event PREVIEW bisa ditulis spt ini :
// mztolo 2006
string kode1,kode2,dwfilter
kode1 =righttrim(sle_1.text)
kode2 =righttrim(sle_2.text)
dw_1.dataobject=ls_nama_window
dw_1.settransobject(sqlca)
if len(kode1)>0 and len(kode2)>0 then
dwfilter ="nis >='"+kode1+"' and nis <='"+kode2+"'"
elseif len(kode1) > 0 and len(kode2)=0 then
dwfilter ="nis ='"+kode1+"'"
elseif len(kode1) = 0 and len(kode2) >0 then
dwfilter ="nis ='"+kode2+"'"
else
© mztolo 2006 – PB #2 membuat menu 120
dwfilter=" "
end if
dw_1.setfilter(dwfilter)
dw_1.filter()
dw_1.retrieve()
dw_1.object.datawindow.print.preview='yes'
Note :
Cara atau aturan spt ini juga berlaku untuk variable atau parameter lain yg anda mau pakai di seluruh
event sheet anda atau object yg ada di sheet anda.
Bagaimana jika variable itu kita ingin pakai untuk seluruh aplikasi, artinya bersifat “public” atau
global ?
Anda bisa ketikkan di “Global Variables” spt ini :
“Global Variables”
ini bisa diakses dari
semua lokasi di
aplikasi.
Sedangkan “Instance Variables” bisa diakses dalam lingkup object tersebut atau bisa juga
disamakan/dianggap sbg property sebuah object.
Ok lebih detailnya anda bisa baca di help PB
Mmmm….saya pikir sudah cukup sampai disini
Eiiiittt… nanti dulu …apakah anda sudah puas ?!
Belum ? Mmmm….kenapa ?
Ok…coba jalankan kembali aplikasi anda….dan jalankan/buka sheet cetak data siswa/tabungan.
Previewkan….mmmm sukses !!
Sekarang dlm kondisi sheet preview ini aktif coba jalankan sheet cetak data ujian siswa…
Apa yg terjadi ? Window preview untuk yg kedua kali tdk mau tampil !
Benar sekali krn memang “w_preview” sudah tampil untuk data tabungan siswa.
Hal ini akan sama terjadi jika anda mencetak data ujian dan kemudian dlm kondisi masih preview
anda coba cetak juga data tabungan siswa.
Lalu bagaimana solusinya ? Anda ketik koding spt ini di click event menu laporan anda :
© mztolo 2006 – PB #2 membuat menu 121
w_preview w_pre1
OpenSheetWithParm(w_pre1,"dw_lap_tabungan",w_utama,5,original!)
Dan spt ini….
w_preview w_pre2
OpenSheetWithParm(w_pre2,"dw_lap_ujian",w_utama,5,original!)
Note :
Perintah di atas dipakai untuk membuka 2 window yaitu “w_pre1” dan “w_pre2” dari type
window/sheet yg sama yaitu “w_preview”
Dengan cara di atas barulah di mungkinkan untuk membuka sheet preview secara bersamaan dari 2
atau lebih laporan yg ada.
Tampak di gambar bawah isi click event menu “lap data tabungan siswa” :
Tampak di gambar bawah isi click event menu “lap data nilai ujian siswa” :
© mztolo 2006 – PB #2 membuat menu 122
Buktikan….dan…inilah hasilnya :
© mztolo 2006 – PB #2 membuat menu 123
Tampak sheet preview tampil untuk 2 buah laporan yg ada
Perlu dicatat juga cara ini berlaku jg untuk sheet/window yg lain yg mungkin anda mau tampilkan
berulang.
Mmmm sekarang anda sudah puas ? Blom juga ?
Apa kegunaan opensheetwithparm() yg lain ?
Datawindow memungkinkan kejadian spt ini…..
Misal ada sebuah tampilan “tabular” berbentuk row per row ke bawah tentunya….
Kemudian anda double click salah satu row…..tampilah modul edit untuk atau khusus row/data
tersebut.
Bagaimana membuka sheet editing ini agar sesuai dg row/data yg di click ?
Dengan opensheetwithparm() atau openwithparm() !! Benar sekali……
Masih blom puas juga ?! Mmmmm……..tetaplah untuk membaca dan belajar….
Kembangkan juga sheet preview yg ada sehingga benar2 bisa untuk preview semua bentuk laporan yg
© mztolo 2006 – PB #2 membuat menu 124
ada…….
Akhir kata…..Sukses untuk anda !!
© mztolo 2006 – PB #2 membuat menu 125
PB#14 (tambahan)
Sebelum melangkah lebih jauh di pemrograman PB saya ingin menambahkan beberapa hal yg
mungkin kelaknya berguna dan memudahkan…..
Coba anda buka workspace latihan anda sebelumnya….spt ini :
Kalo kita perhatikan mungkin ini adalah layout favorite anda…..ada system tree nya ada paint untuk
datawindow…..nama2 kolomnya dan tentunya properties…
© mztolo 2006 – PB #2 membuat menu 126
Tapi mungkin karena suatu hal maka….tampilan “berantakan” spt ini…
Perhatikan tampilan “kolom” ada diantara datawindow painter dan properties….
Lalu jika kita ingin mengembalikan keposisi semula bagaimana ?
Caranya ….klik menu spt gambar di bawah :
Dan anda bisa
perhatikan tampilan
akan rapi kembali…..
© mztolo 2006 – PB #2 membuat menu 127
Sekarang anda juga bisa membuat “custom” layout sendiri…..
Misal…dari tampilan “Default” di atas saya tdk mau modul “Export/Import Template XML”
ditampilkan….jadi cukup spt ini :
© mztolo 2006 – PB #2 membuat menu 128
Caranya ?
Close dulu modul “Export/Import Template XML” tersebut….
Terus klik menu VIEW -> LAYOUT -> MANAGE
Sampai tampil modul spt ini….
Selanjutnya klik icon nomor
2 dari kiri…. “New Layout”
sampai tampil spt ini…
Anda ketik misal “mztolo”
…..
Terus klik tombol “Apply
© mztolo 2006 – PB #2 membuat menu 129
Layout”….
Sekarang anda coba
bedakan…antara “Default”
dg “mztolo”
Mmmmm…..bedakan
?!
Berikutnya adalah
mengenai “control”
yg invisible…alias
tdk tampak…
Atau di setting propertiesnya….visible tdk di centang…
Perhatikan gambar berikut ini…
© mztolo 2006 – PB #2 membuat menu 130
Dlm sheet ada command button tapi tdk tampil …kenapa ?
Lihat propertiesnya….
Visible tdk di centang !! Alias
button ini di setting secara
invisible
Satu sisi memang di PB spt
itu…tapi satu sisi…mmm
jadi kita nggak tahu dimana
itu kontrol command
buttonnya….
Lalu bagaimana jika kita maunya invisible tetapi tetap tampil di waktu desainnya…
Caranya adalah…. Klik menu DESIGN -> SHOW INVISIBLES
Sehingga akan
tampil spt ini…
walau
invisible….
© mztolo 2006 – PB #2 membuat menu 131
Berikutnya adalah…membuat file library baru…
Apa itu ? Perhatikan gambar berikut…..
Itu adalah system tree
workspace anda….tampak
di sana hanya ada 1 file
library yaitu “siswa.pbl”.
Anda tahu di PB kita bisa
membuat aplikasi dg
beberapa
library….misalnya
begini….main
program..function…
custom object dan menu di
library “siswa.pbl”
Kemudian window sheet
ada di library
“transaksi.pbl” dan semua
report ada di library
“laporan.pbl”.
Dengan demikian nanti di
PB ada 1 exe misalnya dan
beberapa file “PBD” ……”pbl” kali ?! Bukan ….tapi “pbd” krn “pbl” setelah di build dan deploy
jadinya “pbd”
Dan jika anda perlu ubah di laporannya…anda cukup update di library “laporan.pbl” nya
Demikianlah….PB…lalu bagaimana cara menambah library baru ?
Klik kanan di “target” dan pilih “properties” spt ini…
Sampai tampil spt ini….
© mztolo 2006 – PB #2 membuat menu 132
Klik tombol
“NEW” untuk
membuat library
baru…..
Ketik nama library-nya misal ….”transaksi” dank klik tombol SAVE
Tampil modul spt ini…dan anda bisa menambahkan keterangan untuk library tsb…
Klik tombol
OK….dan
hasilnya spt
ini….
Dan tampak juga
di system tree
anda….
Nah pada saat
membuat sheet
atau modul yg
© mztolo 2006 – PB #2 membuat menu 133
lain…..jgn lupa simpan di library “transaksi.pbl” tersebut….
Hasilnya spt
ini…….
Ada cara lain ?
Ada dong……
Klik kanan di
“target” dan pilih
“NEW”
Pilih “library painter”
dan klik tombol OK
Perhatikan di PB anda tampil toolbar untuk “library” spt ini…
© mztolo 2006 – PB #2 membuat menu 134
Klik tombol pertama untuk membuat library baru….
Ikutin langkah2 selanjutnya spt yg ada pada halaman 8….
Hanya saja blm ada di system tree anda…..
Lalu cara
menambahkannya
bagaimana ?
Klik kanan lagi “target” ….pilih properties….sampai tampil spt ini
© mztolo 2006 – PB #2 membuat menu 135
Klik tombol
“BROWSE”
Pilih library yg
anda mau “add” dan klik tombol OPEN
Akan kembali ke posisi modul sebelumnya ….Terus klik tombol OK
Maka tampak di system tree anda spt ini…..
Ok……saya pikir
tambahannya ini dulu….
Tetap untuk semangat…
dan terus lah menggali….
Jangan lupa tetap kreatif….dan tentunya perbanyak rasa syukur
Akhir kata ….sukses untuk anda !!
© mztolo 2006 – PB #2 membuat menu 136