powerbuilder tutorial

136
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 1 st 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 “menuOk 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

Upload: dzas42

Post on 21-Jan-2018

151 views

Category:

Technology


12 download

TRANSCRIPT

Page 1: 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

Page 2: Powerbuilder tutorial

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

Page 3: Powerbuilder tutorial

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

Page 4: Powerbuilder tutorial

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

Page 5: Powerbuilder tutorial

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

Page 6: Powerbuilder tutorial

……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

Page 7: Powerbuilder tutorial

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

Page 8: Powerbuilder tutorial

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

Page 9: Powerbuilder tutorial

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

Page 10: Powerbuilder tutorial

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

Page 11: Powerbuilder tutorial

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

Page 12: Powerbuilder tutorial

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

Page 13: Powerbuilder tutorial

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

Page 14: Powerbuilder tutorial

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

Page 15: Powerbuilder tutorial

Sukses untuk anda !!

© mztolo 2006 – PB #2 membuat menu 15

Page 16: Powerbuilder tutorial

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

Page 17: Powerbuilder tutorial

Klik tombol “Next >”

© mztolo 2006 – PB #2 membuat menu 17

Page 18: Powerbuilder tutorial

Klik table “tblsiswa” dan klik tombol “Add All” serta diikuti tombol OK, sampai tampil modul spt

ini……

© mztolo 2006 – PB #2 membuat menu 18

Page 19: Powerbuilder tutorial

Klik tombol “Next >”

© mztolo 2006 – PB #2 membuat menu 19

Page 20: Powerbuilder tutorial

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

Page 21: Powerbuilder tutorial

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

Page 22: Powerbuilder tutorial

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

Page 23: Powerbuilder tutorial

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

Page 24: Powerbuilder tutorial

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

Page 25: Powerbuilder tutorial

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

Page 26: Powerbuilder tutorial

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

Page 27: Powerbuilder tutorial

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

Page 28: Powerbuilder tutorial

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

Page 29: Powerbuilder tutorial

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

Page 30: Powerbuilder tutorial

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

Page 31: Powerbuilder tutorial

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

Page 32: Powerbuilder tutorial

Untuk modifikasi datawindow nya…klik “Modify DataWindow…”

Sehingga tampak spt di bawah….

© mztolo 2006 – PB #2 membuat menu 32

Page 33: Powerbuilder tutorial

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

Page 34: Powerbuilder tutorial

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

Page 35: Powerbuilder tutorial

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

Page 36: Powerbuilder tutorial

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

Page 37: Powerbuilder tutorial

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

Page 38: Powerbuilder tutorial

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

Page 39: Powerbuilder tutorial

Akhir kata…..Sukses untuk anda !!

© mztolo 2006 – PB #2 membuat menu 39

Page 40: Powerbuilder tutorial

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

Page 41: Powerbuilder tutorial

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

Page 42: Powerbuilder tutorial

© mztolo 2006 – PB #2 membuat menu 42

Page 43: Powerbuilder tutorial

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

Page 44: Powerbuilder tutorial

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

Page 45: Powerbuilder tutorial

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

Page 46: Powerbuilder tutorial

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

Page 47: Powerbuilder tutorial

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

Page 48: Powerbuilder tutorial

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

Page 49: Powerbuilder tutorial

Lanjutkan dg item menu yg lain shg hasilnya spt ini…

© mztolo 2006 – PB #2 membuat menu 49

Page 50: Powerbuilder tutorial

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

Page 51: Powerbuilder tutorial

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

Page 52: Powerbuilder tutorial

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

Page 53: Powerbuilder tutorial

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

Page 54: Powerbuilder tutorial

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

Page 55: Powerbuilder tutorial

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

Page 56: Powerbuilder tutorial

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

Page 57: Powerbuilder tutorial

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

Page 58: Powerbuilder tutorial

Atau spt ini….

Anda juga bisa memakai menu text nya…spt ini

© mztolo 2006 – PB #2 membuat menu 58

Page 59: Powerbuilder tutorial

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

Page 60: Powerbuilder tutorial

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

Page 61: Powerbuilder tutorial

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

Page 62: Powerbuilder tutorial

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

Page 63: Powerbuilder tutorial

“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

Page 64: Powerbuilder tutorial

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

Page 65: Powerbuilder tutorial

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

Page 66: Powerbuilder tutorial

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

Page 67: Powerbuilder tutorial

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

Page 68: Powerbuilder tutorial

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

Page 69: Powerbuilder tutorial

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

Page 70: Powerbuilder tutorial

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

Page 71: Powerbuilder tutorial

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

Page 72: Powerbuilder tutorial

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

Page 73: Powerbuilder tutorial

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

Page 74: Powerbuilder tutorial

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

Page 75: Powerbuilder tutorial

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

Page 76: Powerbuilder tutorial

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

Page 77: Powerbuilder tutorial

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

Page 78: Powerbuilder tutorial

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

Page 79: Powerbuilder tutorial

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

Page 80: Powerbuilder tutorial

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

Page 81: Powerbuilder tutorial

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

Page 82: Powerbuilder tutorial

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

Page 83: Powerbuilder tutorial

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

Page 84: Powerbuilder tutorial

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

Page 85: Powerbuilder tutorial

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

Page 86: Powerbuilder tutorial

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

Page 87: Powerbuilder tutorial

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

Page 88: Powerbuilder tutorial

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

Page 89: Powerbuilder tutorial

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

Page 90: Powerbuilder tutorial

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

Page 91: Powerbuilder tutorial

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

Page 92: Powerbuilder tutorial

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

Page 93: Powerbuilder tutorial

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

Page 94: Powerbuilder tutorial

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

Page 95: Powerbuilder tutorial

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

Page 96: Powerbuilder tutorial

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

Page 97: Powerbuilder tutorial

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

Page 98: Powerbuilder tutorial

Atau cascade spt ini :

© mztolo 2006 – PB #2 membuat menu 98

Page 99: Powerbuilder tutorial

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

Page 100: Powerbuilder tutorial

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

Page 101: Powerbuilder tutorial

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

Page 102: Powerbuilder tutorial

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

Page 103: Powerbuilder tutorial

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

Page 104: Powerbuilder tutorial

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

Page 105: Powerbuilder tutorial

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

Page 106: Powerbuilder tutorial

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

Page 107: Powerbuilder tutorial

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

Page 108: Powerbuilder tutorial

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

Page 109: Powerbuilder tutorial

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

Page 110: Powerbuilder tutorial

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

Page 111: Powerbuilder tutorial

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

Page 112: Powerbuilder tutorial

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

Page 113: Powerbuilder tutorial

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

Page 114: Powerbuilder tutorial

Berikut jika tdk pake rulers :

Coba juga tampilan “zoom” 85% nya spt ini :

© mztolo 2006 – PB #2 membuat menu 114

Page 115: Powerbuilder tutorial

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

Page 116: Powerbuilder tutorial

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

Page 117: Powerbuilder tutorial

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

Page 118: Powerbuilder tutorial

“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

Page 119: Powerbuilder tutorial

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

Page 120: Powerbuilder tutorial

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

Page 121: Powerbuilder tutorial

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

Page 122: Powerbuilder tutorial

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

Page 123: Powerbuilder tutorial

Buktikan….dan…inilah hasilnya :

© mztolo 2006 – PB #2 membuat menu 123

Page 124: Powerbuilder tutorial

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

Page 125: Powerbuilder tutorial

ada…….

Akhir kata…..Sukses untuk anda !!

© mztolo 2006 – PB #2 membuat menu 125

Page 126: Powerbuilder tutorial

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

Page 127: Powerbuilder tutorial

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

Page 128: Powerbuilder tutorial

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

Page 129: Powerbuilder tutorial

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

Page 130: Powerbuilder tutorial

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

Page 131: Powerbuilder tutorial

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

Page 132: Powerbuilder tutorial

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

Page 133: Powerbuilder tutorial

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

Page 134: Powerbuilder tutorial

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

Page 135: Powerbuilder tutorial

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

Page 136: Powerbuilder tutorial

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