如何回滚 JDeveloper ADF 中的特定行?

问题描述

有没有办法回滚特定的更改。我有一个按钮可以在两个不同的表中创建一行。我希望在提交之前回滚其中一个表中的更改,以便仅提交第二个表。这将如何完成?运行正常回滚会回滚两个表迭代器。

我一直在尝试不同的方法,但没有任何效果,请在我发疯之前帮忙。

解决方法

最接近回滚行的方法可能是使用适当的参数对视图行调用刷新,如下所示:

//Obtain app module
DCBindingContainer dcb = (DCBindingContainer) BindingContext.getCurrent().getBindingsEntry();
ApplicationModuleImpl am = (ApplicationModuleImpl) dcb.getDataControl().getDataProvider();

//Get your view
ViewObjectImpl vo = am.getMyView1;
ViewRowImpl row = vo.getCurrentRow(); //alternately use vo.findByKey to lookup a row or simply iterate through every row if dataset is sufficiently small
//rollback the row
row.refresh(Row.REFRESH_REMOVE_NEW_ROWS | Row.REFRESH_UNDO_CHANGES | Row.REFRESH_CONTAINEES);//review modes for ideal combination for use case

请注意,不是刷新,row.remove() 可能足以满足您正在尝试执行的操作。在任何情况下,您都需要跟踪不想提交的行。

虽然此解决方案可行,但听起来并不适合您的用例。如果您从不提交另一个表中的数据,则没有理由将其链接到数据库表。我可能会执行以下操作之一:

  1. 如果两个表中的字段相同(或相似)并且将是一次全部操作,则在 ADF 视图对象上创建一个临时属性以指示该行是否被批准。在视图对象的不同实例上使用视图标准(两次添加到您的应用程序模块)来显示/处理您想要的行。在提交之前删除未批准的行。

  2. 如果需要的字段差异太大,或者您希望一次处理一行,请将历史视图对象设为具有瞬态属性的编程视图对象,而不是基于表/实体。某行获得批准后,将其从您的历史记录视图中删除,并将其添加到您批准的视图中。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...