TEC1303.Form个性化技术总结 - 第三部分 Custom.pll个性化技术讲解

         第三部分  Custom.pll个性化技术讲解

                                         Form个性化满足了我们对form做某些更改的需求,但是还是有不少的局限。Oracle给我们的个性化还提供了一个途径CUSTOM.PLL

                                          CUSTOM.PLL可以实现我们更加复杂的个性化需求。因为在这里,我们可以写更加复杂的PLSQL,但是与我们直接在form里做修改相比,还是                                    有很多限制的。

Ø 建议使用的方法 :

通常会建议首先使用form个性化,其次是custom.pll。在使用custom.pll时,也建议不直接在custom.pll里面做客户化。因为custom.pll是标准的library,不管是调试还是其它的,都会影响到全局。有人建议比较好的做法是复制一份custom.pll来做个性化,比较认同。具体步骤: 将custom.pll另外copy一份,起名为xx_custom.pll,把xx_custom.pll加载到custom.pll下(用form builder打开custom.pll,在Attached Libraries里面加上xx_custom.pll),然后在custom.pllevent里面写代码:xx_custom.event(event_name); 。这样,我们的客户化代码都可以放在xx_custom.pll这个library里面,降低了风险。 从本质上来说,form个性化和CUSTOM.PLL是相同的,可以发现如果选择了:帮助-诊断-自定义代码-关闭。CUSTOM.PLL的代码也不起作用了。

1)     编译命令

CUSTOM.PLL路径:$AU_TOP/resource

工作目录切换到$AU_TOP/resource下,

11i编译CUSTOM.PLL的命令:

f60gen $AU_TOP/resource/CUSTOM.pll apps/apps2008 module_type=library output_file=$AU_TOP/resource/CUSTOM.plx

R12编译CUSTOM.PLL的命令:

frmcmp_batch Module=$AU_TOP/resource/CUSTOM.pll Userid=apps/apps Module_Type=LIBRARY output_file=$AU_TOP/resource/CUSTOM.plx

2)     Custom.pll中的FunctionProcedure

a)    zoom_available:是否启用工具栏中:view-zoom。例如:

FUNCTION zoom_available RETURN BOOLEAN IS
   form_name VARCHAR2(30) := name_in('system.current_form');
   block_name VARCHAR2(30) := name_in('system.cursor_block');
BEGIN
       IF ((form_name = 'POXPOEPO' AND block_name = 'PO_HEADERS') OR
       (form_name = 'POXPOERL' AND block_name = 'PO_RELEASES')) THEN
           RETURN TRUE;
       ELSE
           RETURN FALSE;
       END IF;
       RETURN FALSE;
END zoom_available;

b)    style(event_name varchar2):是用来指定下面event里面代码执行的方式,是先执行,后执行,还是覆盖。可选的有:custom.beforecustom.aftercustom.overridecustom.standard(默认值)。例如:

FUNCTION style(event_name VARCHAR2) RETURN INTEGER IS
BEGIN
       IF event_name IN ('SPECIAL10', 'SPECIAL11', 'SPECIAL12') THEN
           RETURN custom.override;
       ELSE
           RETURN custom.STANDARD;
       END IF;
 END style;

c)    event(event_name varchar2):这是主要代码,这里面允许使用的触发器有: ZOOM WHEN-NEW-FORM-INSTANCE WHEN-NEW-BLOCK-INSTANCEWHEN-NEW-RECORD-INSTANCE WHEN-NEW-ITEM-INSTANCEWHEN-VALIDATE-RECORD,还有special

代码结构:

PROCEDURE event(event_name VARCHAR2) IS
  form_name VARCHAR2(30) := name_in('system.current_form');
  block_name VARCHAR2(30) := name_in('system.cursor_block');
BEGIN
  IF (event_name = 'ZOOM') THEN
    ……--个性化代码
  ELSIF (event_name = 'WHEN-NEW-FORM-INSTANCE') THEN
    IF (form_name = 'POXPOEPO' AND block_name = 'PO_HEADERS') THEN
      ……--个性化指定的form、block、trigger的代码
    END IF;
  ELSIF (event_name = 'WHEN-NEW-BLOCK-INSTANCE') THEN
    ……
  ELSIF (event_name = 'SPECIAL10') THEN
    ……
  ELSE
    NULL;
  END IF;
END event;

a)     编写CUSTOM库:

CUSTOM库是一个OracleForms Developer PL/SQL 库,它允许你充分使用Oracle Forms Developer直接整合你的代码到Oracle应用程序而不必改变Oracle Application 的代码。

b)     什么时候使用CUSTOM库 :

在一些主要的情况下,可以使用CUSTOM库。

ZoomZoom通常会打开另一个form并且可以传递参数到达开的form中。

通用事件的逻辑,在确定的通用form事件中,增强Oracle应用程序的逻辑例如: WHEN-NEW-FORM-INSTANCE WHEN-VALIDATE-RECORD你可以使用通用事件来改变区域的提示和其他的属性,隐hide区域,添加验证和其它产品特殊事件的逻辑

在确定的产品特殊事件中增强或替换Oracle应用程序逻辑实现业务逻辑。

客户定义菜单,在Oracle应用程序form中添加条目到special菜单中,例如一个打开客户化form的条目。

设置视觉属性 使用CUSTOM库在运行时来改变视觉属性,使用Oracle Forms内建程序 SET_VA_PROPERTY 来设置CUSTOM1 CUSTOM5的视觉属性,并使用APP_ITEM_PROPERTY2.SET_PROPERTY在运行时来应用视觉属性。

编写ZoomZoom允许用户调用在每一个块中调用逻辑,例如,你可能希望在输入采购订单form时打开供应商form,你可以在这一个块上使用Zoom并且当用户调用它,你可以打开供应商form

当光标在form中改变到不同的块中,form调用CUSTOM库中的ZOOM_AVALIABLE方法。如果这个方法返回TRUEZOOM条目和按钮可用,如果返回FALSE不可用。

如果Zoom条目是可用的,这是当用户调用Zoom时调用CUSTOM中的ZOOM方法。你基于当前form和块编写这个事件的方法。

c)     CUSTOM库中编写Zooms

1.添加一个CUSTOM.ZOOM_AVALIABLE方法只是form和块什么时候可以启用Zoom

2.添加在ZOOM事件中添加CUSTOM.EVENT过程。

支持一个块中的多Zoom事件。

d)     编写通用Form事件:

你可以编写逻辑,在特别的form并在块的特别的事件中触发,你可以编写逻辑在一下的事件中:

WHEN-FORM-NAVIGATE

WHEN-NEW-FORM-INSTANCE

WHEN-NEW-BLOCK-INSTANCE

WHEN-NEW-RECORD-INSTANCE

WHEN-NEW-ITEM-INSTANCE

WHEN-VALIDATE-RECORD

SPECIALn (n1 45之间的一个数)

ZOOM

EXPORT

KEY-Fn (n1 8之间的一个数)

一些Oracle应用程序forms例如多数的Oracle人力资源模块的form可能提供附加的事件调用CUSTOM库,这些附加事件被列在拥有这个form的产品的文档中。你可以编写逻辑在CUSTOM库中以相同的方法在通用事件中编写逻辑。

e)     CUSTOM库中为通用的form事件编写逻辑:

a)     CUSTOM.EVENT过程中为特别的事件添加一个分支。

b)     在分支内部,指定你希望你的逻辑触发的form和块并添加逻辑到你希望发生的事件到这些块中。

f)      编写产品指定的事件,为了编写产品指定的事件逻辑到CUSTOM库中:

a)     为特殊产品指定的事件添加分支到CUSTOM.EVENT过程中在分支中添加逻辑。

b)     如果要支持客户化的执行类型,添加分支到CUSTOM.STYLE方法来指定执行类型。

g)     添加客户化条目到special菜单中,为了在CUSTOM库中添加逻辑到special菜单中的条目:

1)     CUSTOM.EVENT过程中添加分支事件WHEN-NEW-FORM-INSTANCE。在这个分支中指定你希望添加逻辑的form和块,添加逻辑到Special菜单中

2)     将特别的SPECIALn事件添加分支到CUSTOM.EVENT过程。在这个分支中,指定逻辑发生的form和块。添加逻辑到你的Special菜单中。如果是你开发的form你应该添加逻辑到用户命名的SPECIALn触发器中。

h)     Oracle应用对象库中产品特别的事件。Oracle应用对象库提供可以使用CUSTOM库使用的产品特别事件:

1)     WHEN-LOGON-CHANGED事件

使用WHEN-LOGON-CHANGED事件在用户使用”File-> Log On as a Different User”立即触发来验证。这个方法是只是对基于Oracle Forms Developer开发的form有效。而对基于HTMLJavafrom是无用的。

你可以使用FND_PROFILE.GET方法得到新的用户名和其他预置文件值,如果因为一些原因在这个时间中的代码抛出form_trigger_failure的异常,用户将返登录界面。

2)     WHEN-RSPONSIBILITY-CHANGED事件

使用WHEN-RESPONSIBILITY-CHANGED事件当用户使用“Fiel->SwitchResponsibility”来切换职责时触发进行验证。这个方法只对基于Oracle Forms Developer 开发的forms有效。

你可以通过FND_PROFILE.GET方法得到新的职责名称和其他预置文件的值。如果因为一些原因在这个事件中的代码抛出 form_trigger_failure的异常,用户将返回如同选择了一个错误的职责的值列表界面。

3)     CUSTOM包,CUSTOM包包含了下列的方法和过程:CUSTOM.ZOOM_AVALIABLECUSTOM.STYLECUSTOM.EVENT

4)     CUSTOM.ZOOM_AVAILABLE

function custom.zoom_available return BOOLEAN;

如果对于这个块Zoom是可用的,则返回TRUE,否则返回FALSE,通常用于测试form和块。 通常这个方法返回FALSE

5)     CUSTOM.STYLE

function custom.style(event_name varchar2) return integer;

这个方法允许你决定执行的类型。你可以选择代码的执行为,之前,之后,或替代。注意的是一些产品特定事件是不支持所有的执行类型的。CUSTOM.STYLE不对通用form事件或Zoom起作用。 下列的包变量以用作返回值: Custom.before Custom.after Custom.override Custom.standard作为默认值,这个方法返回custom.standard

6)     CUSTOM.EVENT

procedurecustom.event(event_name varchar2);

这个方法允许你在指定的事件中执行你的代码。通常测试事件名称或测试form和块。作为默认这个方法应该返回null

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值