oracle的form开发,Oracle Form开发之调用Form

Form开发中经常会用到Form间相互调用的功能,总结了以下,大概有以下3种方法:

方法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中与参数列表中的同名参数会被赋予传入的值,随后被其他程序引用。

下面是app_form.open API的源代码,也可以了解下open_form. built-in的用法。

APPCORE.pll app_form.open

PROCEDURE 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) IS

BEGIN

COPY('Entering app_form.open.','global.frd_debug');

if session_mode = SESSION then

open_form(fnd_navigate.formpath(app_shortname, form_name),

ACTIVATE, session_mode, NO_SHARE_LIBRARY_DATA, parameter_list);

else

open_form(fnd_navigate.formpath(app_shortname, form_name), --原来是这样调用的

ACTIVATE, session_mode, SHARE_LIBRARY_DATA, parameter_list);

end if;

COPY('Completed app_form.open.','global.frd_debug');

END open;

方法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,也就是说无论该函数被调用了多少次,界面上只会有一个目标窗体。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/554235.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

7招改善你的谷歌chrome浏览器

核心提示:Google Chrome是由Google开发的一款设计简单、高效的Web浏览工具。 Google浏览器已经发布了几个星期,也许大多数人都已经听说过它,并已经下载使用过了。如果你喜欢用这款浏览器并且想进一步深入,这里有七个有用的特性可…

2024年PMP考试新考纲-PMBOK第七版-项目管理原则真题解析(续3)

马上就要进入2024年了,要参加2024年PMP一季度考试的小伙伴可以准备起来了。2024年的PMP考试将继续采用新考试大纲,考试内容包括PMBOK第六版、PMBOK第七版和敏捷实践指南,而且敏捷(或者叫混合)的项目环境将占比超过50%&…

oracle触发器更新语法,Oracle之前更新触发器

本Oracle教程解释了如何在Oracle中创建Before Update触发器的语法和示例。Before Update触发器表示Oracle将在执行更新操作之前触发此触发器。语法在Oracle / PLSQL中创建Before Update触发器的语法是:CREATE [ OR REPLACE ] TRIGGER trigger_nameBEFORE UPDATEON t…

实用:Google Chrome(谷歌浏览器)键盘快捷键大全

核心提示:关于Google Chrome键盘快捷键已整理出来,详细请看全文。 以下是整理的Google Chrome,键盘快捷键大全,Chrome为网页浏览设置了许多快捷键,许多复杂的鼠标操作可以用键盘轻松完成。 合理地使用快捷键可以让你的操作事半功…

前台等待事件 oracle,Oracle等待事件之buffer busy waits

产生原因官方定义:This wait happens when a session wants to access a database block in the buffer cache but it cannot as the buffer is "busy". The two main cases where this can occur are:Another session is reading the block into the buf…

win8消费者预览版Chrome无法设置默认浏览器

核心提示:在Windows 8消费者预览版中Chrome无法设置默认浏览器该怎么办?在这里就来告诉你解决的方法! 虽然说IE10很优秀,但萝卜青菜各有所爱,例如Win8迷就喜欢谷歌的Chrome浏览器,各种同步!在Windows 8消费者预览版中…

oracle有人用过fra吗,FRA(闪回恢复区)

1、闪回恢复区简介闪回恢复区可以集中存储所有与恢复相关的文件。FRA可以使用本地附加的存储、Oracle的群集文件系统(Cluster FileSystem,简写为OCFS)或Oracle 10g中新的自动存储管理(ASM)特性。2、闪回恢复区可包含的文件类型(1) 归档的重做日志(2) 控制文件(3) 控制文件自动备…

谷歌Chrome浏览器发布10年成霸主

谷歌chrome浏览器发布10年成霸主 9月3日消息,据The Verge报道,谷歌于2008年9月2日首次发布了Chrome浏览器。作为“浏览器的全新体验”,Chrome首次推出了谷歌网络漫画,标志着该公司第一款网络浏览器问世。 谷歌Chrome浏览器发布1…

oracle服务端安装和下载,oracle 11g 服务端下载地址及安装说明

Oracle 11g 服务端的安装步骤 简介 本文主要介绍 Oracle 11g 服务端的安装步骤,在介绍之前说明以下几点: 1. 所安装的服务器是本机的虚拟机,操作系统为 Windows Server 2019: 2. 以下 ...Oracle 11g服务端的安装和配置1.双击Oracle11g_database安装目录下的Setup.exe. 2.选…

xx Chrome浏览器市场份额下滑

xx chrome浏览器市场份额下滑 谷歌浏览器继续成为世界上排名第一的桌面浏览器,尽管上个月份额小幅下降,而新版Windows 10默认的微软edge浏览器则努力提高市场份额。就市场份额而言,谷歌浏览器是61.69%,而微软或多或少已经停止使用…

linux系统使用小端内存,linux进程内存管理

1.数据的内部存储大端:起始地址存放数据的高位小端:起始地址存放数据的低位大端小端是由处理器的体系结构决定的,不是操作系统。测试方法:点击(此处)折叠或打开#include int main(){int a0x12345678;char *pNULL;p&a;if(*p 0…

internet explorer浏览器市场份额仍超Chrome和Firefox

internet explorer浏览器市场份额仍超Chrome和Firefox 很多人并不知道 Microsoft Edge 是个什么浏览器,原因很简单,目前该浏览器仅支持 Windows 10 操作系统,而且 Edge 也是随 Windows 10 的发布才首次出现在人们的视野当中。微软对其寄予厚…

linux如何挂载nfs目录,linux – NFS导出已经挂载NFS的目录(在服务器上)

我有一个NFS服务器,A,共享一个文件夹. B正在安装文件夹. B也在分享该文件夹.但是C无法安装它. C上的错误是:mount.nfs: 192.168.0.1:/export/myfolder Failed,reason given by server: Permission denied在B上,/ var / log / messages中的错误是Aug 17 15:21:21 B m…

chrome浏览器无法加载百度网页启动组件怎么办

chrome浏览器无法加载百度网页启动组件怎么办 chrome浏览器无法加载百度网页启动组件怎么办?chrome浏览器百度打不开提示无法加载百度网页启动组件怎么办?使用chrome浏览器打开百度的时候总是无法访问,提示“无法加载百度网页启动组件”,该怎么解决这…

linux线程同步教程,多线程同步

1.linux使用多线程同步的方法1)互斥锁:当线程A锁定了互斥变量时,线程B再去锁定时就会被挂起,直到A解锁。注意:当线程要不断的去轮询检查某个条件以判断是否可以操作需同步的数据时,可使用条件变量提高效率。demo如下&a…

为什么谷歌浏览器打不开 Google Chrome打不开解决方法

核心提示:很多用户反映有谷歌浏览器打不开状况,下面小编就为大家分享一个解决方法。 谷歌浏览器它是又Google(谷歌)公司开发的免费网页浏览器。它在全球拥有大量用户群体。很多用户反映有谷歌浏览器打不开状况,下面小编就为大家分享一个解决…

linux 串口信息记到日志,[linux学习笔记]之一:ubuntu ch340调试备忘

[linux学习笔记]之一:ubuntu ch340调试备忘已有 2183 次阅读2016-11-8 21:52|个人分类:linux最近迷上了Linux,入了一块板。电脑使用win7ubuntu 双系统,可是调试的时候就麻烦了,ubuntu下写好sd卡镜像,调试的时候还要切换…

Chrome 69正式版浏览器遭批 恢复完整显示域名

Chrome 69正式版浏览器遭批 恢复完整显示域名 日前,谷歌发布了全新的Chrome 69正式版浏览器,带来了全新的材料设计等特性,也算是庆祝chrome浏览器10周年。不过,新版Chrome隐藏域名中的“www”遭到了用户批评,并认为会…

微软协助谷歌开发ARM平台Chrome浏览器

微软协助谷歌开发ARM平台chrome浏览器 美国科技博客9to5xx发现,,近日,微软的一些工程师正在为谷歌Chrome浏览器贡献代码,帮助其成为ARM平台上的原生Windows应用。 此外,高通高管上月表示,高通也正努力将原…

嵌入式linux 配置usb otg,嵌入式linux系统环境下USB设备的驱动实现

0 引言嵌入式linux系统环境以其易于移植裁减、内核小、效率高、完整、原代码开放及性能优异等特点,在嵌入式领域得到了非常广泛的应用。Linux的USB设备端的源代码中主要有USB device的海量存储设备、串口设备、网络设备等设备驱动程序及各种USB device控制器芯片的…