воскресенье, 8 декабря 2013 г.

Как отменить изменения только в одном VO

Rollback не годится, т.к. сбрасывает изменения во всём модуле для всех VO. Поэтому чтобы  справиться с задачей модифицируем класс xxxVOImpl добавив в него метод


    public void clearAllCache() {
      //dont ask
      ViewRowSetImpl drsi = super.getDefaultRowSetInternal();
      while(drsi.hasNext()) {
        Row item = drsi.next();
      }
      Iterator iter = super.getEntityDef(0).getAllEntityInstancesIterator(this.getDBTransaction());
      while(iter.hasNext()) {
        EntityImpl entityItem = (EntityImpl) iter.next();
        byte status = entityItem.getEntityState();
          String s = ((status == EntityImpl.STATUS_MODIFIED) ? " STATUS_MODIFIED" : "")
          + ((status == EntityImpl.STATUS_NEW) ? " STATUS_NEW" : "")
          + ((status == EntityImpl.STATUS_DELETED) ? " STATUS_DELETED" : "")
          + ((status == EntityImpl.STATUS_DEAD) ? " STATUS_DEAD" : "")
          + ((status == EntityImpl.STATUS_INITIALIZED) ? " STATUS_INITIALIZED" : "")
          + ((status == EntityImpl.STATUS_UNMODIFIED) ? " STATUS_UNMODIFIED" : "");
          System.err.println(" --- "+ s);
       
        if(status == EntityImpl.STATUS_NEW
          || status == EntityImpl.STATUS_DELETED) {
            entityItem.refresh(EntityImpl.REFRESH_REMOVE_NEW_ROWS
                | EntityImpl.REFRESH_UNDO_CHANGES);
        }
        if(status == EntityImpl.STATUS_MODIFIED) {
            entityItem.refresh(EntityImpl.REFRESH_WITH_DB_FORGET_CHANGES);
        }
       
      }
      getViewObject().clearCache();
    }


 Идея заключается в том, что проходим по всем записям VO и в зависимости от их состояния делаем refresh.

ссыль

Комментариев нет:

Отправить комментарий