当前位置:首页 > IT计算机/网络 > 数据库 > Oracle-EBS-Form个性化
Form个性化学习拷贝号_____文档控制变更记录1日期作者版本变更说明审阅姓名职位分发拷贝编号姓名位置/岗位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的名称调试模式:“显示调试信息”在活动Tab页,活动类型选“消息”,消息类型选“调试”时,消息可以显示出来,如果不选,则显示不出调试信息“关闭”不允许显示消息,即使活动类型选择“消息”也不显示“逐步”每次应用满足一个个性化规则时都提示序号:序号小的会先执行,当然如果序号2的条件中的触发器在序号1之前触发,那么2肯定比1先执行,序号允许重复说明:不多说层:“功能”表示该个性化规则适用于当前Function,“表单”该个性化规则适用于当前表单启用:不选择则不执行这个个性化规则个性化条件Tab页主要定义个性化规则的触发的时间和条件触发器事件:个性化规则触发的时间触发器触发器对象:执行规则的对象,比如BLOCK或者ITEM条件:执行该触发器需要满足的条件,写法:处理模式:“不在“输入-查询”模式下”正常模式和“录入-查询”模式下都触发“仅在“输入-查询”模式下”“两者兼有”上下文:“层”有行业、地点、职责、用户。注意,与一般的概念不同,这几个只要有一个满足条件就会触发该个性化规则。个性化活动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等。赋值条件及写法在消息里面,或是给对象的属性、参数赋值时,都涉及到字符串。字符串的赋值有一些规则:如果输入的字符串前面没有“=”的话,那么输入的字符串就是所赋的值。字符串的长度是有限的。如果输入的字符串是以“=”开始的话,那么后面的字符串在运行时会被作为表达式被计算出结果来,再赋值。例如以下的各种形式:||,TO_CHAR,DECODE,NVL等。(:block.field),including:system,:globaland:parametervalues。调用函数。select语句。写成“=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会被自动调出。保存。打开并发程序界面,查找一个并发程序,点击ToolsExecutable,可以看到可执行定义界面被调出,但是没有数据。关闭并发请求界面,打开可执行界面,再打开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里,设
本文标题:Oracle-EBS-Form个性化
链接地址:https://www.777doc.com/doc-4804578 .html