Tab Canvas与Stacked Canvas在数据上没有任何联系,它们都要放在一个content Canvas上面,只是遮挡与被遮挡的关系.
需要分别调整各个Stacked Canvas与Tab Canvas的位置关系,通过菜单Views->stacked views来调整与隐藏已调整好的.
响应Tab Canvas点击事件的代码需要放在FORM级WHEN-TAB-PAGE-CHANGED的trigger中.
下了俩个前人写的例子,以备自己以后参考:
例子一:
WHEN-TAB-PAGE-CHANGED事件中:
IF :system.tab_previous_page = 'MAIN_PAGE' THEN
validate(block_scope);
IF :system.MODE = 'ENTER-QUERY' OR NOT form_success THEN
--Message here
set_canvas_property('INVOICE_LINE_TAB',topmost_tab_page,:system.tab_previous_page);
RETURN;
END IF;
ELSIF :system.tab_previous_page = 'SALES_ORDER_PAGE' THEN
validate(block_scope);
IF :system.MODE = 'ENTER-QUERY' OR NOT form_success THEN
--Message here
set_canvas_property('INVOICE_LINE_TAB',topmost_tab_page,:system.tab_previous_page);
RETURN;
END IF;
--
ELSIF :system.tab_previous_page = 'MORE_PAGE' THEN
validate(block_scope);
IF :system.MODE = 'ENTER-QUERY' OR NOT form_success THEN
--Message here
set_canvas_property('INVOICE_LINE_TAB',topmost_tab_page,:system.tab_previous_page);
RETURN;
END IF;
--
END IF;
IF :system.tab_new_page = 'MAIN_PAGE' THEN
show_view('INVOICE_LINE_FIX_STACKED');
show_view('INVOICE_LINE_MAIN_STACKED');
show_view('LINE_SCROLLBAR_STACKED');
hide_view('INVOICE_LINE_ORDER_STACKED');
hide_view('INVOICE_LINE_MORE_STACKED');
go_item('AR_INV_LINES.L_UOM_CODE');
ELSIF :system.tab_new_page = 'SALES_ORDER_PAGE' THEN
show_view('INVOICE_LINE_FIX_STACKED');
show_view('INVOICE_LINE_ORDER_STACKED');
show_view('LINE_SCROLLBAR_STACKED');
hide_view('INVOICE_LINE_MAIN_STACKED');
hide_view('INVOICE_LINE_MORE_STACKED');
go_item('AR_INV_LINES.L_SALES_ORDER');
--
ELSIF :system.tab_new_page = 'MORE_PAGE' THEN
show_view('INVOICE_LINE_MORE_STACKED');
hide_view('INVOICE_LINE_MAIN_STACKED');
hide_view('INVOICE_LINE_FIX_STACKED');
hide_view('LINE_SCROLLBAR_STACKED');
hide_view('INVOICE_LINE_ORDER_STACKED');
go_item('AR_INV_LINES.L_INTERFACE_LINE_CONTEXT');
--
END IF;
例子二:
WHEN-TAB-PAGE-CHANGED事件中:
control.Tab_Controler('WHEN-TAB-PAGE-CHANGED');
Program Units中:
PACKAGE BODY CONTROL IS
PROCEDURE TAB_CONTROLER(EVENT VARCHAR2) IS
CURR_CANVAS_NAME VARCHAR2(30) := GET_ITEM_PROPERTY(:SYSTEM.CURSOR_ITEM, ITEM_CANVAS);
CURRENT_TAB VARCHAR2(30);
TARGET_CANVAS_NAME VARCHAR2(30) := :SYSTEM.TAB_NEW_PAGE;
BEGIN
IF (EVENT = 'WHEN-TAB-PAGE-CHANGED')
THEN
IF (TARGET_CANVAS_NAME = 'PAGE1') THEN
validate(record_scope);
IF NOT FORM_SUCCESS THEN
set_canvas_property('CANVAS_TAB',topmost_tab_page,:system.tab_previous_page); --:system.tab_previous_page
return;
END IF;
GO_ITEM('TRUCK_BASIC_LINE.STATION_START');
SHOW_VIEW('CAN_LINE1');
HIDE_VIEW('CAN_LINE2');
set_block_property('TRUCK_BASIC_LINE',insert_allowed,Property_True);
set_block_property('TRUCK_BASIC_LINE',update_allowed,Property_True);
set_block_property('TRUCK_BASIC_LINE',delete_allowed,Property_True);
ELSIF TARGET_CANVAS_NAME = 'PAGE2' THEN
validate(record_scope);
IF NOT FORM_SUCCESS THEN
set_canvas_property('CANVAS_TAB',topmost_tab_page,:system.tab_previous_page); --:system.tab_previous_page
return;
END IF;
GO_ITEM('TRUCK_BASIC_LINE.CREATION_DATE');
SHOW_VIEW('CAN_LINE2');
HIDE_VIEW('CAN_LINE1');
set_block_property('TRUCK_BASIC_LINE',insert_allowed,Property_False);
set_block_property('TRUCK_BASIC_LINE',update_allowed,Property_False);
set_block_property('TRUCK_BASIC_LINE',delete_allowed,Property_False);
END IF;
END IF;
END TAB_CONTROLER;
END CONTROL;