说明
Form调用Form是我们经常回遇到的问题。可以使用Form提供的API来实现。在Form的API中提供了如下几个api实现form调用。
|-call_form
|-new_form
|-open_form
call_form打开一个新的form。不过保持父form的状态。形式如下:
CALL_FORM(formmodule_name VARCHAR2,display NUMBER, query_mode NUMBER, paramlist_name VARCHAR2);
参数说明:
ormmodule_name:form的名字。
display:调用之前是否隐藏
query_mode:是否允许用户在新的form上进行增删改查的操作。
parameterList_name:form的参数。Parameterlist对象。
new_form直接替换掉应用程序中的当前的form。
NEW_FORM(formmodule_name CHAR,rollback_mode NUMBER,query_mode NUMBER,parameterList_name CHAR);
其中formmodule_name是必须的参数。其他参数可选。
formmodule_name:指具体的form名字,有路径时需要加上。
rollback_mode:表示form在没有提交后是否回滚。包含三个可选值:TO_SAVEPOINT、NO_ROLLBACK、FULL_ROLLBACK。
query_mode:是否允许用户在新的form上进行增删改查的操作。
parameterList_name:form的参数。Parameterlist对象。
new_form还有其他的重载形式。不过参数的含义均相同!
open_form同时打开多个form在同一个应用中。形式如下:
OPEN_FORM(formmodule_name VARCHAR2,activate_mode NUMBER,session_mode NUMBER, paramlist_id PARAMLIST);
参数说明:
formmodule_name与paramlist_id和上面两个procedure一样。
activate_mode:设置焦点,使窗口激活。
session_mode:是否和父form分享session。
三个的区别在于call_form打开一个form,但是父form还在存在,new_form是新开一个form,原来的form就不存在了,open_form则是父form和子form一同存在应用中。
举例
declare
pl_id paramlist;
begin
pl_id := Get_Parameter_List('plReport');
IF NOT Id_Null(pl_id) THEN
Destroy_Parameter_List( pl_id );
END IF;
pl_id := Create_Parameter_List('plReport');
Add_Parameter(pl_id,'P_ORGANIZATION_ID',TEXT_PARAMETER,:PARAMETER.P_ORGANIZATION_ID);
Add_Parameter(pl_id,'P_STOCK',TEXT_PARAMETER,:PARAMETER.P_STOCK);
Add_parameter(pl_id,'P_REPORT_SERVER',text_parameter,v_server);
IF :GTINVCP.RAD_GRP = 1 THEN
call_form (:PARAMETER.P_PROG_PATH||'FORM//GTOEFHQK1_HL.fmx', HIDE, DO_REPLACE,NO_QUERY_ONLY,pl_id);
ELSIF :GTINVCP.RAD_GRP = 2 THEN
call_form (:PARAMETER.P_PROG_PATH||'FORM//GTOEFHQK2_HL.fmx', HIDE, DO_REPLACE,NO_QUERY_ONLY,pl_id);
END IF;
exception
when others then
null;
end;
说明:
申明部分:
pl_id paramlist; 申明一个paramlist类型的对象,用于传递参数。
创建参数
pl_id := Get_Parameter_List('plReport');
IF NOT Id_Null(pl_id) THEN
Destroy_Parameter_List( pl_id );
END IF;
pl_id := Create_Parameter_List('plReport');
创建在各paramlist对象。
赋值
Add_Parameter(pl_id,'P_ORGANIZATION_ID',TEXT_PARAMETER,:PARAMETER.P_ORGANIZATION_ID);
Add_Parameter(pl_id,'P_STOCK',TEXT_PARAMETER,:PARAMETER.P_STOCK);
Add_parameter(pl_id,'P_REPORT_SERVER',text_parameter,v_server);
将form需要的参数添加到paramlist对象中
调用
IF :GTINVCP.RAD_GRP = 1 THEN
call_form (:PARAMETER.P_PROG_PATH||'FORM//GTOEFHQK1_HL.fmx', HIDE, DO_REPLACE,NO_QUERY_ONLY,pl_id);
ELSIF :GTINVCP.RAD_GRP = 2 THEN
call_form (:PARAMETER.P_PROG_PATH||'FORM//GTOEFHQK2_HL.fmx', HIDE, DO_REPLACE,NO_QUERY_ONLY,pl_id);
END IF;
这里使用call_form调用,当子form退出的时候,返回到父form。