KEY-CLRBLK
app_folder.event('KEY-CLRBLK');
2.7 ITEM调整
1.Header Item
增加需要的非数据库项。
ROW_ID项的子类选择ROW_ID。所有显示的项都需要设置对应的子类,以保持与EBS一致的风格。
对各项的细节,如是否可更新、项导航顺序、数据有效性、初始值、数字格式和提示文字等,做出调整。
2.Line Item
增加需要的非数据库项。
ROW_ID项的子类选择ROW_ID。所有显示的项都需要设置对应的子类,以保持与EBS一致的风格。
删除所有folder显示项的提示文字。对各项的细节,如是否可更新、项导航顺序、数据有效性、初始值和数字格式等,做出调整。 增加以下两个项:
名称
FOLDER_SWITCHER 子类
SWITCHER
CURRENT_RECORD_INDICATOR CURRENT_RECORD_INDICATO
R
画布
FOLDER的堆叠画布 MAIN
并且分别在它们的项级触发器WHEN-NEW-ITEM-INSTANCE中添加以下代码: app_folder_move_cursor('1');
3.提示块Item
从LINE块复制全部使用folder的项至提示块,子类全都选择
FOLDER_PROMPT_MULTIROW,初始值分别设置为相应的列标题。注意项序保持与LINE块一致。
EBS Form开发总结
增加以下六个项:
名称 ORDER_BY1 ORDER_BY2 ORDER_BY3
FOLDER_DUMMY FOLDER_TITLE FOLDER_OPEN
4.CONTROL块Item
子类 FOLDER_ORDERBY FOLDER_ORDERBY FOLDER_ORDERBY FOLDER_DUMMY DYNAMIC_TITLE FOLDER_OPEN 画布 FOLDER的堆叠画布 FOLDER的堆叠画布 FOLDER的堆叠画布 TOOLBAR MAIN MAIN
按照需求添加相应的控制组件,多为按钮。
按钮的子类:BUTTON。
按钮的标签:显示文本(&快捷键字母),如清除(&C)。
注意:导航到一个数据块上时,如果块上一个可导航的项都没有,将出现画面死机的BUG。
2.8 界面调整
以下仅考虑Header项皆位于Line项上方、Control项皆位于Line项下方、带folder的情况。
1.Folder堆叠画布
在画布属性中设置显示水平滚动条。
参考下面表格做出调整。
名称
提示项和ORDER_BY项 Line块的内容项 高度 宽度
视图端口高度 视图端口宽度 视图端口的X轴位置 视图端口的Y轴位置
坐标/数值 (0,0) (0,0.25)
0.25*(Line块显示的记录数+1)
窗口宽度-固定列区域宽度(无固定列时为0)-0.5
0.25*(Line块显示的记录数+1)
窗口宽度-固定列区域宽度(无固定列时为0)-0.5
0.25+固定列区域宽度
按实际情况设置(一般保持与Header区域相差0.25)
EBS Form开发总结
注意点:
1. 提示项与内容项的宽度保持一致。
2. 内容项最好与提示项在Y轴方向上紧贴,如果离得过远(大于0.1),在多行记录滚动时会出现内容项移位的bug。
2.MAIN画布
对Header项的位置做适当调整,确定Header区域坐标及高宽。 参考以下表格做出调整。
名称
画布高度 画布宽度
FOLDER_OPEN
坐标/数值 窗口高度 窗口宽度
(0.25,Header区域Y坐标+Header区域高度)
FOLDER_TITLE (0.5, Header区域Y坐标+Header区域
高度+0.05)
CURRENT_RECORD_INDICATOR (0.15, Header区域Y坐标+Header区
域高度+0.5)
Line块滚动条 (窗口宽度-0.25,Header区域Y坐标
+Header区域高度+0.5)
Control项置于Line区域与窗口下边界之间,做适当调整。
2.9 实现增删改锁
基于视图的form的增删改锁操作需要我们添加代码完成。
以下程序包代码可以通过汉得的公共程序包HAND_PLSQL_AUTOCREATE自动生成。
注意点:HAND_PLSQL_AUTOCREATE切忌小写。
首先创建以下两个程序包规格:
名称
内容
PACKAGE Header_BlockName_private IS
PROCEDURE insert_row; PROCEDURE lock_row; PROCEDURE update_row; PROCEDURE delete_row;
END Header_BlockName_private;
PACKAGE Line_BlockName_private IS
Header_BlockName_private
Line_BlockName_private
EBS Form开发总结
PROCEDURE insert_row; PROCEDURE lock_row; PROCEDURE update_row; PROCEDURE delete_row;
END Line_BlockName_private;
再创建对应的程序包主体,Header与Line相似,以下仅列出Header_BlockName_private主体代码:
PACKAGE BODY header_blockname_private IS
/*===================================== ** PROCEDURE: insert_row()
**=====================================*/ PROCEDURE insert_row IS
CURSOR row_id IS SELECT ROWID
FROM header_table_all
WHERE header_table_primary_key = :header_blockname.header_table_primary_key;
BEGIN
fnd_standard.set_who;
IF :header_blockname.header_table_primary_key IS NULL THEN SELECT header_table_all_s.nextval
INTO :header_blockname.header_table_primary_key FROM sys.dual; END IF;
INSERT INTO header_table_all (creation_date, created_by,
last_updated_by, last_update_date, last_update_login,
header_table_primary_key, header_table_col1, header_table_col2, header_table_col3, attribute_category, attribute1, attribute2, attribute3, attribute4, attribute5, attribute6, attribute7, attribute8, attribute9, attribute10, attribute11, attribute12, attribute13, attribute14, attribute15) VALUES
(:header_blockname.creation_date, :header_blockname.created_by,
:header_blockname.last_updated_by, :header_blockname.last_update_date, :header_blockname.last_update_login,
:header_blockname.header_table_primary_key, :header_blockname.header_table_col1, :header_blockname.header_table_col2, :header_blockname.header_table_col3, :header_blockname.attribute_category, :header_blockname.attribute1,
EBS Form开发总结
:header_blockname.attribute2, :header_blockname.attribute3, :header_blockname.attribute4, :header_blockname.attribute5, :header_blockname.attribute6, :header_blockname.attribute7, :header_blockname.attribute8, :header_blockname.attribute9, :header_blockname.attribute10, :header_blockname.attribute11, :header_blockname.attribute12, :header_blockname.attribute13, :header_blockname.attribute14, :header_blockname.attribute15);
OPEN row_id; FETCH row_id
INTO :header_blockname.row_id; IF (row_id%NOTFOUND) THEN CLOSE row_id;
RAISE no_data_found; END IF;
CLOSE row_id;
END insert_row;
/*===================================== ** PROCEDURE: lock_row()
**=====================================*/ PROCEDURE lock_row IS
CURSOR c_row IS SELECT *
FROM header_table_all
WHERE ROWID = :header_blockname.row_id
FOR UPDATE OF header_table_primary_key NOWAIT;
rec c_row%ROWTYPE; i NUMBER := 0; BEGIN
LOOP BEGIN
i := i + 1; OPEN c_row; FETCH c_row INTO rec;
IF (c_row%NOTFOUND) THEN CLOSE c_row;
fnd_message.set_name('FND', 'FORM_RECORD_DELETED'); fnd_message.error;
RAISE form_trigger_failure; END IF;
CLOSE c_row;
IF (((rec.creation_date = :header_blockname.creation_date) OR ((rec.creation_date IS NULL) AND
(:header_blockname.creation_date IS NULL))) AND
((rec.created_by = :header_blockname.created_by) OR ((rec.created_by IS NULL) AND
(:header_blockname.created_by IS NULL))) AND
((rec.last_updated_by = :header_blockname.last_updated_by) OR ((rec.last_updated_by IS NULL) AND
(:header_blockname.last_updated_by IS NULL))) AND
((rec.last_update_date = :header_blockname.last_update_date) OR ((rec.last_update_date IS NULL) AND
(:header_blockname.last_update_date IS NULL))) AND
((rec.last_update_login = :header_blockname.last_update_login) OR ((rec.last_update_login IS NULL) AND
(:header_blockname.last_update_login IS NULL))) AND (rec.header_table_primary_key =
EBS Form开发总结