Sabtu, 22 Februari 2014

Tips Belajar Oracle APEX

Posting ini adalah sharing pengalaman saya saat belajar teknologi ini, mulai dari 0 sampai sekarang, perasaan sih masih 0 juga :D.Kenapa saya katakan dari 0 karena saya berangkat dari oracle form dan report sejak tahun 2002 sampai 2009. Yang ternyata hanya pengetahuan PL/SQL yang akan digunakan sebagai modal untuk kedunia APEX. Sedangkan HTML/CSS, JS dengan segala tetek bengeknya sangat asing buat saya.

Ketika di masa oracle Form 10g terakhir yang saya pakai, saya mengambil langkah untuk belajar web murni, karena secara pribadi saya anggap oracle form sudah "obsolete". dan ingin masuk ke web "murni", mulailah coba install  PHP karena gak dapat project di situ akhirnya mandek. Terus mencoba belajar JAVA, pas install dan mau belajar java yang mana nih banyak bener variasinya? bingung lagi. Akhirnya seorang client diakhir 2008 meminta saya untuk mempelajari teknologi ini, namun karena project di oracle form saya lupakan. Saat masuk 2009 ketika nganggur gak ada proyek saya iseng bongkar file dan ketemu dokumen lama "2 Days + Developer Guide", lalu coba install dan ikuti langkah-langkahnya wah menarik dan mudah. Akhirnya saya memastikan ini yang akan saya pelajari.lalu saya coba ubah existing apps yang saya bangun dari oracle form menjadi APEX.

Ketika musim project mulai tidak mudah ternyata meyakinkan client untuk pindah, selain tidak populer juga akan merubah mindset user untuk cara pemakaian. Saya rayu kembali dengan demo apps versi apex, client belum juga goyah. Lalu langkah terakhir saya demokan fitur-fitur terbaik salah satunya yang membuat mereka luluh adalah Interactive Report "Wow" mereka suka dan diputuskan oke kita pindah ke APEX.

Oke bagi pembaca yang tertarik untuk belajar teknologi ini teknik ini berdasar pengalaman pribadi belajar apex tanpa mentor atau training resmi, cara ini saya anggap cara bonex:

  • Ubah Paradigma dan persepsi.
Dulu ketika kita tahu Oracle maka persepsi kita akan tentang Database, lalu developer mereka oracle form, report, designer dan discoverer. Oracle APEX agak jauh dari itu, teknologi ini membawa anda ke dunia web development membutuhkan banyak kemampuan HTML/CSS, JS dan pastinya PL/SQL sebagai dasar.

Documentasi tutorial tentang APEX memang sangat mudah, mungkin seakan-akan tidak terlalu butuh skill web developer, saya pastikan YA untuk simple apps. Namun kita masuk dunia nyata di proyek dengan permintaan user yng semakin kompleks, UI yang interaktif maka disitulah pengetahuan web diminta.

Saya malah lebih prefer ambil engineer yang pengalaman di PHP, .net dll, dibanding harus ambil dari background oracle form. Saat perusahaan membutuhkan engineer APEX. karena selain dominan di SQL, PL/SQL, UI tidak lepas dari HTML/CSS dan JS.
  • Belajarlah dari Oracle jangan dari Google.

Banyak yang saya lihat ketika seseorang mau belajar APEX langsung "Jump into action" dengan cara googling. Saya sarankan jangan, tapi lakukan install APEX di oracle XE, lalu download full library. Disitu anda akan memperkuat basic konsep dari APEX terlebih dahulu.
Lalu cobalah buat aplikasi dengan mengikuti dokumen dengan belajar melalui Oracle By Example.
  • Belajar APEX dari APEX.
Salah satu feature learning apex yang banyak terlupakan adalah belajar APEX dari APEX. Caranya adalah dengan install Sample apps di apex lantas pelajarilah bagaimana mereka membangun aplikasi kecil itu. Disitu akan diperoleh banyak teknik yang berguna.
  • Jangan pernah memulai dari Cook Book.
Segala sesuatu itu harus mulai dari nol dan bergerak perlahan, jangan berharap langsung bisa berlari tanpa harus merangkak terlebih dahulu. kenapa saya sama sekali tidak menyarankan baca cookbook untuk tingakt pelajar pemula karena disana anda hanya mempelajari shortcut2 tanpa memperkuat pengetahuan dasar fondasi konsep kuat dari APEX. Saran saya untuk selain Application Builder User's Guide adalah Beginning Application Express 4 lalu bisa lanjut ke Pro Oracle Application Express 4. Disana anda akan memperoleh kosep yang bagus bagaimana APEX bekerja dan dibangun.
  • Implementasikan dalam sebuah Proyek.
Apalah artinya teori atau ikut kursus sebuah teknologi jika tidak pernah dipakai dalam real case sebuah pembuatan aplikasi dari teknologi tersebut?. Seperti yang telah saya ceritakan bagaimana nekatnya sy mencoba meyakinkan sebuah client untuk memakai teknologi ini dengan pengetahuan pas-pasan, gak apa-apa kalau berani jadi pintar pasti harus melalui jalan tolol dulu :D, kalau saya review coding lama maka terlihat bagaimana teknik yang dipakai kadang tidak efektif, aneh tapi sampai juga hehehe. belajar tapi salah gak apa-apa asal tidak dianggap menjadi sebuah kebenaran itu prinsip bonex apex...cling
  • Ikutlah komunitas.

Inilah yang tidak kita miliki, mereka sangat bagus melakukan organisasi komunitas dan berbagi. Semakin banyak orang pintar dalam sebuah teknologi maka semakin cepat teknologi tersebut berkembang, taukah anda bahwa pengembang APEX sekarang adalah dulu dari orang-orang pemakai apex? bahwa sample apps, Team development diapex itu dari user2 yang pemakai yang akhirnya diadopsi oleh Oracle untuk masuk kedalam APEX?.

Maka saran ini berlaku pada anda yang ingin belajar, carilah di forum oracle apex, ikuti blog-blog, twitter para expertise APEX. Jangan malu bertanya, bahasa inggris pas-pasan gak masalah kalau perlu pakai bahasa tarzan. Toh mereka tau kita bukan orang inggris, dalam hal ini pakai lah adagium jawa "Isin Ra Katho'an" artinya anda boleh malu kalau gak pake sempak atau celana saja, selain itu gak usah malu. orang kita kan sering malu gak pada tempatnya.
  • Apakah anda terlalu "Senior" untuk sebuah teknologi baru?

Ini pertanyaan paling awal sebenarnya sebelum memulai belajar APEX? tapi saya tempatkan terakhir :D. Ini sebuah dilema besar didunia IT Indonesia, programmer kita jarang yang ingin berlama-lama di posisi ini karena memang penghargaan pada programmer yang bagus tidak terlalu baik, orang yang agak senior sudah bisa dipastikan mulai menjauhi posisi ini, seakan-akan hanya buat anak kuliahan dan fresh grad. Jika menurut anda belum cukup tua maka silahkan explore dunia web teknologi yang luas ini untuk diimplementasikan di Oracle APEX. Mari sama-sama kita belajar

Salam Bonex APEX
Jangan tidur sebelum bisa !

Fenomena Oracle APEX di Indonesia

Tidak terasa sudah memasuki tahun ke 5 memakai teknologi ini. Dari release version 3.2 sampai 4.2.4 sangat menyenangkan, namun mengapa di asia tenggara teknologi ini tidak terlalu populer?

Jawabannya adalah karena yang mempopulerkan teknologi adalah kalangan komunitas oracle, bukan stakeholder dalam hal ini Oracle. Ada pengalaman menarik sebuah client pemakai APEX menyatakan di depan sales oracle , si sales malah balik tanya teknologi apa itu? hehehe.Kanapa para sales ini tidak mengajukan alternatif ini? karena sudah jelas ini sebuah feature dari Database oracle layaknya oracle SQL developer, data modeler dll yang tidak akan kena lisensi tambahan.dan tidak akan menjadi nilai tambah bagi mereka bukan.

Pernah juga disuruh melakukan test wawancara thd seorang kandidat yang katanya pernah pakai, ketika saya tanya apa itu APEX? jawaban lugasnya adalah "salah satu Oracle Report tool"!!!, saya cuma garuk-garuk kepala.

Saya pernah ajukan teknologi sebagai salah basis tenologi pengembangan dan cloud, jawabannya sudah bisa ditebak belum bisa meyakinkan :D. Sampai pada keputusan oke saya akan lakukan ini sendiri.

Cara melihat popularitas teknologi gampang, lihat saja di job hunter disebuah region, maka disitu akan menunjukkan trend populer sebuah teknologi. Sampai saat ini teknologi ini belum begitu populer di asia.

Semakin kuat  komunitas oracle di sebuah negara maka teknologi ini semakin populer itu yang sepanjang pengamatan pribadi saya.

Kelemahan sysdev programmer di asia adalah :

  • Lemahnya komunitas.

Di asia pada umumnya komunitas developer tidak sekuat Amerika, Eropa dan Australia. Ini membawa dampak pada kekurangan resource untuk belajar bagi para pemula serta mengikuti trend teknologi. Di region yang saya sebutkan mereka sangat kuat bahkan konferensi selalu rutin dilakukan dengan resource yang tertata rapi. jangan salah sangka saya disini berbicara atas komunitas bukan kemampuan orang per orang.


  •  Selalu under-priced sebagai developer.

Sistem development di indonesia susah, coba sebutkan sebuah perusahaan IT besar yang berbasis sisdev murni, jawabannya tidak ada. semua harus di-support dengan jual hardware, lisensi dsb. Sebagai developer pasti akan dihargai lebih murah dari system analist atau bisnis analis apalagi dibandingakn dengan konsultan fungsional. Akhirnya programmer muda pikirannya selalu ingin cepat pindah dari dunia development ke "menejemen" supaya salary naik. Sedangkan di luar tidak demikian, programmer dihargai atas skillnya, bahkan kalau lihat trendnya sekarang trand salaryy tertinggi adalah mobile developer. Dengan fenomena ini apa efeknya? resource yang berbahasa indonesia/native di asia akan susah di cari yang bagus. Coba buktikan di toko buku IT berapa banyak buku karangan berbahasa indonesia yang tebalnya bisa ratusan halaman? isinya biasanya tentang pengenalan, cara install dan cookbook tipis-tipis. bahkan yang paling memalukan saya pernah beli buku tentang HTML yang ternyata isinya banyak menterjemahkan isi dari w3schools.


  • Kurang ketat terhadap standard SDLC.

Ini lebih banyak tentang pengalaman pribadi sih, cuma sekarang setelah berkumpul disebuah PMA dengan programmer yang lain itu juga yang terjadi. Kita kesulitan mengikuti standard, mungkin kelamaan dengan teknik bonex hahaha, standard coding, SDLC, versioning, semua harus terukur :D. Hingga pada suatu saat ketika saya ngotot "menyeleweng" dari pakem teman pernah pengalaman di konsulatan asia pasifik, lantas bilang "coba tunjukkan sebuah software asia yang mendunia?" saya jawab eeng bingung juga kasi contoh :D. Ya itu salah satu alasannya dia bilang karena kita tidak terlalu bagus dalam standard.

Namun dengan segala kelemahan disekitar kita, maka kita harus selalu kreatif dan belajar untuk membangan dunia software yang semakin menarik, memjanjikan, profitable dan layak untuk dijadikan mata air penghidupan.


Tetap semangat, jangan tidur sebelum bisa !!!
Salam Bonex

Jumat, 14 Februari 2014

APEX, QR Code dan googleapis

Pada dasarnya QR code bisa memakai third party atau bisa di install sendiri untuk menghasilkan return URL atau binary.Pada kasus ini kita akan mencoba memakai googleapis yang mengembalikan image .png (binary).

Adapun hal yang bisa kita lakukan pada Oracle APEX adalah.

--- create new ACL for HR
BEGIN
  DBMS_NETWORK_ACL_ADMIN.create_acl (
    acl          => 'hr_acl_file.xml', 
    description  => 'A test of the ACL functionality',
    principal    => 'HR',
    is_grant     => TRUE, 
    privilege    => 'connect',
    start_date   => SYSTIMESTAMP,
    end_date     => NULL);

  COMMIT;
END;
/
-- assign ACL to networks chart.googleapis.com
BEGIN
  DBMS_NETWORK_ACL_ADMIN.assign_acl (
    acl         => 'hr_acl_file.xml',
    host        => '*.googleapis.com', 
    lower_port  => 80,
    upper_port  => 9999); 

  COMMIT;
END;
/
  • Buat wallet memakai OWM atau ORAPKI (jika akses SSL).
  • Buat function atau procedure input URL yang mereturn Binary.
  • Lalu tampilkan dalam Report dan Form process APEX untuk menyimpan ke dalam BLOB kolom. 
  • declare
      v_encode_url varchar2 (1000);
    begin
     v_encode_url := 'https://chart.googleapis.com/chart?chs='||:P2_SIZE||'&cht=qr&chl='||utl_url.escape(:P2_QRCODE);
        update emp
        set EMP_PHOTO =  return_binary_from_url (v_encode_url)           
           , ATTACH_MIMETYPE =  'image/png'         
           , ATTACH_FILENAME  =  :P2_EMPNO||'_QR_CODE.png'          
           , ATTACH_LAST_UPDATE = sysdate            
        where empno = :P2_EMPNO;
    end;
    
Penampakan sebelum upload:

Penampakan sesudah upload:

Cara test koneksi tanpa proxy :
 
select utl_http.request('https://www.google.com'
                         , null
                         , 'file:/mywallets/google.com'
                         , 'your wallet password')
  from dual;

Cara test koneksi dengan proxy :
 
select utl_http.request('https://www.google.com'
                         , 'username:pwdproxy@yourproxyhost:yourproxyport'
                         , 'file:/mywallets/google.com'
                         , 'your wallet password')
  from dual;

Demo tidak bisa dibuat di apex.oracle karena tidak memungkinkan setup ACL dan wallet

Sabtu, 08 Februari 2014

QR Codes on APEX

Anda ingin menampilkan QR code kedalam APEX seperti ini ?
Jangan khawatir anda bisa memakai bantuan Google Developer untuk menampilkan di APEX.

Demo : di sini

Sabtu, 01 Februari 2014

Dynamic Highlight on classic & interactive report

Pada posting kali ini sya akan menunjukkan bagaimana melakukan highlight secara bersamaan pada classic report dan interactive report memakai Dynamic Action(DA).

Skenario :
  • Sebuah Item Parameter bisa hidden atau select list : PXX_DEPT_HL.
  • Sebuah report classic thd : DEPT 
  • select null "icon"
    ,deptno, DNAME
    ,case when deptno = :PXX_DEPT_HL then 'HIGHLIGHT' else null end HIGHLIGHT 
    from dept
    
  • Sebuah report interactive EMP.
  • select EMP.EMPNO as EMPNO,
        EMP.ENAME as ENAME,
        EMP.JOB as JOB,
        EMP.MGR as MGR,
        EMP.HIREDATE as HIREDATE,
        EMP.SAL as SAL,
        EMP.COMM as COMM,
        EMP.DEPTNO as DEPTNO ,case when deptno = :PXX_DEPT_HL then 'HIGHLIGHT' else null end HIGHLIGHT 
     from EMP EMP
    
  • Saat icon pada report calssic di clik / atau nilai PXX_DEPT_HL berubah akan memeri hilghlight pada kedua report sesuai nilainya

Logic :
  • Pada column icon buatlah sebuah link dengan action url:
    javascript:$s('PXX_DEPT_HL','#DEPTNO#');
  • Pada column dname HTML Expression:
    <span id="#HIGHLIGHT#DNAME#R#">#DNAME#</span>
  • Pada report interactive buatlah format highlight row dengan kodisi highlight=HIGHLIGHT.
  • Buatlah DA thd item PXX_DEPT_HL dengan event : change dan action : refresh report classic.
  • Buatlah DA pada report classic dengan event : after refresh dengan action : Execute Javascript Code :
    $("[id^=HIGHLIGHT]").closest('tr').children('td').css("background-color", "#FD4");
    dan Refresh region report interactive.

Demo : disini