zoukankan      html  css  js  c++  java
  • Form开发中组件控制的几个常用方法

    在Oracle EBS 的Form二次开发中,经常需要灵活的来控制某些组件是否可用、是否可见;有时希望某些字段的值自动生成或者手动输入;有时又希望能够根据不同的职责、不同的用户等来设置不同的行为控制。常见的需求:

    1. 只有某些角色的人才能看到销售订单中“登记订单”这个按钮
    2. 只有某些角色的人才可以切换到某个标签页
    3. 实现订单号码根据需要自动生成编号或者手工录入
    4. 快速编码的值即可以录入所有应用下的,也可以只能录入某个应用,更可以只能录入某个应用下某个类型下的值
    5. 在某些情况下Form需要只能够查询
    6. ……

    在Oracle EBS环境中有很多方法来实现这些功能,但是使用预置文件(Profile)子功能(Subfunction)功能参数(Function Parameter)是最常用最方便有效的3种方式,

    一,子功能(Subfunction)

    子功能是实际上是一个特殊的功能,利用子功能的方式其实就是使用了Oracle EBS的功能权限控制来实现安全性的控制,其实质就是某个用户能够执行一个被授权的功能,一般情况下会使用子功能来控制某些按钮是否显示,进而实现了用户是否可以操作Form中的某些功能,所以Oracle EBS的开发人员经常使用子功能来通过显示/隐藏或者有效/失效界面上的组件来实现功能的有效或无效,如上面常见需求中的1,2使用子功能最适合。

    如下我希望只有授权的用户才能看到Book Order这个按钮,看不到的自然也无法进行这个操作了

    book_order_example

    实现步骤:

    1,为Book Order按钮组件定义一个子功能

    define_subfunction 

    2,Form代码中根据功能来控制组件

    在PRE-FORM触发器中,来判断用户是否有权限看到这个操作,如果有就显示否则不显示

    1
    2
    3
    4
    5
    
    IF (fnd_function.test('XHUORDER_BOOK_ORDER')) THEN
      app_item_property.set_property('headers.book_order', DISPLAYED, PROPERTY_ON);
    ELSE
      app_item_property.set_property('headers.book_order', DISPLAYED, PROPERTY_OFF);
    END IF;

    3,将子功能授权给有权的用户

    如果某个用户需要显示这个按钮,只要将子功能XHUORDER_BOOK_ORDER添加用户拥有的职责对应的菜单里面,把子功能XHUORDER_BOOK_ORDER添加为一个菜单项,但是Prompt留空就可以

    menu_subfunction_define

    定义的时候需要将Prompt栏位留空,这样在菜单显示的时候就看不到这个菜单项,实际关键的是最后的Grant列,默认都是勾上的,代表了授权给相关的职责用户

    二、功能参数

    功能参数的方法实际上和子功能是一致的控制方法,都是使用功能权限来进行控制, 它通过针对同一个Form定义多个Function,不同Function参数的值不同来实现控制,Oracle EBS中最典型的应用就是Form中的仅仅查询功能和快速编码(Lookup Code)定义界面

    在快速编码定义界面中,可以通过APPL_SHORT_NAME参数来控制只能查询特点应用的快速编码;LOOKUP_TYPE参数来控制特点类型的快速编码。实现了参数值不同界面的行为也不同

    lookup_type_demand_class 

    实现步骤:

    1,在Form设计器中定义参数

    像快速编码定义的Form中,定义了如下图的参数

    form_parameter

    2,在Form程序代码中引用参数的值来控制

    根据业务需求和功能设计的要求,通过参数的值来编写代码,如

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
      if (:parameter.lookup_type is not null) then
        set_block_property('FND_LOOKUP_TYPES', INSERT_ALLOWED,
            PROPERTY_FALSE);
      end if;
     
      if (:parameter.appl_short_name is not null) then
        :parameter.appl_short_name := upper(:parameter.appl_short_name);
        :parameter.appl_id := 
            fnd_utilities.get_application_id(:parameter.appl_short_name);
        :parameter.application := 
            fnd_utilities.get_application_name(:parameter.appl_id);
     
        app_item_property.set_property('FND_LOOKUP_TYPES.APPLICATION_NAME',
            INSERT_ALLOWED, PROPERTY_OFF);
      end if;

    parameter的参数值在Form运行的时候会从Function定义中传入

    3,定义Function时设置具体的参数值

    如上面显示的DEMAND_CLASS的快速编码,参数为:VIEW_APPLICATION=”AU” LOOKUP_TYPE=”DEMAND_CLASS”

    lookup_type_demand_class_function

    为Function定义了参数,在运行的时候就会到form的parameter中去查找同名的参数,并将等号(=)后的值传给参数,多个参数间用空格隔开。因此可以采用功能参数值的不同定义不同的功能,并赋给对应用户的职责就实现了不同的控制

    三、预置文件(Profile)

    预置文件的控制是这些方法中最灵活最强大的一种方法,通过预置文件可以实现到站点层、应用层、职责层和用户层的控制,预置文件相当于Oracle EBS系统中根据的一个全局变量,这个全局变量在不同的上下文可以设置为不同的值,因此在Form的开发中可以使用它来实现业务逻辑的控制,上面列出的常见需求都可以使用预置文件的方法来实现,只是预置文件太过灵活,所以有的需求则显得大材小用,因此只要需要较灵活层次控制并符合站点层、应用层、职责层和用户层这样层次控制的时候才采用。

    实现步骤:

    1,定义预置文件

    在Application Developer职责下定义预置文件,就像在Oracle EBS系统中定义一个变量的感觉,SQL Validation区域就是预置文件可以定义的值列表

    define_profel 

    2,Form中根据预置文件值进行控制

    1
    2
    3
    4
    5
    6
    7
    
      l_order_num_mode := fnd_profile.value('DEMO_ORDER_NUMBER_MODE');
     
      if :parameter.order_number_mode = 'AUTOMATIC' then
        app_item_property.set_property('HEADERS.ORDER_NUMBER', REQUIRED,  PROPERTY_FALSE);
        app_item_property.set_property('HEADERS.ORDER_NUMBER', ENTERABLE, PROPERTY_FALSE);
        app_item_property.set_property('HEADERS.ORDER_NUMBER', NAVIGABLE, PROPERTY_FALSE);
      end if;

    上面的代码代表了如果预置文件DEMO_ORDER_NUMBER_MODE的值是AUTOMATIC的话,进行ORDER_NUMBER的控制

    3,设置预置文件的值

    Form程序中根据预置文件值的不同进行了不同的控制,而预置文件的值则是根据需要进行设置

    profile_set_find

    profile_set

    通过以上预置文件值设置的不同,Form控制的项就会根据设置的不同表现出不同的行为。

    上面描述的3个方法是Oracle EBS Form二次开发中最常用的方法,根据功能需求的不同选择最适合的方法。

    转载:http://oracleseeker.com/2009/09/01/graphical_component_control_in_oracle_ebs_form/

             

                成长

           /      |     \

        学习   总结   分享

    QQ交流群:122230156

  • 相关阅读:
    CodeForces 288A Polo the Penguin and Strings (水题)
    CodeForces 289B Polo the Penguin and Matrix (数学,中位数)
    CodeForces 289A Polo the Penguin and Segments (水题)
    CodeForces 540C Ice Cave (BFS)
    网站后台模板
    雅图CAD
    mbps
    WCF学习-协议绑定
    数据库建表经验总结
    资源位置
  • 原文地址:https://www.cnblogs.com/benio/p/1890364.html
Copyright © 2011-2022 走看看