form 程序开发之附加程序
使用 APP_FIND.FIND( PARAMETER BLOCK_NAME); BLOCK_NAME 为展示的数据块查询结果;
使用 app_find.query_range(TO_CHAR(:QUERY.RCV_DATE_S,'YYYYMMDD'),TO_CHAR(:QUERY.RCV_DATE_E,'YYYYMMDD'),'RESULT.RCV_DATE');
将使程序中从一个数据块参数传入数据到另一个数据块
---- 在 开 发 应 用 中, 经 常 用 到List_Item 控 件, 此 控 件 是 列 表 框, 可 以 让 用 户 在 多 个 备 选 值 中 进 行 选 择。 列 表 框 的 加 载 有 两 种 方 式。 一 种 是 固 定 的, 另 一 种 是 动 态 的。
---- 1 . 固 定 式。 即 列 表 框 中 的 数 据 是 固 定 的。 这 种 方 式 比 较 简 单, 无 需 编 程 既 可 实 现。 假 设 有 一 个List_Item 控 件, 且 命 名 为List1, 如 图1 所 示。 在List1 的 属 性List elements 中 填 加 要 选 择 的 数 据 项, 即 可 达 到 目 的。 当 开 发 人 员 对 数 据 库 较 熟 悉 或 数 据 库 表 中 的 数 据 项 比 较 固 定 时, 可 采 用 此 种 方 式。
---- 2 . 动 态 式。 即 列 表 框 中 的 值 会 随 着 数 据 库 表 中 数 据 项 的 变 化 而 变 化。 此 种 方 式 的 通 用 性 较 强, 可 以 满 足 用 户 的 需 要。 在 实 际 应 用 中, 较 常 用 的 是 此 种 通 用 性 的 方 式。 本 文 将 举 一 个 实 例, 来 说 明 此 种 方 法 的 实 现。
---- 假 设 有 一 个 产 品 销 售 数 据 表SALES, 并 含 有 时 间(Time), 产 品 名 称(Name), 销 售 量(Amount) 三 个 字 段, 如 表1 所 示。
时 间 产 品 名 称 销 售 量
1997 彩 电 100
1998 彩 电 120
1997 冰 箱 90
1998 冰 箱 80
1997 空 调 110
1998 空 调 130
表1
---- 为 了 分 析 需 要, 现 要 求 用 列 表 框 把 所 有 产 品 的 名 称 显 示 出 来。 我 们 建 立 一 个 过 程pl, 并 用 游 标 来 实 现 此 功 能。 过 程pl 的 程 序 代 码 如 下:
PROCEDURE pl IS
cursor c1 is
select name from sales;
cnt number;
i number;
tname sales.name%type;
BEGIN
clear_list('list1');
open c1;
select count(distinct name) into cnt from sales;
for i in 1..cnt loop
fetch c1 into tname;
add_list_element('list1',i,tname,tname);
end loop;
delete_list_element('list1',cnt+1);
close c1;
END;
---- 在Forms 中 设 置WHEN_NEW_FORM_INSTANCE 触 发 器 并 调 用 此 过 程, 即 完 成 了 此 工 作。 其 结 果 显 示 如 图2 所 示。
SET_ITEM_INSTANCE_PROPERTY('PRGCLASS.PROGRAM_COLOR_ITEM', CURRENT_RECORD, VISUAL_ATTRIBUTE ,'TEXT_BG_MTO');
set_item_property 如果数据块只有一行,用这个
SET_ITEM_INSTANCE_PROPERTY 设置多行数据块某一行的属性
set_item_instance_property('Query.LOC',
CURRENT_RECORD,
UPDATE_ALLOWED,
PROPERTY_OFF);
SET_ITEM_INSTANCE_PROPERTY('PRGCLASS.PROGRAM_COLOR_ITEM', CURRENT_RECORD, VISUAL_ATTRIBUTE ,'TEXT_BG_MTO');
set_item_property 如果数据块只有一行,用这个
SET_ITEM_INSTANCE_PROPERTY 设置多行数据块某一行的属性
常用ORACLE EBS FORM 二次开发常用总结
1.锁住当前行 Set_Item_Instance_Property('main.import_flag', CURRENT_RECORD, UPDATE_ALLOWED, PROPERTY_OFF);
用在WHEN-NEW-RECORD-INSTANCE 或者POST-QUERY中。
同:app_item_property.set_property('MAIN.REF_COST',ALTERABLE,PROPERTY_ON)
2.设置记录的颜色 app_record.highlight('RED_REC');
3.窗口居中 app_window.set_window_position('WINDOW_NAME','CENTER');
4.最大化窗口时自动扩展文件夹数据块
在WHEN-WINDOW-RESIZED中添加以下代码即可。
if :system.event_window in ('MAIN') then
app_folder.event('WHEN-WINDOW-RESIZED');
end if;
5.Form中调用forms基本参数方式
FND_FUNCTION.EXECUTE(FUNCTION_NAME=>'CUXSOSETUP', OPEN_FLAG=>'Y', SESSION_FLAG=>'Y', OTHER_PARAMS=>NULL);
其它参数传入OTHER_PARAMS即可。
6.动态设置当前行指定列的必输属性 Set_Item_Instance_Property(item_name, CURRENT_RECORD, REQUIRED,PROPERTY_TRUE);
如: if :CUX_WORKHOUR_EMP.ATTRIBUTE2 <> :CUX_WORKHOUR_EMP.ATTRIBUTE1
then Set_Item_Instance_Property('CUX_WORKHOUR_EMP.MODIFY_REASON', CURRENT_RECORD, REQUIRED,PROPERTY_TRUE);
if :CUX_WORKHOUR_EMP.MODIFY_REASON is null
then :CUX_WORKHOUR_EMP.MODIFY_REASON := '123';
:CUX_WORKHOUR_EMP.MODIFY_REASON := null
fnd_message.set_string ('请输入调整原因.');
fnd_message.show;
end if;
else if :CUX_WORKHOUR_EMP.ATTRIBUTE4 = :CUX_WORKHOUR_EMP.ATTRIBUTE3
then Set_Item_Instance_Property('CUX_WORKHOUR_EMP.MODIFY_REASON', CURRENT_RECORD, REQUIRED,PROPERTY_FALSE);
end if;
end if;
7.增加菜单
在 FORM级的when-new-form-instance APP_SPECIAL.INSTANTIATE('SPECIAL1','取消需求行', '', TRUE, 'LINE');
8.LOV指定初始值后需在WHEN-NEW-RRECORD-INSTANCE用以下语句模拟验证, 否则会弹出验证框.
代码如下: app_item_property.set_property('DETAIL_D.DEMAND_STATUS_DESC', ITEM_IS_VALID,property_on);