当前位置:文档之家› 触发器总结

触发器总结

一、form级别
1、WHEN-NEW-FORM-INSTANCE
当新form的时候
a、go_block('BLOCK_QUERY');
b、app_window.set_window_position('QUERY','CENTER','POHEADERSALL');
c、search;(主form传过来的PO_ID参数,打开这个form时,有缺省的where语
句,然后执行查询,最后go_block到这个form中的数据块上)。

具体:
写程序单元,在这个触发器中调用这个程序单元:SEARCH;
PROCEDURE search IS
ls_where varchar2(2000) :='1=1';
BEGIN
ls_where :=ls_where || ' and po_id='|| :parameter.PO_ID;
set_block_property('HYP_PO_HEADERS_ALL_V',default_where,ls_where);
go_block('HYP_PO_HEADERS_ALL_V');
execute_Query;
END;
2、QUERY-FIND
查询时,点击小手电筒时
go_block('BLOCK_QUERY');
3、CLOSE-WINDOW
关闭窗口时
exit_form;
null;
二、数据块级别
1、CLOSE-WINDOW
a、go_block('HYP_PO_HEADERS_ALL_V');
一个form中有两个数据块,一个查询,一个显示查询结果,当关掉这个数据块时,go到显示结果的数据块。

2、PRE-INSERT
a、:HYP_PO_HEADERS_ALL_V.PO_NUMBER :=cux_po_pkg.get_po_number(trunc
(sysdate));
预插入:调用cux_po_pkg包中的get_po_number函数,传入当前系统时间,trunc 取消时分秒,赋值给某个项。

b、:HYP_RECEIPT_LNIES_ALL_V.AMOUNT :=cux_po_pkg.get_quantity(:HYP_RE
CEIPT_LNIES_ALL_V.PO_LINE_ID);
得到剩余数量:订单数量—到货数量
function get_quantity(p_po_line_id number) return number is
lv_po_amount number;
lv_rec_amount number;
lv_amount number;
begin
begin
select line.quantity into lv_po_amount from hyp_po_lines_all line where line.po_line_id=p_po_line_id;
exception
when others then
lv_po_amount := 0;
end ;
begin
select sum(quantity) into lv_rec_amount from
hyp_receipt_lnies_all line where line.po_line_id=p_po_line_id;
exception
when others then
lv_rec_amount := 0;
end;
lv_amount := lv_po_amount-lv_rec_amount;
return nvl(lv_amount,0);
end;
3、WHEN-NEW-RECORD-INSTANCE
if :HYP_PO_HEADERS_ALL_V.PO_STA TUS <>'N' then
set_block_property('HYP_PO_HEADERS_ALL_V',DELETE_ALLOWED,PROP ERTY_FALSE);
set_block_property('HYP_PO_HEADERS_ALL_V',UPDA TE_ALLOWED,PROP ERTY_FALSE);
else
set_block_property('HYP_PO_HEADERS_ALL_V',DELETE_ALLOWED,PROP ERTY_TRUE);
set_block_property('HYP_PO_HEADERS_ALL_V',UPDA TE_ALLOWED,PROP ERTY_TRUE);
end if;
当某个项不为N(‘新建’)时,(其他状态为‘更改中’,和‘完成’)不可以改变这个数据块本条记录的其他项,
4、POST-QUERY
:HYP_PO_HEADERS_ALL_V.AMOUNT:=cux_po_pkg.get_po_amount(:HYP_PO_H EADERS_ALL_V.PO_ID);
每个订单的总额,是调用包中的函数
function get_po_amount(p_po_id number) return number is
lv_amount number;
begin
select sum(hv.amount) into lv_amount from hyp_po_lines_all_v hv where hv.po_id=p_po_id;
return lv_amount;
end;
三、项级别的触发器
1、WHEN-BUTTON-PRESSED
a、go_block('HYP_PO_HEADERS_ALL_V');
按某个按钮(取消)时跳转到某个数据块
b、查询,在查询块,按所输入条件查询。

DECLARE
lv_where varchar2(2000) := '1=1';
BEGIN
if :BLOCK_QUERY.PONUMBERSTART is not null then
lv_where := lv_where || 'and po_number>=''' || :BLOCK_QUERY.PONUMBERSTART || '''';
end if;
if :BLOCK_QUERY.PONUMBEREND is not null then
lv_where :=lv_where || 'and po_number<=''' || :BLOCK_QUERY.PONUMBEREND || '''';
end if;
if :BLOCK_QUERY.VENDORCODE is not null then
lv_where :=lv_where || 'and vendor_code=''' || :BLOCK_QUERY.VENDORCODE||'''';
end if;
if :BLOCK_QUERY.PODA TESTART is not null then
lv_where :=lv_where || 'and po_date>=to_date('''|| to_char(:BLOCK_QUERY.PODA TESTART,'yyyymmdd') || ''',''yyyymmdd'')';
end if;
if :BLOCK_QUERY.PODA TEEND is not null then
lv_where :=lv_where || 'and po_date<=to_date('''|| to_char(:BLOCK_QUERY.PODA TEEND,'yyyymmdd') ||''',''yyyymmdd'')';
end if;
set_block_property('HYP_PO_HEADERS_ALL_V',default_where,lv_where);
go_block('HYP_PO_HEADERS_ALL_V');
execute_Query;
END;
c、跳转form(订单表每一条前有个按钮,按钮按下,跳转到订单细节表,并传入
RECEIPT_ID参数)
fnd_function.execute(FUNCTION_NAME=>'HYPRECLINESALLV',
OPEN_FLAG => 'Y',
SESSION_FLAG => 'Y',
OTHER_PARAMS => 'RECEIPT_ID=' || :HYP_RECEIPTS_ALL_V.RECEIPT_ID);
d、
2、KEY-LISTV AL
a、calendar.show;
在日期项的LOV中加入:ENABLE_LIST_LAMP
可以可视化选择日期
3、
四、。

相关主题