zoukankan      html  css  js  c++  java
  • 转:FORM:客制化Form的菜单栏和右鍵菜單

    Oracle EBS还允许客制化Form的菜单栏。

    用户最多可以定义45个form-level的trigger,名称必须为SPECIALn,

    其中SPECIAL1 to SPECIAL15属于Tools菜单项,

    SPECIAL16 to SPECIAL30属于Reports菜单项,

    SPECIAL31 to SPECIAL45属于Actions菜单项,其中Reports、Actions的名称可以被修改。

    修改代码为:

    APP_SPECIAL.INSTANTIATE('SPECIAL_B','库存');

    APP_SPECIAL.ENABLE('SPECIAL_B',PROPERTY_On);

    其中SPECIAL,SPECIAL_B,SPECIAL_C分别代表的是Tools,Reports,Actions。

     

    初始化示例:

      IF (FND_FUNCTION.TEST('DEMVC_DEMVCEOR_PRINT_ORDER')) THEN

       app_special.instantiate('SPECIAL1','&Print Order');

       app_special.enable('SPECIAL1',PROPERTY_ON);

       app_special.instantiate('SPECIAL2','Specia&l 2 Line', '',TRUE,'LINE');

        app_special.instantiate('SPECIAL3_CHECKBOX','Spe&cial 3 Box w Line', '',TRUE,'LINE');

        app_special.set_checkbox('SPECIAL3_CHECKBOX','TRUE');

        app_special.instantiate('SPECIAL4_CHECKBOX','Special &4 Box');

        app_special.set_checkbox('SPECIAL4_CHECKBOX','TRUE');

        app_special.instantiate('SPECIAL18','Specia&l 18 Line SEP', separator=>'LINE');

        app_special.instantiate('SPECIAL32','Specia&l 32 Line', '',TRUE,'LINE');

        app_special.instantiate('SPECIAL33','Specia&l 33');

        app_special.instantiate('SPECIAL30','Specia&l 30');

        app_special.instantiate('SPECIAL31','Specia&l 31 Line','',TRUE,'LINE');

        app_special.instantiate('SPECIAL45','Spe&cial 45');

    /* and display a button on the form */

        app_item_property.set_property('orders.print_order',

                                   DISPLAYED, PROPERTY_ON);

        ELSE

        app_item_property.set_property('orders.print_order',

                                   DISPLAYED, PROPERTY_OFF);

        END IF;

    app_special.instantiate设置菜单项的文字说明,

    app_special.enable设置菜单项是否可用,

    app_special.set_checkbox设置check_box菜单项的选定状态。

    在form-level 的SPECIALn trigger中,定义了这些菜单项选中后的处理代码,如下所示:

    Eg1:

      demvceor.PRINT_ORDER('SPECIAL1');

    Eg2:

     if (app_special.get_checkbox('SPECIAL3_CHECKBOX')='TRUE') then

         fnd_message.debug('Special 3 is True!');

    else

         fnd_message.debug('Special 3 is False!');

    end if;

      

      右键菜单也可以自定义,form-level PRE-POPUP-MENU trigger引用APPSTAND.EVENT('PRE-POPUP-MENU')建立default menu;建立block /item level pre-pop-menu trigger须(Execution HierarchyàAfter)。

    从block /item level pre-pop-menu trigger(Execution HierarchyàAfter)中调用app_popup.instantate函数初始化右键菜单项:

    procedure APP_POPUP.INSTANTIATE(

    option_name varchar2,

    txt varchar2,

    initially_enabled boolean default true,

    separator varchar2 default null);

       Example

      • This example results in a menu that has a line above the second custom entry and

       has the third custom entry grayed out (disabled)

    APP_POPUP.INSTANTIATE(

    ‘POPUP1’,’First Entry’);

    APP_POPUP.INSTANTIATE(

    ‘POPUP2’,’Second Entry’, TRUE, ‘LINE’);

    APP_POPUP.INSTANTIATE(

    ‘POPUP3’,’Third Entry’, FALSE);

      右键菜单的处理函数写在名为POPUP1 through POPUP10的trigger中,应该在正确的level上建立这些trigger (通常是block/item level)。

     

    客制化菜单

      Effect:

     

      

     

      Usage:调用 app_special.instantiate包

     

      Examples:

     

      1、增加一个自定义Form Level的触发器(SPECIAL11)

     

      

     

      2、增加测试代码如下:

     

      ――――――――――――――――――――――――――――――――――――――――――――――

     

      declare

     

      v_invoice_num varchar2(50);

     

      begin

     

      v_invoice_num := '菜单栏客制化100';

     

      fnd_message.debug(v_invoice_num);

     

      end;

     

      ―――――――――――――――――――――――――――――――――――――――――――――――

     

      3、在Form WHEN-NEW-FORM-INSTANCEFJ 进行调用:

     

      APP_SPECIAL.INSTANTIATE('SPECIAL11','测试菜单2', '', TRUE, 'LINE');

     

      ―――――――――――――――――――――――――――――――――――――――――――――――

     

      4、一些特殊说明:

     

      上面自定义FORMS级触发器,名字必须定义为“SPECIAL+数字‖,否则会报错。并且数字的大小决定了菜单出现的先后顺序。数字还有更大作用就是决定了,自定义菜单选项放在哪个主菜单下。

     

      SPECIAL1—SPECIAL15在“工具”主菜单下。

     

      SPECIAL16—SPECIAL30在“报表”主菜单下。

     

      SPECIAL31—SPECIAL45在“活动”主菜单下。

     

      SPECIAL46以上就直接报错了。^_^

     

      如下图

     

      

     

      5、 控制自定义菜单的是否激活可用。

     

      使用app_special.enable函数可以控制菜单是否可以使用。

     

      例如:基于不同的数据块,实现菜单的不可用。在block的‖when-new-block-instance‖中加入

     

      效果:

     

      app_special.enable('SPECIAL1',property_off);

     

      效果

     

      

     

      6、 在自定义的菜单上使用checkbox按钮。

     

      ①增加一个自定义Form Level的触发器(SPECIAL1_CHECKBOX),代码如下:

     

      if app_special.get_checkbox('SPECIAL1_CHECKBOX')='TRUE' then

     

      fnd_message.debug('Special 1 is True!');

     

      else

     

      fnd_message.debug('Special 1 is False!');

     

      end if;

     

      注:使用app_special.get_checkbox来获取checkbox的状态值。

     

      ②在Form的WHEN-NEW-FORM-INSTANCE触发器中初始化菜单。

     

      app_special.instantiate('SPECIAL1_CHECKBOX','Spe&cial 1 Box w Line', '',TRUE,'LINE');

     

      app_special.set_checkbox('SPECIAL1_CHECKBOX','TRUE');

     

      注:app_special.set_checkbox是对checkbox进行赋值操作。

     

      ③效果如下:

     

      

    客制化右键菜单

      1、 首先如果是要为某个ITEM,另外开发一个右键菜单。这个需要直接按照FORM的开发教程,自定义一个POPUP菜单就可以了。但本文讲的在EBS所有的快捷菜单上,额外增加所需的菜单按钮。也就是要图上所示的快捷菜单上增加菜单按钮。

      

      2、 在FROM-LEVEL增加自定义触发器(名字规则为:POPUP+N)

      

      3、 ITEM的“PRE-POPUP-MENU”触发器上初始化菜单。

      APP_POPUP.INSTANTIATE('POPUP1','First Entry');

      APP_POPUP.INSTANTIATE('POPUP10','SECONED Entry',TRUE,'LINE');

      APP_POPUP.INSTANTIATE('POPUP3','THREE Entry',FALSE,NULL);

      

      4、 如果是整个BLOCK的ITEM都需要客制化快捷菜单,可以在BLOCK的“PRE-POPUP-MENU”定义。

      APP_POPUP.INSTANTIATE('POPUP1','global');

      

      调用EBS日期控件

      1、 首先将ITEM的LOV属性设置为“ENABLE_LIST_LAMP”、列表验证属性设置为“否”

      

      2、在ITEM的“KEY-LISTVAL”解发器下加入对下代码:

      BEGIN

      calendar.show();

      END;

      3、注意:ITEM对应数据库类型必须是DATE类型,否则会报frm-40700错误。效果如下:

      

     

    ############################## 通往精神的路很多,物质只是其中一种 ##############################
    http://www.onejava.com/article/oracle/wip/wiptop.htm
    https://docs.oracle.com/cd/A60725_05/html/comnls/us/index.htm
    http://www.oracle.com/technetwork/cn/developer-tools/apex/getting-started-094884-zhs.html
    https://docs.oracle.com/cd/B34956_01/current/html/docset.html
  • 相关阅读:
    SVN:cannot map the project with svn provider解决办法
    项目管理工具_maven的配置
    servlet,过滤器,监听器,拦截器的区别
    索引
    事务的隔离级别和传播行为
    jbpm工作流
    Hibernate---进度1
    java——反射
    HttpClient
    TCP和UDP并实现socket的简单通信
  • 原文地址:https://www.cnblogs.com/pompeii2008/p/5309928.html
Copyright © 2011-2022 走看看