Custom pll文件介绍

       之所以要把这个文件的学习作为一个专题写出来,是因为之前不知道还有Custom.pll文件的使用而被坑了整整一天,所以打算来整理一下。

   业务需求:在项目遇到一个问题,是要修改某个界面值的格式,使其保留两位小数,但改了之后发现有个Button响应要用该值与另外一个值进行比较相等后才能审批通过,因为有一个格式化过,而另外一个并未格式化,所以其肯定不相等。

   解决探索: 最初的解决方法是想跟踪该Button事件,然后找到进行判读的代码所在。但经过很久的跟踪都找不到该段代码所在,不得已像高手询问,才知道有Custom.pll文件这回事。

   Custom.pll文件:该文件是EBS标准的一个Library,在$AU_TOP/resource下可以下载。当系统启动时就会加载这个Library。Custom.pll库文件有两个function:  zoom_available、style(event_name varchar2)和一个procedure: event(event_name varchar2)。

   zoom_available:启用/停用 Zoom按钮。当返回Ture时启用Zoom按钮,返回False时停用Zoom按钮,
      function zoom_available return boolean is
        form_name  varchar2(30) := name_in('_form');
         block_name varchar2(30) := name_in('_block');
  begin
if (form_name = 'GLXJEENT' and block_name = 'LINES')
            then
              return true;
          elsif (......)
            then
              return true;
          else
             return false;
         end if;
                                    end zoom_available;
   style(event_name varchar2): 该方法还未使用过,所以暂时不叙述。

   event(event_name varchar2): 这个procedure是重点要讲述的地方,因为我们基本上都是在这个方法里调用我们的代码的。
    通常我们可以通过修改Custom.pll文件来修改标准form的一些属性或是修改Lov的sql亦或是修改一些触发事件等。
    比如:修改采购订单汇总Form的审批事
         ==========  XX_PO_CUSTOM.PLL文件================================
        PROCEDURE event(event_name VARCHAR2) IS
          l_form_name          VARCHAR2(30) := name_in('system.current_form');
          l_block_name         VARCHAR2(30) := name_in('system.cursor_block');
          l_item_name          VARCHAR2(100) := name_in('system.cursor_item');
          Begin
          IF event_name = ' WHEN-BUTTON-PRESSED '
           If l_form_name = ' POXPOEPO'  THEN
            IF l_block_name = ' PO_CONTROL' THEN
             IF l_item_name=' APPROVE'  THEN
              IF name_in('PO_HEADERS.TYPE_LOOKUP_CODE') = 'STANDARD' THEN         
                 order_approve_checking;    --
              ELSIF name_in('PO_HEADERS.TYPE_LOOKUP_CODE') = 'CONTRACT' THEN
                 order_approve_checking2;
              END IF;
             End if;
            End if;
          End if;
          End if;
       End event;
       ================CUSTOM.PLL文件===========================
       PROCEDURE event(event_name VARCHAR2) IS
        Begin
         XX_PO_CUSTOM.EVNET(' WHEN-NEW-BLOCK-INSTANCE');
        End event;
      ====================================================================
  最后记得要把改好的CUSTOM.PLL和XX_PO_CUSTOM.PLL重新上传到ebs服务器指定目录下,并进行编译。编译命令:
        frmcmp_batch  userid=apps/apps module=$AU_TOP/resource/CUSTOM.pll
        output_file=$AU_TOP/resource/CUSTOM.plx module_type=LIBRARY    
   

猜你喜欢

转载自laoluo-space.iteye.com/blog/1956400