触发器总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、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;