OracleEBSForm个性化

OracleEBSForm个性化

ID:40562732

大小:738.00 KB

页数:20页

时间:2019-08-04

上传者:U-2437
OracleEBSForm个性化_第1页
OracleEBSForm个性化_第2页
OracleEBSForm个性化_第3页
OracleEBSForm个性化_第4页
OracleEBSForm个性化_第5页
资源描述:

《OracleEBSForm个性化》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

Form个性化学习拷贝号_____ 文档控制变更记录20日期作者版本变更说明审阅姓名职位分发拷贝编号姓名位置/岗位1234备注: Form个性化FORM个性化是.10新增的功能。通过个性化设置,我们可以不必去修改ORACLE的FORM源码而实现FORM标准功能的修改,因为个性化代码是独立储存在数据库表中的,FORM的升级均对此无影响。所以在项目上要对FORM进行修改时,如果能行,最好还是用FORM个性化来实现。Form个性化可以减少开发的时间,Form个性化可以完成很多功能,比如:当打开From时弹出一个消息框、修改Item的属性、调用一个功能、新建一个菜单项等等。Form个性化可以在界面上修改实现,也可以修改Custom.pll文件来实现,本文侧重是以在界面上修改为例,本文参考了METALINKNote:279034.1上提供的几个文档个性化前提预定义文件控制form个性化的显示和进入,和控制“诊断”是一样的PROFILE,所以我们首先查看预定义文件:FND_HIDE_DIAGNOSTICS(是否隐藏“诊断”)DIAGNOSTICS(进入“诊断”是否需要apps密码)隐藏诊断菜单项个性化步骤Ø打开form个性化:工具栏:帮助-诊断-自定义代码-个性化。打开以后我们可以看到function和form的名称,其实从这里来看当前function的名称也是一个便捷的方法如图: Ø定义form个性化:包括条件、活动等Ø设置完成后,保存,关闭所有form。Form个性化需要重新打开form才可以起作用。后面提及的CUSTOM.PLL需要重新登陆EBS才能够起作用。Form个性化的界面主要分为规则头、条件tab页、上下文、活动tab页四个部分个性化入门案例下面废话不多说了,先通过一个经典入门案例来SHOW一下然后再具体解析各个属性是干嘛用的。HelloWorld!我们随便打开一个Form。此处选择的是在:应用开发员>应用产品>注册Ø工具栏:帮助-诊断-自定义代码-个性化Ø个性化头上的属性值为序号说明层10HelloWorld功能Ø条件Tab页的属性值为触发器事件条件处理模式WHEN-NEW-FORM-INSTANCEHelloWorld不在输入-查询模式下 Ø活动Tab页的属性值为序号类型消息类型消息文本10消息显示Helloworld!Ø然后保存,关闭Form,再打开Form,就会看到效果了 个性化属性设置个性化定义头部Ø函数名:当前Function的名称Ø表单名称:当前Form的名称Ø调试模式:n“显示调试信息”在活动Tab页,活动类型选“消息”,消息类型选“调试”时,消息可以显示出来,如果不选,则显示不出调试信息n“关闭”不允许显示消息,即使活动类型选择“消息”也不显示n“逐步”每次应用满足一个个性化规则时都提示Ø序号:序号小的会先执行,当然如果序号2的条件中的触发器在序号1之前触发,那么2肯定比1先执行,序号允许重复 Ø说明:不多说Ø层:n“功能”表示该个性化规则适用于当前Function,n“表单”该个性化规则适用于当前表单Ø启用:不选择则不执行这个个性化规则个性化条件Tab页主要定义个性化规则的触发的时间和条件Ø触发器事件:个性化规则触发的时间触发器Ø触发器对象:执行规则的对象,比如BLOCK或者ITEMØ条件:执行该触发器需要满足的条件,写法: Ø处理模式:n“不在“输入-查询”模式下”正常模式和“录入-查询”模式下都触发n“仅在“输入-查询”模式下”n“两者兼有”Ø上下文:“层”有行业、地点、职责、用户。注意,与一般的概念不同,这几个只要有一个满足条件就会触发该个性化规则。个性化活动Tab页在这里面定义的是个性化规则具体要做的事情Ø序号:Ø类型:有特性、消息、内置、特殊(或菜单)。特性用来指定一个对象,指定对象的某个属性,为这个属性指定一个值。消息用来弹出不同类型的信息。内置可以执行一些标准的form的Builtin,例如GO_BLOCK,DO_KEY等等。特殊(或菜单),定义special的行为。个性化底部按钮Ø插入“获取”表达式:获取SPEL表达式(下面会有解释)Ø插入项目值:往当前的输入框插入当前Form中选中的ITEM的值Ø验证:用来测试输入的字符串是否符合语法,如果不符和会报错。如果正确,会弹出结果。Ø现在申请:立即应用所做的个性化规则,只对某些类型适用,还是要以实际运行中为准。个性化实例Ø头和条件填写为如图所示当活动Tab页填写为 把APPLICATION.APPLICATION_NAME的提示改成了TEST当输入为:此时执行的触发器只能为WHEN-NEW-FORM-INSTANCE效果为在工具栏上增加了一个名为TEST的菜单项当我们输入为: 此时会打开百度网页当我们输入为:会执行cux_test_pkg.pkg.main过程上面就是一些简单例子,其他的属性可以自己去尝试。输入时需要注意的问题规则个性化的赋值或写条件的时候是有一些规则的,例如在form个性化里面取item的值用:block.item,也可以用SPEL,不能用name_in()(但是在后面说的custom.pll中,只能用name_in())。获取属性不能用GET_ITEM_PROPERTY等。赋值条件及写法在消息里面,或是给对象的属性、参数赋值时,都涉及到字符串。字符串的赋值有一些规则:Ø如果输入的字符串前面没有“=”的话,那么输入的字符串就是所赋的值。Ø字符串的长度是有限的。Ø如果输入的字符串是以“=”开始的话,那么后面的字符串在运行时会被作为表达式被计算出结果来,再赋值。例如以下的各种形式:n||,TO_CHAR,DECODE,NVL等。n(:block.field),including:system,:globaland:parametervalues。n调用函数。nselect语句。写成“=select”,返回的列只能是字符型的,如果不是。可以用TO_CHAR处理一下,长度不能超过2000bytes,而且只能返回一列,如果返回多列,也只取第一列下面这个列表举例说明了上面的规则(引用oracle文档): SPEL(SimplestPossibleExpressionLanguage)${objectType.objectName.Property}例如:${item.po_lines.line_num.requeired}SPEL替代了一些formbuiltins,比如GET_ITEM_PROPERTY,GET_BLOCK_PROPERTY等。另外,它还可以获取PROFILE、消息字典的值,以及LocalVariables(LocalVariables也是新增的,它类似与全局变量,但是只能在当前form使用,最大长度是4000bytes,全局变量只有255bytes)个性化提升案例本案例是对并发程序的标准表单进行个性化,要实现的功能是增加一个菜单项实现点击该菜单时打开可执行程序定义的标准表单界面并对当前的并发程序进行查询(练习用) 整体逻辑Ø打开并发程序定义界面,在Tools菜单栏下新加一个菜单项。Ø点击该菜单时,如果并发程序名为空,则报一个错误。Ø如果可执行名非空,增加一个全局变量,储存可执行的名称。Ø点击新增的菜单项,可以打开可执行FORM。Ø当打开可执行FORM时,对上述定义的全局变量进行初始化。Ø进入查询模式。Ø将全局变量的值赋予可执行名称项值。Ø进行查询。Ø清除全局变量的值步骤Ø打开并发程序定义界面,再打开FORM个性化界面,定义一个名为Executable的个性化规则,对应的触发器事件为WHEN-NEW-FORM-INSTANCE Ø在Actions里,增加一个Menu类型,其中MenuEntry选择’SPECIAL1’(SPECIAL1至15是在Tools菜单下,16至30是在Reports菜单下,31至45在Actions菜单下),MenuLabel输入’Executable’(即菜单项标签),IconName为’CONC_PROG’即并发程序FORM对应的BLOCKØ保存,打开可执行界面,可以看到新增的菜单项,点击,没有事件发生。Ø在可执行界面下,打开FORM个性化界面,我们增加一个事件为,如果可执行的名称为空,则报一个错误’PleaseEnterExecutableName!’。新增一个个性化规则CheckExecutableName,TriggerEvent为SPECIAL1,条件为可执行名称为空。即’:CONC_PROG.EXECUTABLE_NAMEISNULL’Ø在Actions下,设置一个Meassage类型,MessageType为Error,MessageText为PleaseEnterExecutableName!Ø保存。打开并发程序定义界面,ExecutableName项为空,直接点击Executable。Ø在并发定义界面下,打开FORM个性化界面。我们先定义一个全局变量,储存可执行的名称,在后面中要用到。新增一个名为ExcutableEntered的个性化规则,TriggerEvent为SPECIAL1,条件为:CONC_PROG.EXECUTABLE_NAMEisnotnull Ø在Actions里加入一个Property类型,ObjectType为GlobalVariable即全局变量,变量名为XX_XH_EXECUTABLE_NAME,为了便于区分,我们FORM个性化的全局变量全部以XX_开头。PropertyName为VALUE,Value为=:CONC_PROG.EXECUTABLE_NAME(前面有=号,如果不加等号的话,会被赋值为’:CONC_PROG.EXECUTABLE_NAME’)。Ø再增加一个Builtin类型,BuiltinType为LunchaFunction即调用一个功能,FunctionCode为FND_FNDCPMFE即可执行对应的功能,FunctionName会被自动调出。Ø保存。打开并发程序界面,查找一个并发程序,点击Tools>Executable,可以看到可执行定义界面被调出,但是没有数据。 Ø关闭并发请求界面,打开可执行界面,再打开FORM个性化界面。新增加一个FORM个性化规则INITXX_XH_EXECUTABLE_NAME,触发器事件为WHEN-NEW-FORM-INSTANCE。我们做这个个性化规则的目的是初始化全局变量INITXX_XH_EXECUTABLE_NAME。Ø在Actions下,增加一个Property类型,ObjectType为GlobalVariable,变量名为XX_XH_EXECUTABLE_NAME。PropertyName为INITIALVALUE(注意与VALUE的区别,VALUE是直接赋值,而INITIALVALUE为如果该变量为null或未被创建,会被赋初值,如果有值的话,则不会覆盖),Value为=null。这个个性化的目的是为了直接打开该FORM时,后面定义的用到此全局变量的个性化规则有效。Ø新增一条名为EnterQuery的个性化规则。触发器的事件为WHEN-NEW-FORM-INSTANCE,条件为:global.XX_XH_EXECUTABLE_NAMEisnotnull。即上面定义的那个全局变量的值不为空时才会执行。 Ø在Actions,设置一个Builtin类型,BuiltinType为DO_KEY,就像在FORM中直接执行的语句。设置Argument为ENTER_QUERY即进入查询模式。Ø新增一条名为’ExecuteQuery’个性化规则,触发器项为WHEN-NEW-RECORD-INSTANCE,对象为FND_EXECUTABLES,条件为:global.XX_XH_EXECUTABLE_NAMEisnotnull。ProcessingMode改为OnlyinEnter-QueryMode。主要是能在查询模式下继续执行该代码,如果不改在并发程序界面调出可执行界面时,可执行会停在查询模式里。Ø在Actions里,设置type为Property,ObjectType为Item,TargetObject为FND_EXECUTABLES.EXECUTABLE_NAME,PropertyName为VALUE,Value为=:global.XX_XH_EXECUTABLE_NAME。Ø增加一个Builtin类型,BuiltinType为DO_KEY,Argument为EXECUTE_QUERY。即进行FND_EXECUTABLES.EXECUTABLE_NAME的值等于全局变量的查询。 Ø新增一条名为ClearXX_XH_EXECUTABLE_NAMEValue个性化规则。触发器事件为WHEN-NEW-RECORD-INSTANCE,对象为FND_EXECUTABLES,条件为:global.XX_XH_EXECUTABLE_NAMEisnotnullØ在Actions里,设置Type为Property,ObjectType为GlobalVariable,TargetObjectXX_XH_EXECUTABLE_NAME,PropertyName为VALUE,Value为=null,即查询完之后将该全局变量的值清空。Ø至此,完成 Custom.pll个性化从以上的描述,我们可以看到form个性化满足了我们对form做某些更改的需求,但是还是有不少的局限。Oracle给我们的个性化还提供了一个途径:CUSTOM.PLL。CUSTOM.PLL可以实现我们更加复杂的个性化需求。因为在这里,我们可以写更加复杂的PLSQL,但是与我们直接在form里做修改相比,还是有很多限制的。CUSTOM.PLL是标准的library,不管是调试还是其它的,都会影响到全局从本质上来说,form个性化和CUSTOM.PLL是相同的,可以发现如果选择了:帮助-诊断-自定义代码-关闭。CUSTOM.PLL的代码也不起作用了。代码实现编译命令CUSTOM.pll路径:$AU_TOP/RESOURCE在$AU_TOP/RESOURCE路径下编译CUSTOM.pll的命令:frmcmp_batchmodule=$AU_TOP/RESOURCE/CUSTOM.plluserid=apps/appsModule_Type=LIBRARYCustom.pll中的Function和ProcedureØfunctionzoom_availablereturnBoolean;是否启用工具栏中:view-zoom,例如FUNCTIONzoom_availableRETURNBOOLEANISform_nameVARCHAR2(30):=name_in('system.current_form');block_nameVARCHAR2(30):=name_in('system.cursor_block');BEGINIFform_name='FNDCPMCP'ANDblock_name='CONC_PROG'THENRETURNTRUE;ELSERETURNFALSE;ENDIF;RETURNFALSE;ENDzoom_available;Øfunctionstyle(event_namevarchar2)returninteger;是用来指定下面event里面代码执行的方式,是先执行,后执行,还是覆盖。可选的有:custom.before、custom.after、custom.override、custom.standard(默认值).例如:FUNCTIONstyle(event_nameVARCHAR2)RETURNINTEGERISBEGINIFevent_nameIN('SPECIAL10','SPECIAL11','SPECIAL12')THENRETURNcustom.override;ELSERETURNcustom.standard;ENDIF;ENDstyle;Øprocedureevent(event_namevarchar2)这是主要代码,这里面允许使用的触发器有ZOOM、WHEN-NEW-FORM-INSTANCE、WHEN-NEW-BLOCK-INSTANCE、WHEN-NEW-RECORD-INSTANCE、WHEN-NEW-ITEM-INSTANCE、WHEN-VALIDATE-RECORD,还有special代码结构为:PROCEDUREevent(event_nameVARCHAR2)ISform_nameVARCHAR2(30):=name_in('system.current_form');block_nameVARCHAR2(30):=name_in('system.cursor_block');BEGIN IF(event_name='ZOOM')THEN……--个性化代码ELSIF(event_name='WHEN-NEW-FORM-INSTANCE')THENIF(form_name='FNDCPMCP'ANDblock_name='CONC_PROG')THEN……--个性化指定的form、block、trigger的代码ENDIF;ELSIF(event_name='WHEN-NEW-BLOCK-INSTANCE')THEN……ELSIF(event_name='SPECIAL10')THEN……ELSENULL;ENDIF;ENDevent; 个性化方法比较通常会建议首先使用form个性化,其次是custom.pll。在使用custom.pll时,也建议不直接在custom.pll里面做客户化。因为custom.pll是标准的library,不管是调试还是其它的,都会影响到全局。有人建议比较好的做法是复制一份custom.pll来做个性化,比较认同。具体步骤:将custom.pll另外copy一份,起名为xx_custom.pll,把xx_custom.pll加载到custom.pll下(用formbuilder打开custom.pll,在AttachedLibraries里面加上xx_custom.pll),然后在custom.pll的event里面写代码:xx_custom.event(event_name);。这样,我们的客户化代码都可以放在xx_custom.pll这个library里面,降低了风险。(这个没试过,不知道效果会怎么样,o(∩_∩)o) 未决与已结问题未决问题序号问题解决方案负责人目标日期实际日期12已结问题序号问题解决方案负责人目标日期实际日期

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭