Selasa, 27 Desember 2011

Akses Aplikasi APEX melalui Android Mobile Phone

Setelah berhasil me-publish aplikasi apex yang saya buat, maka sekarang mencoba mengaksesnya melalui mobile device. Berikut laporan sekilas.
  • Akses paling bagus memakai android terutama yg sudah dual core proc touch screen, untuk yang berbasis non touch screen bakal ruwet
  • Javascript dan CSS semua aktif saya sudah coba pake: ie,Skyfire,Dolphin.
  • Flash Chart bisa aktif saya sudah coba pake: Skyfire,Dolphin untuk firefox tidak bisa
  • Bermasalah saat memanggil report yang tampil inline dengan pdf file, kasus saya memakai report server Oracle Business Intelligence Publisher Release 10.1.3.4 with OC4J Standalone
  • Saya sudah coba beberapa browser,ie,skyfire,dolphin, opera, firefox semuanya gagal, kayaknya butuh browser yg ada plugin pdf viewernya layaknya akses bbrowser melalui PC/Laptop.
  • Untuk akses ke home BI pub berhasil, namun login selalu gagal, ini ternyata masalah SSL di BI pub, setelah di non aktifkan SSL berhasil.

Kesimpulan :
Aplikasi APEX masih harus menunggu technologi browser android seperti pc supaya bisa mengakses aplikasi yang terintegrasi dengan BI publisher. untuk transaksi yang lain sudah oke.

Kamis, 22 Desember 2011

Install APEX 4.1 on Oracle XE 11g

Oracle XE 11g sebenarnya telah ter-install APEX 4, kalau anda lihat pada user list maka akan ada user :ANONYMOUS, FLOWS_FILES, APEX_PUBLIC_USER dan APEX_040000.
Pastikan user ANONYMOUS ada, karena user ini yang akan dipakai dalam EPG, untuk OHS APEX_PUBLIC_USER yang akan dipakai. gambar dibawah setelah anda berhasil install oracle XE 11g



Lakukan langkah2 berikut:
  1. Lakukan Setup Requirement DB
    • Checking the shared_pool_size of the Target Database login ke database memakai user SYS as SYSDAB
    • SQL> ALTER SYSTEM SET SHARED_POOL_SIZE='100M' SCOPE=spfile;
      SQL> SHUTDOWN
      SQL> STARTUP
      
    • PL/SQL Web Toolkit: bisa di skip karena kita memakai oracle XE 11g j
  2. Tutup HTTP port yang telah dipakai:8080 menjadi 0
  3. SQL> EXEC DBMS_XDB.SETHTTPPORT(0);
    
  4. Extract file ke dalam folder c:\apex41 setelah berhasil akan ada folder apex disitu
  5. Pindah ke working directory :
  6. cd c:\apex41\apex
    
  7. Panggil sqlplus dan login sysbagai SYS:
  8. Lakukan instalasi APEX: catatan untuk rekomendasi buatlah tablespace yg baru menggantikan SYSAUX
  9. @apexins SYSAUX SYSAUX TEMP /i/
    
  10. Tunggu proses sampai selesai : boleh bikin kopi dulu trus rokok'an kalo anda merokok hehehe
  11. Reviewing a Log of an Installation Session: file Install_tanggal.log pastikan ada log berikut
  12. Thank you for installing Oracle Application Express. Oracle Application Express is installed in the APEX_040100 schema.
  13. Verifying the Validity of an Oracle Application Express Installation: Pastikan hasilnya VALID
  14. SELECT STATUS FROM DBA_REGISTRY
    WHERE COMP_ID = 'APEX';
    
  15. Change the Password for the ADMIN Account: masih login sebagai SYS
  16. @apxchpwd
    
  17. Configure the Embedded PL/SQL Gateway
    • Running the apex_epg_config.sql Configuration Script: working dir masih c:/apex41/apex
    • @apex_epg_config SYSTEM_DRIVE:\TEMP
      
    • Updating the Images Directory: working dir masih c:/apex41/apex
    • @apxldimg.sql c:\apex41
      
    • Verifying the Oracle XML DB HTTP Server Port
    • SELECT DBMS_XDB.GETHTTPPORT FROM DUAL;
      
    • Enabling Oracle XML DB HTTP Server
    • EXEC DBMS_XDB.SETHTTPPORT(8080);
      
  18. Enable Network Services in Oracle Database 11g
  19. DECLARE
    ACL_PATH VARCHAR2(4000);
    ACL_ID RAW(16);
    BEGIN
    -- Look for the ACL currently assigned to '*' and give APEX_040100
    -- the "connect" privilege if APEX_040100 does not have the privilege yet.
    SELECT ACL INTO ACL_PATH 
    FROM DBA_NETWORK_ACLS
    WHERE HOST = '*' AND LOWER_PORT IS NULL AND UPPER_PORT IS NULL;
    -- Before checking the privilege, ensure that the ACL is valid
    -- (for example, does not contain stale references to dropped users).
    -- If it does, the following exception will be raised:
    --
    -- ORA-44416: Invalid ACL: Unresolved principal 'APEX_040100'
    -- ORA-06512: at "XDB.DBMS_XDBZ", line ...
    --
    SELECT SYS_OP_R2O(extractValue(P.RES, '/Resource/XMLRef')) INTO ACL_ID
    FROM XDB.XDB$ACL A, PATH_VIEW P
    WHERE extractValue(P.RES, '/Resource/XMLRef') = REF(A) AND EQUALS_PATH(P.RES, ACL_PATH) = 1;
    DBMS_XDBZ.ValidateACL(ACL_ID);
    IF DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE(ACL_PATH, 'APEX_040100','connect') IS NULL THEN
    DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(ACL_PATH,'APEX_040100', TRUE, 'connect');
    END IF;
    EXCEPTION
    -- When no ACL has been assigned to '*'.
    WHEN NO_DATA_FOUND THEN
    DBMS_NETWORK_ACL_ADMIN.CREATE_ACL('power_users.xml','ACL that lets power users to connect to everywhere','APEX_040100', TRUE, 'connect');
    DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL('power_users.xml','*');
    END;
    /
    COMMIT;
    
  20. Post Installation Tasks for Upgrade Installations
    • Remove Prior Oracle Application Express Installations
    • DROP USER APEX_040000 CASCADE;
    • Fix Invalid ACL in Oracle Database 11g
    • EXEC DBMS_NETWORK_ACL_ADMIN.DELETE_PRIVILEGE('power_users.xml', 'APEX_040000');
    • Ubah default profile menjadi unlimited semua, life time dan lock untuk 11g ini wajib dilakukan agar setelah 180 hari user ANONYMOUS tidak di-lock, tau buatlah profile baru dengan unlimited life time
  21. Test Drive : http://127.0.0.1:8080/apex/

Sumber :
Oracle® Application Express
Installation Guide
Release 4.1
E21673-03

Senin, 19 Desember 2011

APEX = PL/SQL + JS/JQUERY + HTML/CSS

Semakin kompleks aplikasi maka akan semakin terasa kebutuhan akan tiga teknologi tersebut, maka sebenarnya dalam mengembangkan aplikasi berbasis Oracle APEX kita memerlukan 3 jenis team development. Ini saya rasakan saat mencoba meningkatkan kompleksitas aplikasi yang saya bangun, kesulitan terbesar knowledge di dua bagian ini, teknik bonek kurang bagus karena cuma main copy-paste dari code orang lain dengan kesulitan memahami logic dari code tersebut, sehingga saat terjadi variasi lumayan ruwet untuk memodifikasi.

Saya berangkat dari oracle developer yang notabene, buta terhadap teknologi web, pada awalnya terasa sekali kesulitan untuk mengkonversi konsep trigger, process oracle developer ke dalam page render dan page processing APEX yang sudah murni webbase teknologi. Oracle form meskipun bisa dibuat webbase tapi belum murni kesitu karena masih memakai broker java jinitiator untuk merubah ke dalam applet.

Semakin lama akan terasa knowledge HTML/CSS/XML dan JS/JQUERY/AJAX menjadi mandatory dalam pengembangan aplikasi Oracle APEX.

  • PL/SQL untuk server side yang berhubungan dengan validasi database dan proses stored procedure untuk meningkatkan kecepatan aplikasi
  • JS/JQUERY untuk client side yang berhubungan sisi interactive validasi
  • HTML/CSS untuk layout template serta look and feel dari aplikasi

Jadi persiapkan diri anda untuk masuk ke dalam tiga teknologi tersebut jika ingin mengembangkan aplikasi berbasis Oracle APEX.

Selamat Belajar......
Jangan tidur sebelum bisa hehehe..
Salam bonex apex

How to Change Highlight Row on Interactive Report

Untuk Interactive Report (IR) kita tidak bisa merubah highlight row melalui template report layaknya report classic. contoh kita mau merubah HL menjadi kuning (yellow)
untuk IR tambahkan code css berikut pada bagian header region report


My demo

Sumber : Oracle APEX Forum

Sabtu, 17 Desember 2011

How to Obfuscate DADS Password

Salah satu bagian penting dalam security APEX adalah melakukan obfuscating DADS Password, karena sebenarnya apex dalam arsitektur OHS memakai satu schema dalam mengakses applikasi yaitu APEX_PUBLIC_USER. Dalam konfigurasi DADS config file password dari schema ini terekspose terbuka. karena itu oracle menyediakan fasilitas untuk me-enkripsi password ini memakai bantuan program perl dan dadtool.pl.

Berikut langkah yang anda lakukan saat melakukan enkripsi/obfuscate password.
  1. Melalui command prompt masuk ke directory diamana OHS atau apache di install
  2. set ORACLE_HOME contoh dalam hal ini "D:\OracleHTTPApache\":
    set ORACLE_HOME=D:\OracleHTTPApache\
  3. set path ke file dads tersimpan:
    set PATH=%ORACLE_HOME%\Apache\modplsql\conf;%PATH%
  4. set path ke perl.exe berada:
    set PATH=%ORACLE_HOME%\perl\5.6.1\bin\MSWin32-x86;%PATH%
  5. set path :
    set PATH=%ORACLE_HOME%\bin;%PATH%
  6. pindah working direktori ke file dads.conf berada :
    cd D:\OracleHTTPApache\ohs\modplsql\conf
  7. Lakukan Obfuscating :
    perl dadTool.pl -o 
  8. Pastikan muncul pesan :
    All password successfully obfuscated. New obfuscation : 1 

Berikut hasil sebelum Obfuscating :
Alias /i/ "directory image apex"

Order deny,allow
PlsqlDocumentPath docs
AllowOverride None
PlsqlDocumentProcedure wwv_flow_file_mgr.process_download
PlsqlDatabaseConnectString 192.xxx.xxx.xxx:1521:ORCL 
PlsqlNLSLanguage AMERICAN_AMERICA.AL32UTF8
PlsqlAuthenticationMode Basic
SetHandler pls_handler
PlsqlDocumentTablename wwv_flow_file_objects$
PlsqlDatabaseUsername APEX_PUBLIC_USER
PlsqlDefaultPage apex
PlsqlDatabasePassword anoh
PlsqlRequestValidationFunction wwv_flow_epg_include_modules.authorize
Allow from all

dan Sesudahnya Obfuscating:
...
Alias /i/ "directory image apex"

Order deny,allow
PlsqlDocumentPath docs
AllowOverride None
PlsqlDocumentProcedure wwv_flow_file_mgr.process_download
PlsqlDatabaseConnectString 192.xxx.xxx.xxx:1521:ORCL 
PlsqlNLSLanguage AMERICAN_AMERICA.AL32UTF8
PlsqlAuthenticationMode Basic
SetHandler pls_handler
PlsqlDocumentTablename wwv_flow_file_objects$
PlsqlDatabaseUsername APEX_PUBLIC_USER
PlsqlDefaultPage apex
PlsqlDatabasePassword @BRgDbE4pmrgWmkvz1Yjgl/OLePKUqlr+1Q==
PlsqlRequestValidationFunction wwv_flow_epg_include_modules.authorize
Allow from all


Catatan :
  • OS Windows Server 2003 & Oracle Application Server 10g Release 2 (10.1.2)
  • Detil instruksi ada di file dadtool.README

Selasa, 13 Desember 2011

Escape special character on query

Masalah muncul ketika data query mengandung karakter special seperti : ',". saat kita pakai JS untuk mengambil nilai tsb (kasus saya popup passback).

Berikut solusi yang saya peroleh dari oracle APEX forum (thanks patrick wolf).
  1. Lakukan modifikasi query report dengan memakai apex_javascript.escape
  2. ...
     select nama,apex_javascript.escape(nama) as nama_esc,email
     from tab_dummy
     ...
    
  3. Sembunyikan kolom yang telah di escape (nama_esc) menjadi hidden column
  4. Refensikan kolom tersebut pada kode js
  5. javascript:passBack('#NAMA_ESC#','#EMAIL#');
    

My Demo

Sabtu, 10 Desember 2011

Dynamic Home page

Kebutuhan untuk merubah home page secara dinamis mengikuti profile dari user login, membuat sering kali terjadi error saat login.
ini terjadi karena pada bagian security attribute pada aplikasi mensyaratkan page home.
karena itu kita harus merubah page home secara dinamis mengikuti nilai application item atau nilai yang disimpan dalam database. berikut langkahnya:
  1. Pada bagian procedure login buatlah sbb:
  2. declare
      v_result boolean := FALSE;
      v_home number(3);
    begin
      -- use the existing authenticate function
      v_result := pkg_test.otentifikasi(upper(:P101_USERNAME),:P101_PASSWORD);
      if v_result=true then
        -- lakukan pengisian v_home
        if upper(:P101_USERNAME)='ADMIN'then
          v_home:=31;
        else
          v_home:=1;
        end if;
        wwv_flow_custom_auth_std.post_login(
        P_UNAME => :P101_USERNAME,
        P_PASSWORD => :P101_PASSWORD,
        P_SESSION_ID => v('APP_SESSION'),
        P_FLOW_PAGE =>  :APP_ID||':'||v_home
        );
       end if;  
    
      end if;
    end;
    
  3. Pada bagian security attribute ubahlah home page menjadi : f?p=&APP_ID.:101:&SESSION.

Catatan : Page home wajib diubah sama dengan page login : 101 supaya tidak terjadi error