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

Tidak ada komentar :

Posting Komentar