环境。Oracle APEX v5.1.2和Oracle 12c R2 DB。
我有一个报表,它是基于以下表格中的列,在一个叫作 MY_TASK
:
TASK_ID (PK),
TASK,
TASK_STATUS (from TASK_CHECKER.task_status)
我还有另一个表,我把它作为一个运行表,用来检查与表MY_TASK中的TASK_ID号有关的工作状态,称为: TASK_CHECKER
其中有列。
TASK_ID (PK),
TASK_STATUS
根据上面的内容,我有一个计划作业,定期检查另一个表的状态,检查特定的TASK_ID,从而更新TASK_CHECKER表内的TASK_STATUS值。
使用上述方法,当用户运行Oracle APEX应用程序并进入MY_TASK报表页面时,我希望通过使用 apex.server.process在启动时,通过TASK_ID将两个表连接在一起,并在MY_TASK报告中显示当时的TASK_STATUS。
请注意,TASK_STATUS的值是。等待 正在进行中 成功 或 失败
所以,如果我有5个TASK_ID在运行,我可能在页面加载时看到。
1 TASK_A SUCCESS
2 TASK_B ERROR
3 TASK_C IN-PROGRESS
4 TASK_D WAITING
5 TASK_E WAITING
也许10秒后会变成:
1 TASK_A SUCCESS
2 TASK_B ERROR
3 TASK_C SUCCESS
4 TASK_D SUCCESS
5 TASK_E IN-PROGRESS
希望看到TASK_STATUS的更新实时出现。
我刚才检查了一下,好像是 refresh
是异步的(它不会锁定屏幕)。你应该可以做到这样......
setInterval(function() {
apex.region("region_static_id").refresh();
}, 5000);
只要确保毫秒数高于区域运行查询和区域渲染所需的时间。