惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
G
Google Developers Blog
J
Java Code Geeks
爱范儿
爱范儿
Microsoft Azure Blog
Microsoft Azure Blog
美团技术团队
人人都是产品经理
人人都是产品经理
Martin Fowler
Martin Fowler
IT之家
IT之家
博客园_首页
B
Blog RSS Feed
Google DeepMind News
Google DeepMind News
B
Blog
U
Unit 42
Apple Machine Learning Research
Apple Machine Learning Research
L
LangChain Blog
Stack Overflow Blog
Stack Overflow Blog
罗磊的独立博客
N
Netflix TechBlog - Medium
T
Tailwind CSS Blog
博客园 - 聂微东
腾讯CDC
A
About on SuperTechFans

博客园 - 土鸟

微信挪车功能成功上线,祝贺一下自己 Form personization(Form 个性化)报无权限 (OSP)外包工单关工单失败 failed jobs because of past close date,关工单报错 APP-BOM-20516 错误处理一例 Outer Join Query Over Dblink Can Fail With ORA-904 (Doc ID 730256.1) Some User Can Not Execute "Ship Confirm"(Doc ID 473312.1) Oracle Purchasing QUESTIONS AND ANSWERS 符合中国人习惯的oracle取周的日期函数 Form开发中Block的顺序 关于Forms_ddl的应用 Form开发技巧二-----SPECIAL1菜单编成 提高电脑运行速度---清理内存工具 Oracle ADI 错误及解决方式汇总---来自metalink Oracle EBS付款条件 Examples To howto Insert into Transaction Open Interface 传说中的蹭网卡 无法建BOM APP-SQLGL-08252异常处理
Form开发技巧一 ------- 相同ORG只允许同时一个Session作业
土鸟 · 2013-02-21 · via 博客园 - 土鸟

需求:

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