Rabu, 30 Januari 2013

Tips Memakai Number Field dengan Format Mask

Memakai item dengan tipe : Number Field dengan format mask memerlukan sebuah trik tersendiri dalam APEX karena pada dasarnya ketika di render item menjadi karakter bukan lagi number seperti asalnya ketika tersimpan dalam database.
Contoh : angka 1000000 ketika memakai format mask 999G999G999G999G999G999G990 ketika di render akan menjadi 1.000.000.

Masalah akan muncul jika kita melakukan sebuah validasi, biasanya akan terjadi error. untuk mengatasi hal ini kita bisa lakukan.
1. Buat sebuah function di Post Calculation Computation di item tersebut.
2. Buatlah fuction tersendiri di database lalu gunakan dalam validasi.

Cara pertama punya kelemahan jika kita masukkan sebuah angka dengan format mask yang salah muncul error yg tidak bisa di handle contoh kita masukkan 1.00.000.

Dengan cara kedua kita bisa handle dalam proses validasi nantinya. oke bagai mana logicnya.
1. Sebelumnya harus dicek apakah item tersebut sudah ter format apa belum
2. Function tersebut akan melakukan konversi Number Field dengan format mask dari char ke number.
3. Gunakan function ter sebut dalam validasi, plus buatlah exception untuk handle format yang salah.

contoh function

CREATE OR REPLACE FUNCTION FORMAT_ANGKA1(P_NUM  VARCHAR2 ) RETURN number
  IS  
 v_jumlah NUMBER;
begin
if instr(P_NUM,'.')=0 then
 v_jumlah:=to_number(nvl(P_NUM,0));
else
 v_jumlah:=to_number(nvl(P_NUM,0),'999G999G999G999G999G999G990');
end if;
    
    RETURN v_jumlah;    
 
  END FORMAT_ANGKA1;
/
Contoh pemakaian dalam validation dengan tipe :Function Returning Error Text

declare
 v_jumlah number;
begin

 v_jumlah:=FORMAT_ANGKA1(:P28_JUMLAH);

if v_jumlah=0 then
 return '#LABEL# tidak boleh null atau 0';
else
 if v_jumlah>:P28_SIMPANAN then
   return '#LABEL# tidak boleh melebihi jumlah Simpanan';
 else
   return null;
 end if;
end if;
exception
 when others then
 return '#LABEL#Format mask tidak valid contoh valid : 999.999.999.999.999.999.990 , atau sama sekali tanpa format mask';
end;

Catatan : pemakaian instr tergantung format mask dan Globalization Apps yang kita pakai.