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);

posted @ 2013-10-08 12:08  SanFrans  阅读(639)  评论(0编辑  收藏  举报