EBS常用技术开发技巧总结
Form常用开发小技巧
1:如何设置一个数据块为只显:
set_block_property('PRICE_LINES_NDOOR', insert_allowed, property_off);
set_block_property('PRICE_LINES_NDOOR', update_allowed, property_off);
set_block_property('PRICE_LINES_NDOOR', delete_allowed, property_off);
2:如何设置一个数据块的某一项为只显:
set_item_property('PRICE_LINES_NDOOR.INIT_PRICE',INSERT_ALLOWED, PROPERTY_FALSE); set_item_property('PRICE_LINES_NDOOR.INIT_PRICE',UPDATE_ALLOWED, PROPERTY_FALSE);
3:如何设置一个数据块的某一行的字段为只显:
set_item_instance_property('PRICE_HEADERS.PROJECT_NAME'
,current_record
,insert_allowed
,property_off);
set_item_instance_property('PRICE_HEADERS.PROJECT_NAME'
,current_record
,update_allowed
,property_off);
4:如何查询一个日期范围内的数据:
App_Find.Query_Date_Range(Low_Value => :MAIN_QF.ASKED_DATE_FROM
,High_Value => (:MAIN_QF.ASKED_DATE_TO)
,Db_Fieldname => 'PRICE_HEADERS.ASKED_DATE');
5:如何在from中拼凑一个查询SQL:
app_query.reset('PRICE_HEADERS');
l_sql := '1=1';
l_sql := l_sql || 'AND status_code IN(cux_po_price_pub.get_status_confirm
,cux_po_price_pub.get_status_quoted)';
app_query.append('PRICE_HEADERS', l_sql);
6:如何校验界面有未保存数据
IF :system.form_status = 'CHANGED' THEN
fnd_message.set_string('先保存数据');
fnd_message.error;
RAISE form_trigger_failure;
ELSE
// 这里是你要进行的操作
END IF;
7:如何设置询问弹窗功能
fnd_message.set_string('是否确认价表取价?');
IF fnd_message.question('确定', '取消', '', 1,2) = 1 THEN
IF NOT app_form.quietcommit THEN
RAISE form_trigger_failure;
END IF;
//这里是你要进行的操作
ELSE
RAISE form_trigger_failure;
END IF;
需要进行删除数据时进行提示,并删除界面数据,不影响后台数据库数据
在触发器KEY-DELREC中添加如下代码
fnd_message.set_string('是否确认删除?');
IF fnd_message.question('确定', '取消', '', 1,2) = 1 THEN
IF NOT app_form.quietcommit THEN
RAISE form_trigger_failure;
END IF;
-- execute_trigger('ON-DELETE');
-- form_pub.Refresh_Ui('OA_INFO');
delete_record;
ELSE
RAISE form_trigger_failure;
END IF;
8:如何在重新查询的时候把之前的查询条件都保留下来(标准代码,参数是你要查询的那个数据块名)
PROCEDURE Refresh_Ui(P_Block_Name IN VARCHAR2) IS
L_Cursor_Block VARCHAR2(50);
L_Cursor_Record NUMBER;
L_Cursor_Item VARCHAR2(50);
L_Trigger_Record NUMBER;
L_Default_Where VARCHAR2(4000);
L_Last_Query VARCHAR2(4000);
L_Where_Anchor NUMBER;
L_Order_Anchor NUMBER;
L_Where_Clause VARCHAR2(4000);
L_Message_Level NUMBER;
BEGIN
L_Cursor_Item := Name_In('system.cursor_item');
L_Cursor_Record := Name_In('system.cursor_record');
L_Cursor_Block := Name_In('system.cursor_block');
L_Trigger_Record := L_Cursor_Record;
L_Message_Level := :System.Message_Level;
IF L_Cursor_Block <> P_Block_Name THEN
L_Trigger_Record := Get_Block_Property(P_Block_Name, Current_Record);
Go_Block(P_Block_Name);
IF Name_In('system.cursor_block') <> P_Block_Name THEN
Fnd_Message.Debug('developer error :TO SELECT records in another BLOCK ,you must be able TO navigate.');
RAISE Form_Trigger_Failure;
END IF;
END IF;
L_Default_Where := Get_Block_Property(P_Block_Name, Default_Where);
L_Last_Query := Get_Block_Property(P_Block_Name, Last_Query);
--order by
IF Instr(Upper(L_Last_Query), 'ORDER BY') = 0 THEN
L_Order_Anchor := Length(L_Last_Query);
ELSE
L_Order_Anchor := Instr(Upper(L_Last_Query), 'ORDER BY') - 1;
END IF;
IF Instr(Upper(L_Last_Query), 'WHERE') = 0 THEN
L_Where_Anchor := L_Order_Anchor - 5;
ELSE
L_Where_Anchor := Instr(Upper(L_Last_Query), 'WHERE') - 1;
END IF;
L_Where_Clause := Substr(L_Last_Query
,L_Where_Anchor + 6
,L_Order_Anchor - L_Where_Anchor - 5);
Set_Block_Property(P_Block_Name, Default_Where, L_Where_Clause);
:System.Message_Level := 25;
Execute_Query;
:System.Message_Level := L_Message_Level;
Set_Block_Property(P_Block_Name, Default_Where, L_Default_Where);
Go_Block(P_Block_Name);
Go_Record(L_Trigger_Record);
Go_Block(L_Cursor_Block);
Go_Record(L_Cursor_Record);
Go_Item(L_Cursor_Item);
END; --//Refresh_Ui
9:如何判断调用包的返回结果并给出相应的提示
IF l_return_status <> 'S' THEN
fnd_message.set_string(l_msg_data);
fnd_message.error;
RAISE form_trigger_failure;
ELSE
IF NOT app_form.quietcommit THEN
RAISE form_trigger_failure;
END IF;
fnd_message.set_string('已提交成功');
fnd_message.show;
END IF;
10:如何在一打开form就给其中的参数赋值,
在pre-form触发器中添加赋值语句
:parameter.p_role_type := fnd_profile.value('CUX_PO_PRICE_ROLE_TYPE');
11:如何给窗口显示他所在的责任
在WHEN-NEW-FORM-INSTANCE触发器中添加
set_window_property('MAIN'
,title
,'询价单(' || fnd_profile.value('RESP_NAME') || ')');
12:如何定义Folder的数据块语法:
在WHEN-NEW-FORM-INSTANCE触发器中添加
app_folder.define_folder_block('PRICE_LINES_NDDOR'
,'PRICE_LINES_NDOOR'
,'PRICE_LINES_NDOOR_PROMPT'
,'PRICE_LINES_