Showing posts with label error message. Show all posts
Showing posts with label error message. Show all posts

Monday, September 15, 2014

ADF - Mengubah pesan error part 2


Pada part 1 kita sudah mengubah pesan error dengan cara catch exception di class impl dari entity object. Nah pada kali ini saya akan melakukan hal yang sama dengan jalan yang berbeda, yaitu dengan menggunakan DCErrorHandler. Berikut penjelasan singkatnya:

"Implements a default error handling class for the ADF framework. This handler caches the exception in the bindingContainer and then if 'Throw' flag is set, throws exceptions it receives as JboExceptions (by creating a JboException if required)."

  • Pertama tama kita buat class baru yang bernama "MyCustomErrorHandler" dan pastikan Anda sudah membuat Entity Object dan View Object.



  • Buka DataBinding.cpx dan register class yang kita buat.


  • Berikut code di "MyCustomErrorHandler"
 package view.java;

import oracle.adf.model.BindingContext;
import oracle.adf.model.binding.DCBindingContainer;
import oracle.adf.model.binding.DCErrorHandlerImpl;

import oracle.jbo.TooManyObjectsException;

public class MyCustomErrorHandler extends DCErrorHandlerImpl {
    public MyCustomErrorHandler(boolean b) {
        super(b);
    }
    public MyCustomErrorHandler(){
        this(true); 
    }
    @Override
    public void reportException(DCBindingContainer dCBindingContainer,
                                Exception exception) {
        super.reportException(dCBindingContainer, exception);
    }

    @Override
    public String getDisplayMessage(BindingContext bindingContext,
                                    Exception exception) {
        
        String message="";
        // Jika exception merupakan TooManyObjectsException maka pesan error           //akan diganti
        if(exception instanceof TooManyObjectsException){
            String msg=exception.getMessage();
            int i=msg.indexOf("Too many objects match the primary key ");
            if(i>0)  
            {  
               
               message= "Duplicate Employee Id Found.";  
              
            }
        }else{
              message= super.getDisplayMessage(bindingContext, exception);

        }
        System.out.println(message);
        return message;
     
    }
}
  • Langkah terakhir mari kita tes, disini saya membuat form dan melakukan pengujian dengan memasukkan data yang sudah ada di database seperti gambar dibawah: 



Sekian blog singkat saya, semoga bermanfaat :)

Referensi
http://docs.oracle.com/cd/E15051_01/apirefs.1111/e10653/oracle/adf/model/binding/DCErrorHandler.html
http://www.adftutorials.com/adf-custom-error-handler-to-display-custom-message-to-user.html





ADF - Mengubah pesan error part 1

Pada blog ini saya akan menjelaskan bagaimana caranya mengubah default pesan error di ADF-BC yang berkaitan dengan Entity Object. Perlu diketahui ADF-BC mempunyai banyak exception class, seperti  TooManyObjectException dan DMLException. Dimana setiap exception class tersebut merupakan extends dari JboException. TooManyObjectException dan DMLException sering terjadi ketika melakukan update/delete data. Berikut penjelasan singkatnya :
  • TooManyObjectException terjadi ketika Entity Object Row mempunyai duplikat primary key (PK) 
  • DMLException terjadi ketika execute sql ke database 
Contoh penggunaannya sebagai berikut :
  • Pertama - tama saya membuat project ADF Application, dimana ADF-Model menggunakan user hr (sampel oracle database). 



  • Klik Enity Object Employees dan generate EmployeesImpl seperti gambar dibawah.

  • Buka EmployeesImpl.java, modfikasi method doDML dan setEmployeeId seperti dibawah :
  •     /**
         * Custom DML update/insert/delete logic here.
         * @param operation the operation type
         * @param e the transaction event
         */
        protected void doDML(int operation, TransactionEvent e) {
            try {
                super.doDML(operation, e);
            } catch (DMLException ex) {
                ex.printStackTrace();
                
                throw new JboException("Error : Gagal menambahkan data dengan employee ID : " +
                                       ex.getEntityRow().getAttribute(0));
            }
    
        }
  • Atribut EmployeeID merupakan primary key sehingga kita perlu menambahkan TooManyObjectException
  •     /**
         * Sets <code>value</code> as the attribute value for EmployeeId.
         * @param value value to set the EmployeeId
         */
        public void setEmployeeId(Number value) {
            try{
                setAttributeInternal(EMPLOYEEID, value);
            }catch(TooManyObjectsException ex){
                ex.printStackTrace();
                throw new JboException("Duplicate data employee id tidak diijinkan");
            }
            
        }
  • Setelah itu mari kita uji, Dibawah ada contoh form yang saya buat :


  • Lalu saya mencoba commit data dan muncul pesan error yang sudah di modifikasi





  • Dan kali ini kita mencoba  memasukkan data employeeID yang sudah ada di database





Sekian blog saya kali ini :)


https://blogs.oracle.com/jdevotnharvest/entry/displaying_exceptions_thrown_or_catched
http://andrejusb.blogspot.com/2010/05/differences-of-handling-jboexception-in.html
http://docs.oracle.com/cd/E12839_01/apirefs.1111/e10653/oracle/jbo/JboException.html