使用行刷新操作使用JavaScript刷新交互式网格

时间:2017-10-04 14:27:56

标签: oracle-apex-5.1

我有一种情况,更新和保存交互式网格行中的某些列会导致其他一些行被更新。默认情况下,仅刷新更改的行,并且对(现在更新的)行的进一步更改将导致Current version of data in database has changed错误。我设法通过在自定义interactivegridsave上挂钩动态操作来解决此问题(在交互式网格中保存更改后触发)。操作本身是Execute JavaScript Code执行此操作(请注意region_static_id是占位符):

apex.region("region_static_id").widget().interactiveGrid("getActions").invoke("refresh");

这将正确获取所有记录(包括更新的记录)并重绘交互式网格。我不喜欢在没有重绘的情况下变得可见。我想迭代遍历行,使用row-refresh动作通过id更新它们中的每一行,但我不知道它是如何工作的(或者至少如何正确地调用它)。此操作应该可用,因为它在我执行此操作时获得的可用操作列表中正确列出:

apex.region("region_static_id").widget().interactiveGrid("getActions").list().forEach(function(a){console.log("Action Label: "+a.label+", Name: "+a.name+(a.choice!==undefined?", Choice: "+a.choice:""));});

所以,问题是:

如何通过在互动网格中调用row-refresh操作来刷新行?

欢迎刷新行的替代方案(最好通过指定行ID)。

1 个答案:

答案 0 :(得分:0)

经过进一步的研究后,我找到了另一种方法(我不确定它是多么的hackish或稳定,但是它有效)。看起来你可以通过获取数据网格模型来刷新行,然后使用它来获取所有记录:

var model = apex.region("predmet_dg").widget().interactiveGrid("getViews").grid.model;
model.fetchRecords(model._data);

这样可以刷新数据而不会导致网格重绘。