form数字时钟开发when-timer-expired

form中的数字时钟timer,我也是昨天偶然因为一个项目需要在接触到的,它的作用是可以在程序触发以后隔多久执行一次或者多次指定程序,就比如说我在打开一个form以后,我可以设置数字时钟在打开1分钟以后弹出窗口提示一些信息等等,或者是在1分钟以后执行某段程序。form中timer的开发首先需要在需要的地方创建一个timer,然后再在when-timer-expired触发器中去处理这个timer的执行。

form中timer的开发我简单的做了如下总结:

假如有一个需求,当输入供应商id以后,需要即时判断供应商的某些信息是否校验成功,如果没有校验成功,就弹出一个form,告诉用户信息没有校验成功,提示用户去修改信息,虽然该功能的的实现完全没有必要用timer,但是这里为了做例子,暂时这么举例。

(1)在供应商supplier的when-validate-item中增加代码,以实现校验功能,核心代码如下:

PROCEDURE supplier(p_event VARCHAR2) IS
  l_error_message VARCHAR2(4000);
  timer_id        timer;
BEGIN
  IF p_event = 'WHEN-VALIDATE-ITEM' THEN
    /* cmx_validate_supplier是自定义的一个校验function,如果校验不通过则返回false,通过则返回true,这里不细究cmx_validate_supplier具体怎么实现 */
    IF NOT cmx_validate_supplier(:b_ordhead.supplier, l_error_message) THEN
      timer_id := create_timer('SUPPLIER_TIMER', 1, no_repeat);
    END IF;
  END IF
  END;

(2)在(1)中只是实现了create_timer,timer的具体执行还要在when-timer-expired触发器中增加代码实现,核心代码如下:

DECLARE
  L_timer_name VARCHAR2(255);
  L_timer_id   TIMER;
BEGIN
  -- 使用get_application_property获得最近一次的timer_name
  L_timer_name := upper(get_application_property(TIMER_NAME));
  -- 使用find_timer根据timer_name获得timer_id
  L_timer_id := FIND_TIMER(L_timer_name);
  -- 处理timer,cmx_form_utl.display_errors的主要功能是调出一个form来显示错误提示信息
  IF L_timer_name = 'SUPPLIER_VALIDATE' THEN
    cmx_form_utl.display_errors(NULL);
  END IF;
END;

(3)调用错误提示form的cmx_form_utl包的主要代码如下:

PACKAGE BODY cmx_form_utl IS
  PROCEDURE display_errors(p_message VARCHAR2) IS
    pl_id paramlist;
  BEGIN
    /* 调用一个form可以不这样写的,这里使用这种方法主要是博客中目前还没有写有关多个form调用的文章,这里简单的弥补下不足 */
    p_destroy_parameter_list('cmx_test');
    pl_id := create_parameter_list('cmx_test');
    Add_Parameter(PL_id, 'FM_ERROR', TEXT_PARAMETER, NULL); -- 被调用form的参数name名
  
    open_form('cmx_fm_errors', activate, no_session, pl_id); -- 被调用form的文件名
  EXCEPTION
    WHEN form_trigger_failure THEN
      RAISE;
    WHEN OTHERS THEN
      emessage(SQLERRM);
      RAISE form_trigger_failure;
  END display_errors;
END cmx_form_utl;

(4)开发一个文件名为cmx_fm_errors的form,主要就是实现从数据库中调出错误提示信息并且显示在form上,数据库中的错误提示信息是在第(1)步的cmx_validate_supplier方法中写的,具体实现这里不深究。这里提供一个cmx_fm_errors的参考版本,仅供参考,下载:cmx_fm_errors.zip

上面只是提供了一个具体timer的实现实例,有关timer的更多知识,可以参考form builder内置的帮助手册,主要参考create_timer、when-timer-expired、find_timer等几个就OK了。

本文标题:form数字时钟开发when-timer-expired

本文链接:http://yedward.net/?id=128

本文版权归作者所有,欢迎转载,转载请以文字链接的形式注明文章出处。

相关文章