Oracle EBS Form个性化开发
时间:
2017-03-30 00:55:04
阅读:
728
评论:
收藏:
Form个性化开发内容不是很多,在国内的项目上客户化界面上基本用不上,相关开发文档有的讲解的很详细,有的讲解太过简练,希望通过这个文档可以给我们这些刚开始做个性化的新手快速完成需求,不要再这方面花费过多的时间,我们都做过Form开发,可以把Form个性化的开发都用类比Form开发去理解就很快能上手。
Form启动时,所有与当前Function相关的个性化规则都会被加载到内存,当Form触发特定的Event时候,系统会搜索相应的个性化规则并进行匹配,得到匹配的规则,再按照规则序号从小到大一次执行对应的个性化效果。执行完毕后,将该Event会传到Form,执行Form原先定义的处理代码。所以这里注意的是,Form个性化的规则是加在在Form原先定义的程序之前的,如果针对同一个事件,个性化和Form原先定义的程序都处理了,那么个性化的效果就会被Form原先定义的程序所覆盖,看不到个性化效果,这一点需要注意。
1.
基于Form界面的个性化开发
对标准界面简单的个性化开发可以直接在开发界面上进行一些修改,无需修改标准的CUSTOM.pll文件,避免对标准界面产生较大的影响。如果当前看不到帮助菜单的诊断功能的话,在界面上做个性化开发之前需要修改两个配置文件的值,分别是:
公用程序:诊断 是
隐藏诊断菜单项 否
1.1
个性化界面介绍
注意事项:
1. 界面上顶部的有当前的表单名和功能名,如果是基于CUSTOM.pll文件的个性化,通常检测的都是当前的Form名称而不是功能 。
2. 调试模式:关闭,显示调试信息,逐步。
关闭:不使用调试模式,即当Action的类型为Message,Message的Message Type 为“调试“ 的时候,在打开Form界面的时候并不显示“调试”类型的消息。
显示调试信息:允许显示活动(Action)为Message,Message Type为“调试”的消息
逐步:设置为这个模式可以很方便的查看设置的个性化在哪一步起作用了,设置完成个性化之后,每次打开应用界面满足个性化条件的时候都会显示满足那个个性化规则。
3. 对一个界面所加的个性化序号在1到100直接,个性化的执行顺序按照需要的大小的顺序,序号可以是小数。
4. 执行该个性化的条件中的触发器时间,对于Form界面上只能用到五个触发器,并不像在Form Builder 开发工具中使用到很多的触发器,因为个性化效果是在Form代码之前加载的,这五个触发器分别是
WHEN-NEW-FORM-INSTANCE
、
WHEN-NEW-BLOCK-INSTANCE
、
WHEN-NEW-RECORD-INSTANCE
、
WHEN-NEW-ITEM-INSTANCE
、
WHEN-VALIDATE-RECORD
。
还有其它的
SPECIALLn
(总共
45
个,最终的结果是在菜单栏的下拉列表中添加一个菜单项,
SPECIAL1
至
15
是在
Tools
菜单下,
16
至
30
是在
Reports
菜单下,
31
至
45
在
Actions
菜单下,
需要注意的是,一般
Actions
菜单不显示,因为它下面没有菜单项目,没有显示的意义,只有在这个菜单下创建了菜单项才会有显示出这个菜单
)
,MENUn
(
15
个)触发器。
有时候我们在个性化的开发中往往不能选准触发器,触发的时间过早会导致界面上相关字段的取值不能取到,触发的时机过迟会导致达不到效果。我们可以把界面设置成显示自定义状态,然后在界面上试着操作,找到我们对应的触发时机,需要打开个性化代码中的“
显示自定义选项
”的单选框。使用完成后需要关闭。
还需要注意的是,
基于
Form
界面的五个
WHEN
触发器,不一定在所有的界面中都有
,比如说个性化希望加在一些标准界面的查询界面,希望在点击查询按钮的时候对输入的数据经行校验,因为个性化不能加载在按钮上,所以我们想把数据的校验加载在
when-validate-record
上,但是查询界面并没有存储记录,更新记录,验证记录的要求,也不存在这个触发器。
5.
处理模式,也属于一个个性化执行条件,主要是指定个性化是否需要在查询状态下使用,或者仅在查询状态下使用。
6.
层,行业,地点,职责,用户,表示限制个性化的产生效果的范围,但是这里的效果并不像配置文件中的用户层设置覆盖职责层,职责层覆盖地点层,层级之间是相互覆盖和重写的的关系。
而是或的关系,一条个性化规则只要符合其中一条层级限制,这个个性化规则就会产生作用
。
7.
界面下端的两个按钮。“插入‘获取’表达式”,“插入项目值”是两个不错的按钮,通过这个按钮可以快速和准确的取得界面上对象的值。
插入‘获取’表达式
按钮
${item.view_line_info_stub.ok_button.prompt_text}
ITEM
:对象类型
,有块(
Block
),窗口
Windows
view_line_info_stub.ok_button
目标对象(数据块
.
数据项)
value
:
Property Name
属性名称。
value
为值
,
Prompt_text
为提示文本,还有高度,宽度,位置
这种方法可以替换在
Form
中使用的内置方法
GET_ITEM_PROPERTY,GET_BLOCK_PROPERTY
等
常见的类型:
窗口:
${window.}
块:
${block.}
标签页:
${tab.}
画布:
${canvas.}
单选按钮:
${radio.}
视图
:
${view.}
全局变量:
${global.}
参数:
${parameter.}
值列表:
${lov.}
局部变量:
${var.}
配置文件
:${ps.}
消息:
${ms.}
插入项目值按钮
只获取
item
对象的值,得到的表达式是常见的
:数据库
.
数据项
形式。例如
:OPERATING_UNITS.OPERATING_UNIT
1.
验证按钮:判断条件框中的条件是否成立。
2.
现在申请按钮:
使设置的个性化规则立即生效,不用在重新打开和关闭
Form
界面,查看个性化规则是否起作用。
第二个界面主要是定义符合条件下执行的动作,总共有四种活动类型,每种类型下又有几种子类型,下面我们给出每一种类型的使用方法。
1.2
案列实现
1.2.1
活动类型是“特性”
这个活动类型,类似于我们在Form开发中按F4键打开对象的属性版,设置对象的属性。这些对象包括数据块,数据项,画布,窗口等,这个动作属性也可以用来定义全局变量,局部变量,参数等。
这里的局部变量:与
全局变量的使用类似,但是只能在当前
form
使用,最大长度是
4000 bytes
,全局变量只有
255 bytes
,不能在
Form
的相互调用中使用。
选择这个动作类型的时候,会出现一个
按文本选择的按钮,通过Form界面上的提示文本快速选择对象
,这个按钮很有用,可以帮我们准确的找到对应的对象。
比如说我如果要修改一个ITEM的LOV的记录组,因为LOV,记录组的命名和字段不是一一对应的,我们仅仅通过帮助里面的诊断查看项不能准确的找到对应的 LOV名称,通过这个查询框,我们可以清楚地看到,那个对象对应那种类型的属性,从而获得属性名称。
案例1:修改定义并发程序的标准界面窗口的标题名:连接当前OU名称
触发器事件
WHEN-NEW-FORM-INSTANCE
类型
特性
对象类型
窗口
目标对象
CONC_PROG
特性名称
Title
值
=‘并发程序‘||(select t.name from hr_operating_units t where t.organization_id =${ps.org_id.value})
赋值语句:${ps.org_id.value} 取的是当前配置文件中的默认业务实体的值,通过“插入‘获取’表达式按钮”获得
这里需要注意的是给对象的属性赋值的时候 “=”号的使用
不以“=”开头的值,在加载个性化的时候直接赋值给对象的属性
以“=”开头的值,可以在个性化加载的时候动态的执行内部的查询语句,替换绑定变量,全局变量等。常见的有
SQL
运算子:
||
,
TO_CHAR
,
DECODE
,和
NVL
绑定变量值:(
:Block.Field
),
:System,:Globle,:Parameter
Select
语句,但必须遵循以下条件:
需以
?
=SELECT
?
开头。
查询值结果必须为字符型的,且长度不超过
2000
个字节。
所查询的栏位的别名需给
“
A
”
(11.9
以后的版本没有此限制
)
。
语句段的查询结果集不超过一行,若超过一行,只有第一行被使用。
案例2:打开接收事务处理界面,根据选择的库存组织设置界面上的业务实体字段的默认值为该库存组织对应的业务实体
根据平时Form开发的过程中使用到选择库存组织的案例可以知道,选择的库存组织ID是存储在Form的parameter参数里面的,下面的查询语句,可以使用这个参数作为绑定变量,动态的获取业务实体的值。
触发器事件
WHEN-NEW-FORM-I