Javascript 检查Oracle 11gR2计划作业何时完成,并在Oracle APEX中提醒用户
在OracleApex v4.2中,我有一个应用程序,用户按下按钮,然后关闭并提交一个预定的后台作业,允许用户继续在应用程序中工作。使用Oracle的DBMS_调度程序启动该作业 我的问题是并希望将其保留在Oracle APEX空间中-假设有一个表存储作业启动的时间以及最终完成的时间,我如何与该表交互,检查作业是否已完成,即以某种方式轮询该表并在找到完成状态时停止,提供一个5秒钟的警报,滑入然后滑出,通知用户作业已完成Javascript 检查Oracle 11gR2计划作业何时完成,并在Oracle APEX中提醒用户,javascript,callback,oracle11g,oracle-apex,dbms-scheduler,Javascript,Callback,Oracle11g,Oracle Apex,Dbms Scheduler,在OracleApex v4.2中,我有一个应用程序,用户按下按钮,然后关闭并提交一个预定的后台作业,允许用户继续在应用程序中工作。使用Oracle的DBMS_调度程序启动该作业 我的问题是并希望将其保留在Oracle APEX空间中-假设有一个表存储作业启动的时间以及最终完成的时间,我如何与该表交互,检查作业是否已完成,即以某种方式轮询该表并在找到完成状态时停止,提供一个5秒钟的警报,滑入然后滑出,通知用户作业已完成 我可以通过动态操作使用JavaScript回调吗?如果您不想走插件路线,可以
我可以通过动态操作使用JavaScript回调吗?如果您不想走插件路线,可以在应用程序进程中使用以下代码,在本例中称为ProgressCheck:
DECLARE
CURSOR c_time_elapsed
IS
SELECT SUBSTR(elapsed_time,6,2)||'hrs '
||SUBSTR(elapsed_time,9,2)||'mins '
||SUBSTR(elapsed_time,12,2)||'secs' ELAPSED_TIME
FROM user_scheduler_running_jobs
WHERE job_name = 'XX_YOUR_JOB_NAME'
UNION ALL
SELECT '00:00'
FROM DUAL
WHERE NOT EXISTS (SELECT SUBSTR(elapsed_time,9) ELAPSED_TIME
FROM user_scheduler_running_jobs
WHERE job_name = 'XX_YOUR_JOB_NAME');
BEGIN
FOR r_time IN c_time_elapsed LOOP
htp.p('<p>Time elapsed: '||r_time.ELAPSED_TIME);
END LOOP;
htp.p('');
END;
在页面标题中,包括以下JavaScript:
<script type="text/javascript">
<!--
var myInterval;
function f_ProgressCheck(){
var get = new htmldb_Get(null,$v('pFlowId'),'APPLICATION_PROCESS=ProgressCheck',$v('pFlowStepId'));
gReturn = get.get();
get = null;
gReturn = (!gReturn)?'null':gReturn;
$s('P1_PROGRESS_RESULT',gReturn);
}
function f_myInterval(){
myInterval = setInterval ( "f_ProgressCheck()", 5000 );
}
//-->
</script>
这将在页面加载后每五秒钟调用一次应用程序进程,并将检查结果放入P1_PROGRESS_RESULT中
您可以修改申请流程以满足您的要求,可能会返回其他内容或额外检查是否完成,如以下代码:
DECLARE
CURSOR c_job_count
IS
SELECT COUNT(*) TOTAL
FROM user_scheduler_job_log
WHERE job_name = 'XX_YOUR_JOB_NAME'
AND log_date >= (SYSDATE - 1/1440);
BEGIN
FOR r_job_count IN c_job_count LOOP
IF r_job_count.total = 1 THEN
htp.p('<p>Your data is ready to view.');
htp.p('<p>Click Go to view the report.');
htp.p('<input type="button" onclick="javascript:this.disabled=true;this.value=''Please wait...'';doSubmit(''REPORT'');" value="Go" class="RelevantAPEXClass" />');
ELSE
htp.p('<p>');
END IF;
END LOOP;
END;
您还可以结合PLSQL在一个进程中交付所有内容
您还可以最好使用动态操作调用PLSQL