问题描述
有没有办法回滚特定的更改。我有一个按钮可以在两个不同的表中创建一行。我希望在提交之前回滚其中一个表中的更改,以便仅提交第二个表。这将如何完成?运行正常回滚会回滚两个表迭代器。
我一直在尝试不同的方法,但没有任何效果,请在我发疯之前帮忙。
解决方法
最接近回滚行的方法可能是使用适当的参数对视图行调用刷新,如下所示:
//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()
可能足以满足您正在尝试执行的操作。在任何情况下,您都需要跟踪不想提交的行。
虽然此解决方案可行,但听起来并不适合您的用例。如果您从不提交另一个表中的数据,则没有理由将其链接到数据库表。我可能会执行以下操作之一:
-
如果两个表中的字段相同(或相似)并且将是一次全部操作,则在 ADF 视图对象上创建一个临时属性以指示该行是否被批准。在视图对象的不同实例上使用视图标准(两次添加到您的应用程序模块)来显示/处理您想要的行。在提交之前删除未批准的行。
-
如果需要的字段差异太大,或者您希望一次处理一行,请将历史视图对象设为具有瞬态属性的编程视图对象,而不是基于表/实体。某行获得批准后,将其从您的历史记录视图中删除,并将其添加到您批准的视图中。