- 浏览: 318117 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (169)
- ORACLE EBS FORM开发 (39)
- ORACLE EBS业务 (18)
- ORACLE DB (13)
- ACCOUNTING (0)
- 休闲娱乐 (5)
- 开发自己 (1)
- OAF开发 (15)
- LINUX (2)
- ORACLE EBS文档 (1)
- 疑难杂症 (3)
- WEB ADI (2)
- 报表开发 (2)
- EBS有用SQL (8)
- ORACLE EBS开发 (5)
- ORACLE EBS DBA (15)
- EBS日常维护 (24)
- Oracle EBS workflow (2)
- Oracle EBS 个性化 (2)
- EBS常见接口表应用 (10)
- EBS标准API应用 (3)
- Oracle EBS 数据迁移 (2)
- Oracle EBS杂项技术荟萃 (1)
- EBS之事半功倍 (1)
- ORACLE EBS ALERT (1)
- OCP之路 (4)
最新评论
-
594597634:
楼主没有给解决方案啊
!我急求如何解决啊
亲历:JBO-25058 -
sjmei:
嗯,不错,学习了
PL/SQL NO_DATA_FOUND、SQL%NOTFOUND、SQL%ROWCOUNT -
maojieming:
做公交车,应该是“关门打X”
北京公交车一族必备绝技 -
hollysun:
现在功夫都练得炉火纯青了,独孤九剑~
北京公交车一族必备绝技 -
xyh:
还有一招:锁喉功,掐死你,捏死你
北京公交车一族必备绝技
(一) open_form
open_form是一个受限的封装过程,他可以产生一个新的form但不代替原来的form,在新的form启动后可以不把控制移动到新的form里面,也可以将输入焦点移动到新的form里面,用户可以在两个form之间导航。
open_form的调用格式
open_form(form_name,activate_mode,session_mode,data_mode,paramlist_id)
具体意思:
1) form_name 文件名以及路径。
2) activate_mode选择activate是打开新的form并且把输入焦点移入该form,选择no_activate是不移动焦点,还在原来的form里面
3) session_mode是打开新的form的时候的会话方式,可选session和no_session,session创建新的数据库会话,no_session不产生新的会话,和原来的form享受一个session,这个时候原来form里面的commit,都有效果,该选项为默认值.
4) data_mode表示form 之间是否可以共享数据库(libraty data) 取值 no_share_library_data 不共享(默认) share_library_data 共享
5) paramlist_id是form中唯一的参数,次项可选
(二) call_form
call_form于open_form有较大的区别,call_form是一个非受限过程,启动一个新的form后,焦点立刻被转意到新的form里面,原form失去输入焦点,便的不可操作,只有等到新的form退出后在可以使用原来的form.
call_form调用格式 call_form(form_name,display,switch_nemu,query_mode,data_mode,paramlist_name)
具体意思:
1) display 打开新的form是否隐藏原form hide 隐藏,no_hide不隐藏
2) switch_nemu 打开新的form,是否用新的form的菜单代替原来的form菜单 取值o_replace ,no_replace
3) query_mode shi 表示是否仅以查询方式新的form,no_share_only,不是仅以查询方式打开form(默认),query_only,以查询方式启动form
4) data_mode 表示form之间是否可以共享数据库(library data)(同上)
5) paramlist_name 表示form 之间传递的参数,为可选项
(三) new_form
new_form:启动一个新的form,新的form将完全取代原form,但退出新的form时,输入焦点直接退出到原form的父级form或者其他启动原form的位置,在启动新的form之前,系统首先要从原form中退出,并且释放所占内存空间,然后加载新的form,如果原form数据有变化,则在启动新的form的时候终止原form的用户操作,提示用户提交数据,然后在启动新的form
new_form的调用格式
new_form(form_name,rollback_mode,query_mode,data_mode,paramlist_name)
1) form_name 文件名以及路径
2) rollback_mode 取值to_savepoint,no_rollback,full_rollback
3) query_mode 表示是否仅以查询方式启动新的form
4) data_mode 表示form之间是否可以共享数据库(同上)
5) paramlist_name代表form之间传递的参数,此项为可选项目!
对应的包为: app_form.call(app_shortname VARCHAR2,
form_name VARCHAR2,
query_mode NUMBER DEFAULT NO_QUERY_ONLY,
parameter_list PARAMLIST DEFAULT NULL_PARAMETER_LIST);
app_form.open(app_shortname VARCHAR2,
form_name VARCHAR2,
query_mode NUMBER DEFAULT NO_QUERY_ONLY,
parameter_list PARAMLIST DEFAULT NULL_PARAMETER_LIST,
session_mode NUMBER DEFAULT SESSION);
方法1
PROCEDURE shot_plan_new IS
fm_id FormModule;
BEGIN
fm_id := Find_Form('TVSNPMPSCRNMT');
if id_null(fm_id) then
app_form.open('TVSN','TVSNPMPSCRNMT');
--Application Name --Function Name
else
go_form('TVSNPMPSCRNMT');
end if;
END;
实现思路:首先检测是否已经打开了目标Form,是的话就是目标Form成为当前窗体,否的话就新打开一个目标Form。假如在目标Form需要随源Form自动查询出数据,须将代码写在when-window-actived trigger中。
注意:go_form会引起源Form的when-window-deactived和目标form的when-window-actived trigger,when-window-actived trigger在form切换时都会被触发,因此目标form如果有弹出日历等调用新窗体的操作时,需要设置是否是第一次触发标识作判断,否则可能达不到设计的效果,在该trigger中不要写FND_MESSAGE.DEBUG等调用新窗体的信息,否则会引起死锁。另外此种go_form方法如需要传递参数的话,只能依靠:global.XXXXX,关闭窗体时需要在close-windows或WHEN-WINDOW-CLOSED事件中清除,否则可能导致不需要的后果。
方法2
declare pl_id ParamList;
fm_id FormModule;
BEGIN
pl_id := Get_Parameter_List('SCRNMTPL');
IF NOT Id_Null(pl_id) THEN
Destroy_Parameter_List( pl_id );
END IF;
pl_id := Create_Parameter_List('SCRNMTPL');
Add_Parameter(pl_id,'SHOT_DATE',TEXT_PARAMETER,to_char(d_from,'YYYY-MM-DD'));
Add_Parameter(pl_id,'CHANNEL_TYPE_ID', TEXT_PARAMETER,:CONTROL.CHANNEL_TYPE_ID);
Add_Parameter(pl_id,'CHANNEL_TYPE_NAME', TEXT_PARAMETER,:CONTROL.CHANNEL_TYPE_NAME);
fm_id := Find_Form('TVSNPMPSCRNMT');
if id_null(fm_id) then
app_form.open('TVSN','TVSNPMPSCRNMT',NO_QUERY_ONLY,pl_id,NO_SESSION);
else
go_form('TVSNPMPSCRNMT'); --估计只有通过全局变量传参数了
end if;
END ;
以上两种方法都是FORM4.5的方法,方法2相对方法1的区别在于:定义了一个参数列表对象,可以添加参数后作为app_form.open的一个传入参数,打开一个新的Form。实际的效果是目标Form中与参数列表中的同名参数会被赋予传入的值,随后被其他程序引用。
方法3
自Oracle Form. 6之后,Oracle建议用发fnd_function.execute和app_navigate.execute来实现form间的相互调用,无论是从语法上还是在性能上,新方法都有所改善。
ORACLE推荐用FND_FUNCTION.EXECUTE取代OPEN_FORM、CALL_FORM
procedure FND_FUNCTION.EXECUTE
(function_name IN varchar2,
open_flag IN varchar2 default ’Y’,
session_flag IN varchar2 default ’SESSION’,
other_params IN varchar2 default NULL,
activate IN varchar2 default ’ACTIVATE’,
browser_target IN varchar2 default NULL);
Example
FND_FUNCTION.EXECUTE(FUNCTION_NAME=>’DEM_DEMXXEOR’,
OPEN_FLAG=>’Y’, SESSION_FLAG=>’Y’,
OTHER_PARAMS=>
’ORDER_ID=”’||param_to_pass1||
’” CUSTOMER_NAME=”’||param_to_pass2||’”’);
APP_NAVIGATE.EXECUTE(function_name =>'TVSN_ TVSNPMPSCRNMT',
open_flag => 'Y',
session_flag => 'Y',
other_params =>
'SHOT_DATE ="'||to_char(d_from,'YYYY-MM-DD')||
'" CHANNEL_TYPE_ID="'||:CONTROL.CHANNEL_TYPE_ID||
'" CHANNEL_TYPE_NAME="'||:CONTROL.CHANNEL_TYPE_NAME||
'" CALL_FORM="'||'Y'||
'"',
activate_flag => 'ACTIVATE',
pinned =>FALSE);
procedure APP_NAVIGATE.EXECUTE(
function_name in varchar2,
open_flag in varchar2 default ’Y’,
session_flag in varchar2 default ’SESSION’,
other_params in varchar2 default NULL,
activate_flag in varchar2 default ’ACTIVATE’,
pinned in boolean default FALSE);
注意:
1当前用户具有对目标Form的访问权限;
2在目标和源窗体的WHEN–NEW–FORM–INSTANCE和WHEN–FORM–NAVIGATE triggers中需要添加APP_STANDARD.EVENT代码;
3使用APP_NAVIGATE.EXECUTE是需要在目标窗体的RESTART trigger添加处理重启的窗体的代码。
APP_NAVIGATE.EXECUTE和FND_FUNCTION.EXECUTE会将源window的位置、大小信息存储在下面4个全局变量中,以供目标窗体使用
? global.fnd_launch_win_x_pos
? global.fnd_launch_win_y_pos
? global.fnd_launch_win_width
? global.fnd_launch_win_height
APP_NAVIGATE.EXECUTE和FND_FUNCTION.EXECUTE区别在于:
FND_FUNCTION.EXECUTE
每次调用FND_FUNCTION.EXECUTE都会打开一个新的Form. instance,调用了几次,界面上就会出现几个目标窗体,执行查询的代码应写在WHEN–NEW–FORM–INSTANCE triggers中。
APP_NAVIGATE.EXECUTE
调用APP_NAVIGATE.EXECUTE会在目标窗体中引发下列事件:
(1) do_key(’clear_form’),捕获目标窗体中的为保存修改,提示用户;
(2)步骤1成功后,将传入的参数值赋给目标窗体
(3)执行trigger RESTART代码
在调用时,通常将查询代码写在RESTART trigger中,第一次调用不会触发目标Form中RESTART trigger代码,因此ORACLE建议可在在WHEN–NEW–FORM–INSTANCE triggers中添加第一次调用需执行代码;第二次以后调用,系统不会重新创建一个新的Form. instance,而是继续使用老的Form. instance,因此将不再触发目标窗体pre-form、when–new–form–instance triggers,也就是说无论该函数被调用了多少次,界面上只会有一个目标窗体。
发表评论
-
FRM-40400:事务完成:已应用和保存X条记录"消息框不显示处理方法
2013-01-16 16:28 1467每次成功退出保存修改或添加记录时窗体都会弹出“FRM-4040 ... -
app_fields.set_required_field
2012-07-05 10:12 1174用来设置某个栏位为必录 可以在A的WHEN-VALIDAT ... -
Oracle EBS Form 开发 Tips
2012-07-05 09:49 11881EBS Form开发中经常会遇到一些小问题,以免再次遇到 ... -
form 触发器的层次Before、Override、after的区别
2012-04-10 16:54 1570问题描述:当我们在Form的BLOCK级里面增加了Tri ... -
FND_MESSAGE_PUB.get及error_handler.get_message用法
2012-02-20 20:56 36621. FND_MESSAGE_PUB.get用法,调用标准AP ... -
oracle EBS User Profile使用举例
2012-02-20 20:33 5440Oracle EBS 用户配置文件 ... -
commit_form do_key('commit_form') forms_ddl('commit');
2011-11-24 18:26 16401.commit_form 针对form上面的数据变动进行co ... -
open_form,call_form,new_form 的区别
2011-11-24 18:17 1126(一) open_form是一个受限的封装过程,他可以 ... -
亲历FRM-30425
2011-10-10 10:42 1124FRM-30425: Summarized database ... -
oracleform触发器执行顺序及键定义
2011-09-08 10:57 13721当打开FORM时: (1)PRE-FORM (2 ... -
FRM-30425问题解决
2011-08-01 16:31 2864FRM-30425: Summarized database ... -
EBS中取profile值的用法
2011-05-31 12:33 2110[code]fnd_profile.value的用法: ... -
Form中Block的重新查询
2011-05-31 12:28 1076Form中某些按钮可能调用了Package对表中某些字段进行更 ... -
Oracle EBS Standard Forms 开发规范标准的目的
2011-05-31 12:26 1212两大目标:一、让程序能由人类(human kind)进行维 ... -
范围弹性域
2011-03-24 16:32 1136范围弹性域是使用的键弹性域的一种扩展,其没有专门的弹性注册 ... -
form做好以后,别忘记检查这些
2011-03-24 16:30 11011.常规属性的设置,如模块、数据块、画布、窗口,常规触发器 ... -
使用Form个性化修改标准Form的LOV
2011-03-24 15:24 1355本文结合一个简单的Form做描述,这是没有个性化之前的LOV, ... -
使用Custom.pll修改标准Form的LOV
2011-03-24 15:23 1659在开发过程中,经常碰到需要修改标准Form中LOV的需求,一般 ... -
form开发的小总结
2011-03-22 12:14 1723Form 开发的一些小总结.当然要实现如下的功能不一定要这样做 ... -
FORM开发相关技术
2011-03-22 12:14 36201.一进页面就能看到表 ...
相关推荐
通过委托实现,初学C#的可参考,借以理解event、EventHandler等; 高级人士勿笑
Form2 f2 = new Form2(ref button1); f2.Show(); } Form2里这样写: public Button button; public Form2(ref Button button) { this.button = button; InitializeComponent(); } private void ...
form1调用form2中的控件, 对于form的应用及委托。
在一个jsp页面中,定义了一个用户登录界面(以form表单定义),但要达到检验输入的信息的合法性,就需要对输入的用户信息作判断,那么自然就需要取出其中的值。有的页面可以用action传参来得到form中输入的信息值,...
form1中开启线程thread,thread的方法crossthreadaddnum在类cross中实现在crossthreadaddnum中调用form1中的listbox1
c#在多线程中访问Form中控件的多种解决方案,是我看到的最好最全的方案,贡献给大家看看,希望有所启发
Power Builder 12.5,使用ole MSXML2.ServerXMLHTTP方式,对接WEB API,以选用JSON和x-www-form-urlencoded方式提交数据,POST/GET方式均可。
DELPHI 动态链接库封装窗体与调用的例子,可供学习DELPHI入门者使用,非常简单而实用。
下面小编就为大家分享一篇浅谈C#跨线程调用窗体控件(比如TextBox)引发的线程安全问题,具有很好的参考价值,希望对大家有所帮助
form id="form"> <input type="text" name="username"> <input type="file" name="file"> <input type="button" id="btn" value="提交"> </form> [removed][removed] [removed] ...
初学者可以看到FORM的调用,以及简单的登录过程制作。很初级的。
从外部Dll中调用子窗体
用Delphi制作以浏览器为界面的应用程序—动态调用showform函数
Delphi 调用DLL文件中的FORM 有form的dll使用方法
代码演示DELPHI三种调用BPL中FORM的方法,以及正确释放BPL包的方法。
从Oracle的FORM中调用REPORT
c# windows服务小实例,不能使用windows.form.timer控件,而是使用System.Timers.Timer控件,否则,在启动服务后将不能出现预期的效果,本实例在VS2005+SQL2005(SQL2008)环境下已经调试通过,望能抛砖引玉。
nodejs作为服务端语言,在开发中注册登录等需通过form表单向后端发送数据进行判断,那作为服务端语言的nodejs通过哪些方法可以接收调用form表单的post请求值呢。 常见的会用到以下三种,让我们对着例子看看具体...
C#创建windows服务+Form+Web调用服务,注释很全。
在调用Form_Load的时候,Form其实还没有进入展示阶段,自然Focus()调用也就没效果了。 解决方法: 在Focus()之前调用this.Show(); 或者更简单的,把Focus()函数调用移到Form_Shown事件处理中。