• 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');

    欢迎转载,但请注明出处!
  • 相关阅读:
    网上订火车票,用chrome和firefox才是王道
    SYNOPSYS VCS常用命令使用详解
    archlinux failed retrieving file 'xxx'解决办法
    JQuery实现点击TreeView文本展开/折叠子节点
    解决VS2010下HTML5的无法智能提示的问题
    Win7 计算机右键“管理”失效
    virtualbox下安装archlinux
    Linux下修改(NTFS)磁盘(卷标)显示名称
    Win7下使用VMWare安装Archlinux
    1.XMLHttpRequest:
  • 原文地址:https://www.cnblogs.com/kevinsun/p/2920523.html
Copyright © 2020-2023  润新知