//HengSin - to let process end with message and requery
 WProcessCtl.process(p_WindowNo, m_pi, (Trx)null, new EventListener<Event>() {
 
    @Override
    public void onEvent(Event event) throws Exception {
       ProcessModalDialog processModalDialog = (ProcessModalDialog)event.getTarget();
       if (DialogEvents.ON_BEFORE_RUN_PROCESS.equals(event.getName())){
          updateListSelected();
          // store in T_Selection table selected rows for Execute Process that retrieves from T_Selection in code.
         DB.createT_SelectionNew(pInstanceID, getSaveKeys(getInfoColumnIDFromProcess(processModalDialog.getAD_Process_ID())), 
         null); 
      }else if (ProcessModalDialog.ON_WINDOW_CLOSE.equals(event.getName())){ 
         if (processModalDialog.isCancel()){
          // enable or disable control button rely selected record status 
          enableButtons();
      }else if (m_pi.isError()){
          ProcessInfoDialog.showProcessInfo(m_pi, p_WindowNo, InfoGenForJasperReport.this, true);
          // enable or disable control button rely selected record status 
          enableButtons();
      }else if (!m_pi.isError()){
          ProcessInfoDialog.showProcessInfo(m_pi, p_WindowNo, InfoGenForJasperReport.this, true); 
          isRequeryByRunSuccessProcess = true;
          Clients.response(new AuEcho(InfoGenForJasperReport.this, "onQueryCallback", null));
      }
    }
 
    //HengSin -- end --
  }
 });