Friday, July 29, 2011

PowerBuilder 10.5.2 EAServer 6.0.2 Linux

Wihartoyo     Friday, July 29, 2011    

Ceritanya bulan ini nih, ane lagi ada kerjaan porting powerbuilder component ke Sybase EAServer.  Targetnya mendapatkan viabilitas Sybase EAServer terutama yang berjalan di Linux untuk hosting existing application milik kantor. Oleh karena, PowerBuilder yang ada adalah versi 10.5.2, maka pilihan EAServer jatuh pada versi 6.0.2 dan developer edition tentunya.

Pertama, aku coba make OS nya Oom Bill Gate. Microsoft Windows. Fine, semuanya berjalan lancar.  Dengan beberapa penyesuaian mengikuti aturan main di EAServer, aplikasi bisa diporting dengan baik ke EAServer. Client bisa konek dan dioperasikan dengan baik. Fine bin gak ada masalah tentunya.
Berikutnya, bagaimana dengan di Linux?
Grrr....! Full masalah! Ha ha ha....!

Pada aplikasi yang berjalan saat ini ada satu logic yang dibuat untuk mengakomodasi penampilan report yang bersifat dinamis dan bisa di-deploy secara partial tanpa melakukan kompilasi ulang.

PowerBuilder dengan datawindow-nya memang sangat unik. Datawindow yang merupakan object dengan kapabilitas entry data dan data presentation bisa di-assign ke visual / non visual object pada presentasi aplikasi dengan berbagai cara.
Cara Pertama. Dengan meng-assign secara langsung dari datawindow object name yang merupakan variable string ke datawindow control maupun datastore.
::Syntax nya

dw_1.dataobject = "dwObjectName"
ds_1.dataobject = "dwObjectName"

Cara Kedua. Dengan meng-assign psr filename.  Dalam hal ini, datawindow object diekspor sebagai psr file dan diassign ke dataobject.

::Syntax nya
dw_1.dataobject = "[path_to]\psrFileName.psr"
ds_1.dataobject = "[path_to]\psrFileName.psr"

Cara Ketiga.  Dengan datawindow syntax.  Cara ini relatif dynamic dimana datawindow object yang diassign tidak harus ada pada current library list. Atau bahkan bisa dengan membuat datawindow object baru via script.  Namun di sini ane bukan mau cerita yang via script, tapi yang via datawindow object yang tersimpan pada library lain di luar current library list.  Bahkan masih dalam bentuk *.pbl.  Metoda ini menggabungkan LibraryExport PowerFunction dan Create method dari datawindow/datastore control.


::Syntax nya
String sintake,ErroTeks_e
datastore ds_e
integer error_e
ds_e = create datastore
sintake = LibraryExport("[path_to]\PBLFileName.pbl","dwObjectName",ExportDatawindow!)
error_e = ds_e.create(sintake,ErrorTeks_e)
if error_e > 1 then
if error_e > 0 then
    ds_e.settransobject(sqlca)
end if
dst....

Dari ketiga cara di atas kebetulan cara yang diadaptasi oleh aplikasi punya kantor make cara yang ketiga. Nah, lo....!
Semenjak PowerBuilder 9.0 sybase sudah merubah character encoding untuk source PowerBuilder dari DBCS menjadi unicode dengan default encodingnya adalah UTF16LE.
Entah benar enah tidak dugaan saya, inilah kemudian yang mengakibatkan kegagalan routine ini ketika dijalankan dengan memberikan error exception CORBA.MARSHAL bad UTF-8 data.
Awalnya, karena terlalu rajin, ane coba deploy ke berbagai distro utama seperti Ubuntu, RedHat, SuSE, SlackWare, dan terakhir Gentoo. berharap salah satu dari distro tersebut bisa berbaik hati dengan memberikan hasil seperti yang terjadi di Windows.  Namun jauh panggang dari api, usaha gak memberikan hasil. Kambing guling tetap mentah.....
Lama, ane berusaha untuk mencari alternatif dari metoda ini. Akhirnya kepikiran juga kayak begini:

  1. Library yang tadinya *.pbl dibikin jadi *.pbd.
  2. Kemudian library listnya diubah dengan menambahkan pbd file yang berisi datawindow object yang akan digunakan. 
  3. Kemudian assignment datawindow bisa dilakukan dengan menggunakan syntax pertama. 
  4. Pada akhir method, library list dikembalikan kepada nilai awalnya. 
Clear!
Aplikasi dideploy ke server, client di jalankan. Konek sukses. Transaksi sukses. Reporting sukses.  ALHAMDULILLAH!!!! Dan ternyata cukup sederhana.

Recommended