JDeveloper 11.1.2.1
I really struggled to get this working so hopefully this helps someone out:
I needed to just rollback the changes on a single vo backed popup and not the parent object so this is what I did. (not the pk for this view was rowid based and normal methods to do this just refused to work)
Also I failed to mention it is a multi line editable table.
NOTE: Performance was not an issue here.
Phase 1) Parent VO Impl
We have a parent object for all our View Objects so I implemented this method there.
Phase 2) AM (implement this method and map it as a client interface)
ViewObject vo = iterator.getViewObject();
if(vo instanceof WesbankVOImpl) {
((WesbankVOImpl) vo).clearAllCache();
}
}
Phase 3) Backing bean method (mapped to close popup button - all our popups work the same way and the backing bean holds the current popup iterator name)
Phase 4) Page
Bind a method action to your page for the rollbackVO method
This still needs to be cleaned up (ie the getEntityDef(0) wont work everywhere).
I really struggled to get this working so hopefully this helps someone out:
I needed to just rollback the changes on a single vo backed popup and not the parent object so this is what I did. (not the pk for this view was rowid based and normal methods to do this just refused to work)
Also I failed to mention it is a multi line editable table.
NOTE: Performance was not an issue here.
Phase 1) Parent VO Impl
We have a parent object for all our View Objects so I implemented this method there.
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();
if(entityItem.getEntityState() == EntityImpl.STATUS_NEW ||
entityItem.getEntityState() == EntityImpl.STATUS_DELETED) {
entityItem.refresh(EntityImpl.REFRESH_REMOVE_NEW_ROWS |
//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();
if(entityItem.getEntityState() == EntityImpl.STATUS_NEW ||
entityItem.getEntityState() == EntityImpl.STATUS_DELETED) {
entityItem.refresh(EntityImpl.REFRESH_REMOVE_NEW_ROWS |
EntityImpl.REFRESH_UNDO_CHANGES);
}
}
getViewObject().clearCache();
}
}
}
getViewObject().clearCache();
}
public void rollbackVO(String iteratorName) {
DCIteratorBinding iterator = ((DCBindingContainer)
DCIteratorBinding iterator = ((DCBindingContainer)
BindingContext.getCurrent().getCurrentBindingsEntry()).
findIteratorBinding(iteratorName);
ViewObject vo = iterator.getViewObject();
if(vo instanceof WesbankVOImpl) {
((WesbankVOImpl) vo).clearAllCache();
}
}
public String resetPopup() {
Map params = new HashMap();
params.put("iteratorName", getCurrentPopupIteratorName());
ADFUtils.executeOperationBindingWithoutException("rollbackVO", params);
AdfFacesContext.getCurrentInstance().returnFromDialog(null, null);
return null;
}
Map params = new HashMap();
params.put("iteratorName", getCurrentPopupIteratorName());
ADFUtils.executeOperationBindingWithoutException("rollbackVO", params);
AdfFacesContext.getCurrentInstance().returnFromDialog(null, null);
return null;
}
Bind a method action to your page for the rollbackVO method
This still needs to be cleaned up (ie the getEntityDef(0) wont work everywhere).
Comments
Post a Comment