zoukankan      html  css  js  c++  java
  • Form开发技巧一 相同ORG只允许同时一个Session作业

    需求:

    1.开发一个批次release工单的程序

    2.同时,只能有一个Session Release同一个ORG的工单

    解决方法:

    1.(WHEN-NEW-FORM-INSTANCE)在程序打开时,删除纪录程序运行table因程序异常关闭未清除的纪录

       参考SQL :

    DELETE      program_lock_control a

               WHERE program_name = 'RELEASE_WO'

               AND NOT EXISTS (

                      SELECT 1

                        FROM v$session b

                       WHERE b.SID = a.lock_sid

                         AND b.serial# = a.lock_serial

                         AND b.audsid = a.lock_audsid);

    2.(WHEN-NEW-FORM-INSTANCE)判断自己有没有打开了此程序,如已经打开,提示已经打开,关闭本次打开的程序,否则Insert 一笔纪录到控制table.

    参考SQL:

       SELECT COUNT (1)

         INTO :parameter.v_runner

       FROM program_lock_control

                   WHERE program_name = 'RELEASE_WO'

                   AND user_id = :parameter.user_id;

                IF :parameter.v_runner > 0

                   THEN

                   show_alert_message ('您不能同时打开多次此程序!');

                 DO_KEY ('exit_form');

                ELSE

                  SELECT SID, serial#, audsid

                  INTO v_sid, v_serial, v_audsid

                  FROM v$session

                  WHERE audsid = USERENV ('SESSIONID');

                   SELECT user_name

                    INTO v_runner

                    FROM fnd_user

                  WHERE user_id = :parameter.user_id;

                  INSERT INTO  program_lock_control

                      (program_name, organization_id, lock_flag, user_id,

                       user_name, login_time, lock_sid, lock_serial, lock_audsid

                      )

                   VALUES ('RELEASE_WO', 0, 'Y', :parameter.user_id,

                       v_runner, SYSDATE, v_sid, v_serial, v_audsid

                      );

                 COMMIT;

                End if;

    3. (Find when-button-pressed)按下寻找可Release工单的按钮,同样先删除异常退出程序造成的纪录(防止另外一个用户已经打开程序,一个用户异常退出)

    参考SQL:

    DELETE      program_lock_control a

               WHERE program_name = 'RELEASE_WO'

               AND NOT EXISTS (

                      SELECT 1

                        FROM v$session b

                       WHERE b.SID = a.lock_sid

                         AND b.serial# = a.lock_serial

                         AND b.audsid = a.lock_audsid);

    4.(Find when-button-pressed)判断用户选择的ORG是否有被他人所定,如有,提示用户不可操作,如没有,则修改控制table,将ORG栏位改为用户选择的ORG,锁定此ORG.

    参考SQL:

    SELECT COUNT ('*')

               INTO v_count

               FROM program_lock_control

              WHERE organization_id = :header.org_id

                AND program_name = 'RELEASE_WO'

                AND lock_flag = 'Y';

             IF v_count > 0

             THEN

                show_alert_message

                       (   '同时只能有一个人Release同一Org的工单,目前 '

                        || v_runner

                        || '正在运行此程序!'

                       );

                RAISE form_trigger_failure;

             END IF;

          ELSE

             UPDATE program_lock_control

                SET organization_id = :header.org_id

              WHERE program_name = 'BATCH_RELEASE_WO'

                AND user_id = :parameter.user_id;

          End if;

      5. 用户退出时运行,解除锁定

      参考SQL:

      DELETE     program_lock_control

          WHERE program_name = 'RELEASE_WO'

                AND user_id=:parameter.user_id;

    :System.Message_Level := 25;

    commit;

    do_key('exit_form');

    欢迎转载,但请注明出处!
  • 相关阅读:
    HEVC简介】CTU、CU、PU、TU结构
    HEVC测试序列(百度云网盘分享)
    【HEVC学习与研究】29、解码第一个Coding Quadtree结构(1)
    打印时间
    Linux进程调度和切换过程分析
    调度时机
    非实时进程、实时进程、静态优先级、动态优先级、实时优先级
    linux内核链表分析
    进程上下文和中断上下文
    开发板挂载nfs服务器错误解析
  • 原文地址:https://www.cnblogs.com/kevinsun/p/2920523.html
Copyright © 2011-2022 走看看