oracle+二次开发-FORM篇

合集下载

oracle form编译

oracle form编译

oracle form编译标题:Oracle Form编译的工作流程概述:Oracle Form编译是一个重要的过程,它确保了应用程序的正确性和可靠性。

本文将介绍Oracle Form编译的工作流程,从源代码到可执行文件的生成。

一、源代码准备在开始编译前,首先需要准备好源代码。

这些源代码通常包括Form 模块、库文件和引用的对象等。

确保源代码的完整性和正确性,以避免编译过程中出现错误。

二、编译环境设置在进行编译之前,需要设置好合适的编译环境。

这包括指定编译器的路径、设置编译选项和参数等。

确保编译环境的配置正确,以避免编译过程中出现问题。

三、编译过程1. 语法检查:编译器首先会对源代码进行语法检查,以确保代码的正确性。

它会检查代码中是否存在语法错误、拼写错误等。

如果发现错误,编译器会给出相应的错误提示。

2. 语义检查:在通过语法检查后,编译器会进行语义检查。

它会检查代码中是否存在语义错误、逻辑错误等。

例如,检查变量的类型是否匹配、函数的参数是否正确等。

如果发现错误,编译器会给出相应的错误提示。

3. 优化处理:在通过语义检查后,编译器会对代码进行优化处理。

优化处理旨在提高代码的执行效率和性能。

它会对代码进行重构、删除冗余代码、优化算法等。

通过优化处理,可以使生成的可执行文件更加高效。

4. 生成可执行文件:在完成语法检查和优化处理后,编译器会将源代码转换成可执行文件。

这个可执行文件可以在Oracle Form运行时环境中被执行。

生成的可执行文件包括了应用程序的逻辑和界面等。

四、错误处理在编译过程中,可能会出现各种错误。

编译器会给出相应的错误提示,以帮助开发人员找出错误并进行修复。

开发人员需要根据错误提示,逐个解决错误,直到编译成功。

五、测试和调试在编译成功后,需要对生成的可执行文件进行测试和调试。

测试可以帮助开发人员验证应用程序的功能和正确性。

调试可以帮助开发人员找出和修复应用程序中的错误和问题。

六、总结本文介绍了Oracle Form编译的工作流程,从源代码准备到可执行文件生成的整个过程。

ORACLE EBS FORM二次开发整理

ORACLE EBS FORM二次开发整理

一、开始开发标准FORM1.输出不必要的BLOCKNAME,DETAILBLOCK。

(包括数据块,画布,窗口)2.修改触发器:PRE-FORMFND_STANDARD.FORM_INFO(版本号,名称,模块,日期,作者);APP_WINDOW.SET_WINDOW_POSITIN(‘第一个窗口名称’,’FIRST_WINDOW’);FND_ORG.CHOOSE_ORG;――选择组织APP_WINDOW.SET_TITLE(‘窗体名称’,:_code);3.修改程序单元:app_customer:close_window4.编译f60gen module=/porcli/applmgr/1159/au/11.5.0/forms/ZHS/IAQTEST01.fmb userid=apps/simple4uoutput_file=/porcli/applmgr/1159/inv/11.5.0/forms/ZHS/IAQTEST01.fmxmodule_type=form batch=no compile_all=yesf60gen <Form Name> apps/<apps password>pre_insert, pre_update中加入代码:fnd_standard.set_who二、QUERY FIND 制作一.把APPSTAND 的QUERY FIND 对象组拉到开发的FORM上,选择子类。

二.在目的数据块的添加QUERY FIND (BLOCK LEVEL,注:可以从FORM LEVEL拷贝),然后修改代码app_find.query_find (block_window V ARCHAR2, --目的数据块find_window V ARCHAR2, --查询窗口find_block V ARCHAR2) --查询数据块4.在QUERY FIND里面添加文本项等查询内容。

一般情况下二次开发form中

一般情况下二次开发form中

一般情况下二次开发form中(不论是基于表还是基于视图的数据块),不需要复写ON-LOCK触发器,系统会自动处理的很好,那么,出于对form开发更为深入的探索,我决定还是仔细研究研究这个触发器的功用,触发时间,以有相应的pl/sql处理过程等。

以此可以作为研究其它触发器的一个范例,找到一个学习研究的方法。

form端的ON-LOCK触发器用于获取oracle数据表的行级排他锁,当ON-LOCK 触发器fire时,他会试图去获得这个锁,如果这时没有其它session获得这个锁,或者说其它session己经释放这个锁,那么我们的form会很顺利的获得。

否则会抛出app_exceptions.record_lock_exception异常。

一般我们会写一个loop ..end loop;块出来,再定义一个计数器counter计录循环次数,把它作为参数传入到app_exception.record_lock_error(counter);处理过程中。

这时,当这个counter为2,4,6,8这样的偶数时,在form中会弹出message,用于用户选择是否继续试图获得lock,或中止procedure的执行。

因为在app_exception.record_lock_error()过程的最后,会raise一个form_trigger_failure 的异常。

哪么on-lock触发器在什么时候触发呢,帮助中说:“Fires whenever Form Builder would normally attempt to lock a row, such as when an operator presses a key to modify data in an item. The trigger fires between the keypress and the display of the modified data. ”就在当我们进入到form,查询到记录之后,然后,当我们在某一个item中输入内容与这个内容display到显示屏之间那不知多么短的时间内,it fires!现在我们来看看比较完整的处理代码,为了简便期间,我对代码进行了简化:procedure lock_row ascounter NUMBER;cursor C isselectl_id,out_date,back_date,customer,from cdm_loanwhere rowid = :loan.row_idfor update of l_id nowait;---for update of <table.columons>, <table.columons> nowait;这里"of"只在多表链接查询时才有用,意为锁定指定列所对应的表,会根据where条件来获得该表的某一行的锁,nowait 表示如果获取不了锁,那么直接返回错误.recinfo C%rowtype;beginfnd_message.debug('lock_row is begin');counter := 0; --循环记数器(变量)loopbegincounter := counter+1;open C;fetch C into recinfo;if (C%NOTFOUND) thenclose C;fnd_message.set_name('FND','FORM_RECORD_DELETED');fnd_message.error;raise form_trigger_failure;end if;close C;if (-- 检查固定列,数据库中一般为非空字段,form中对应的item的require属性一般为yes,同时,block的query data source columns中相应列的mandatory属性要勾上(recinfo.l_id = :loan.l_id)AND (recinfo.status = :loan.s_id)-- 检查非固定列,数据库中一般指为充许空字段,form中对应的item的require属性一般为no,block的query data source columns中相应列的mandatory属性要去掉勾AND ((recinfo.out_date = :loan.out_date)OR ((recinfo.out_date is null)AND (:loan.out_date is null)))AND ((recinfo.back_date = :loan.back_date)OR ((recinfo.back_date is null)AND (:loan.back_date is null)))AND ((recinfo.customer = :loan.customer)OR ((recinfo.customer is null)AND (:loan.customer is null))))thenreturn;---满足条件后退出循环else--当form中的值同数据库中的值不匹配时的处理fnd_message.set_name('FND', 'FORM_RECORD_CHANGED');fnd_message.error;raise form_trigger_failure;end if;exception ---当不能获取锁时,的异常代码,该异常由系统自动抛出when app_exceptions.record_lock_exception thenapp_exception.record_lock_error(counter);end;end loop;end lock_row;这里要明白几点:1、我们调用此ON-LOCK触发器代码时,相应表中的某行即被锁定,众所周知,oracle数据库执行for update时,即获得锁,如果不commit或rollback或断掉session,这个锁是不会被主动释放的。

常用ORACLEEBSFORM二次开发常用总结

常用ORACLEEBSFORM二次开发常用总结

1.锁住当前行Set_ltem_ In sta nce_Property('ma in .import_flag',CURRENT_RECORD,UPDATE_ALLOWED,PROPERTY_OFF);用在 WHEN-NEW-RECORD-INSTANCE 或者 POST-QUERY 中。

同:app_item_property.set_property('MAIN.REF_COST',ALTERABLE,PROPERTY_ON);2.设置记录的颜色app_record.highlight('RED_REC');3.窗口居中app_wi ndow.set_wi ndow_positio n( 'WINDOW_NAME','CENTER');4.最大化窗口时自动扩展文件夹数据块在WHEN-WINDOW-RESIZED 中添加以下代码即可。

if :system.eve nt_window in ('MAIN') the napp_folder.eve nt('WHEN-WINDOW-RESIZED');end if;5.Form中调用forms基本参数方式FND_FUNCTION.EXECUTE(FUNCTION_NAME=>'CUXSOSETUP',OPEN_FLAG=>'Y',SESSION_FLAG=>'Y',OTHER_PARAMS=>NULL);其它参数传入OTHER_PARAMS 即可。

6.动态设置当前行指定列的必输属性Set_ltem」nstance_Property(item_name, CURRENT_RECORD, REQUIRED,PROPERTY_TRUE); 如: if :CUX_W0RKH0UR_EMP.ATTRIBUTE2 <> :CUX_W0RKH0UR_EMP.ATTRIBUTE1 the nSet_Item」n sta nce_Property('CUX_WORKHOUR_EMP.MODIFY_REASON', CURRENT_RECORD,REQUIRED,PROPERTY_TRUE);if :CUX_WORKHOUR_EMP.MODIFY_REASON is n ull the n:CUX_WORKHOUR_EMP.MODIFY_REASON := '123';:CUX_WORKHOUR_EMP.MODIFY_REASON := null ;fnd_message.set_stri ng('请输入调整原因.');fnd_message.show;end if;elseif :CUX_WORKHOUR_EMP.ATTRIBUTE4 = :CUX_WORKHOUR_EMP.ATTRIBUTE3 the nSet_Item」n sta nce_Property('CUX_WORKHOUR_EMP.MODIFY_REASON',CURRENT_RECORD, REQUIRED,PROPERTY_FALSE);end if;end if;7.增加菜单在 FORM 级的 when-new-form-instanee8.LOV指定初始值后需在 WHEN-NEW-RRECORD-INSTANCE 用以下语句模拟验证,否则会弹出验证框•代码如下: app_item_property.set_property('DETAIL_D.DEMAND_STATUS_DESC',ITEM」S_VALID,property_o n);。

Oracle_Form_实战总结

Oracle_Form_实战总结

Oracle_Form_实战总结Lab 1: 创建客户化应⽤本节介绍如何创建⼀个客户化应⽤。

Step 1: 建⽴Directory以applprod⽤户登录操作系统运⾏:$ cd $APPL_TOP在⽬录$APPL_TOP下建⽴⽬录satyam,其结构如图(注意⼤⼩写的区分)图1.1Step 2: 修改Environment File以applprod⽤户登录操作系统修改环境⽂件 PROD.env ,增加如下2⾏:SATYAM_TOP = “/demoapp/demoappl /satyam/1.0.0”Export SATYAM_TOP重启ORACLE APPLICATIONS,以使更改⽣效。

Step 3: 创建Tablespace/User以applprod⽤户登录操作系统运⾏:$ sqlplus在SQL-PLUS中,以⽤户名SYSTEM连结数据库运⾏以下命令建⽴TABLESPACE:create tablespace satyam_datadatafile ' /demo/demodata/satyam_data01.dbf'size 500M reuse autoextend on next 10M ;create tablespace satyam_idxdatafile '/demo/demodata/satyam_idx01.dbf'size 100M reuse autoextend on next 10M ;运⾏以下命令建⽴USER:create user satyamidentified by satyamdefault tablespace satyam_datatemporary tablespace temp ;运⾏以下命令授权:grant connect, resource to satyam ;grant select any table to satyam ;grant select any sequence to satyam ;如果是⼀次性导⼊的话下⾯是运⾏创建Table, Sequence, Trigger, Synonym, View, Package等的脚本,在下⼀节再讨论。

Oracle_Forms二次开发技术规范

Oracle_Forms二次开发技术规范

Oracle Forms二次开发开发技术规范目录前言 1目的 (1)范围 (1)参考材料 (1)文件内容 21 开发基本准则 (2)1.1 一般原则 (2)1.2 对象驻留规范 (2)1.3 客户化开发原则 (4)2 命名规范 (5)2.1 数据库对象命名 (5)2.2 程序文件命名 (6)2.3 应用对象命名 (7)2.4 Form对象命名 (8)3 代码规范 (9)3.1 FORM代码标准 (9)3.2 REPORT代码标准 (14)3.3 PL/SQL代码标准 (15)3.4 源代码管理规范 (16)附录18附录 (18)拷贝编号_____前言目的为了保证程序编写的风格与Oracle 11i程序一致,同时又要能很好区分Oracle 11i标准程序与开发的程序,使得程序的备份及移植变得更为容易和快捷,特制定本规范。

通过制定该规范标准,也有助于提高代码编写的可读性和使用的一致,使得后续的维护工作变得方便。

范围本文件适用于美的制冷事业部新海外营销系统项目,也适用于基于Oracle 11i使用Oracle Form&Report进行二次开发的项目。

参考材料<<Oracle Applications Developer’s Guide>>文件内容1开发基本准则1.1一般原则.1.1.1对象区分原则每个开发项目要求有一个简称代号,用来作所有命名对象的起始字符串,此代号要求由2~3个大写字母组成,一般以公司简称或项目简称为代号。

开发量较大的项目,除要求以命名规则区分外,还要在系统中注册独立的模块。

开发量较小的项目(如二次开发,也包括日常开发的一些零散功能),可以统一使用一个独立的模块,模块代码为CUX,模块名称为客户化开发系统。

新海外营销系统项目使用OSM作为项目名称代码。

在Oracle ERP中需要注册独立的模块:海外营销系统。

.1.1.2功能区分原则开发的新功能要求按库存组织区分。

OracleFORM开发笔记

OracleFORM开发笔记

OracleFORM开发笔记1、所有的项都必须要继承⽗项 (2)2、form触发器–了解 (2)3、form中最好使⽤⼤写命名 (2)4、form中的参数: (2)5、fnd_message.debeg (2)6、注意使⽤block、item、form级的触发器 (2)7、画布: (2)8、⼿动创建lov: (2)9、数据块名字不需要和window名称相同 (3)10、Form Trigger触发 (3)11、fnd_message的⽤法 (3)12、将form挂到erp⽅法 (3)13、进⼊form时挑选org_id (3)14、FORM开发标准使⽤FND_STANDARD.SET_WHO (3)15、主从form,⽤块中的relations来创建主块与副块的关系 (4)16、创建form步骤: (4)17、app_find触发器的学习 (4)18、不管是基于基表还是基于视图的Block,都建议编写ON-UPDATE、ON-INSERT、ON-DELETE、ON-LOCK触发器 (5)19、app_item_property.set_property (5)20、添加⽇历项: (5)21、lov的注意 (5)22、滚动条 (6)23、创建堆叠画布 (6)24、添加⾏指⽰符: (6)25、建⽴块查询步骤: (6)26、光标从块A点⼊块B时触发器执⾏过程: (7)27、创建tab画布步骤: (7)28、⼀个导航块中必须有⼀个ITEM可UPDATE或INSERT可输⼊ (8)29、⼀个块名称超过22个字符, (8)30、创建⽂件夹步骤及注意: (8)31、Oracle开发中出现FRM-40831错误的解决办法? (11)32、JTF Grid开发步骤 (11)33、使⽤view开发form步骤: (11)34、跳转到其他的form,在触发器中添加go_item(‘item_name’)函数,⾃动弹出item所在的canvas。

Oracle Applications 11i 二次开发经验总结新

Oracle Applications 11i 二次开发经验总结新

Oracle Application 11i 二次开发经验总结开发端的环境设置在Oracle Application 11i中要增加客制的Form应用程序,开发时是基于Oracle Application 11i所带的一个模板“Template.frm”的Form原程序文档,其基本开发过程如下:1、从Oracle Application 11i应用服务器中,找到“Template.frm”的Form原程序文档,将其拷贝到开发端。

提示:如果你的开发端计算机硬盘空间足够,要求是有3.8G的空间(我想现在都不成问题了吧),那么请将包含整个源代码的目录一起复制到开发端计算机上。

我用来做试验的Oracle Application 11i的版本号是:11.5.7;安装路径在E盘上,所以后面的试验设置都将在这个路径下进行,您可以根据自己的安装路径进行相应的修改、设置;当然,如果你所用的版本比我的高,有遇到和我们现在所讲的版本中有不同的地方请也不要见怪,我相信在系统的应用上是大同小异;源代码的路径如下图(ERP-1)所示:(ERP-1)我将其复制我的开发端计算机上的具体路径和服务器上的一样,如图(ERP-2)所示:(ERP-2)当我们用Oracle Develop 6i的开发工具打开“Template.frm”这个开发模板时,会出现如下图(ERP -3)、(ERP-4)所示的对话框;当然,如果你是在服务器端开发时就不会有这样的提示,请不要见怪,看了以下的步骤就会明白。

(ERP-3)(ERP-4)系统告诉我们不能正确地读取到一些PL/SQL程序库文档,这是由于路径不正确引起的,要解决这样的问题我们还要进入第二的配置。

2、在开发端配置Form默认访问路径;请打开您的系统注册表,找到这样的路径:“HKEY_LOCAL_MACHINE\SOFTWARE\ORCLE\HOMEn\”,再找到“FORMS60_PATH”的项,修改并添加从服务器上复制过来的源代码所在的绝对路径为它的默认路径值。

ORACLEEBSFORM二次开发整理

ORACLEEBSFORM二次开发整理

ORACLEEBSFORM二次开发整理一、开始开发标准FORM1.输出不必要的BLOCKNAME,DETAILBLOCK。

(包括数据块,画布,窗口)2.修改触发器:PRE-FORMFND_STANDARD.FORM_INFO(版本号,名称,模块,日期,作者);APP_WINDOW.SET_WINDOW_POSITIN(‘第一个窗口名称’,’FIRST_WINDOW’);FND_ORG.CHOOSE_ORG;――选择组织APP_WINDOW.SET_TITLE(‘窗体名称’,:/doc/0117636799.html,_code);3.修改程序单元:app_customer:close_window4.编译f60genmodule=/porcli/applmgr/1159/au/11.5.0/forms/ZHS/IAQTEST0 1.fmb userid=apps/simple4uoutput_file=/porcli/applmgr/1159/inv/11.5.0/forms/ZHS/IA QTEST01.fmxmodule_type=form batch=no compile_all=yesf60genapps/pre_insert, pre_update中加入代码:fnd_standard.set_who二、QUERY FIND 制作一.把APPSTAND 的QUERY FIND 对象组拉到开发的FORM上,选择子类。

二.在目的数据块的添加QUERY FIND (BLOCK LEVEL,注:可以从FORM LEVEL拷贝),然后修改代码app_find.query_find (block_window V ARCHAR2, --目的数据块find_window V ARCHAR2, --查询窗口find_block V ARCHAR2) --查询数据块4.在QUERY FIND里面添加文本项等查询内容。

Oracle ERP系统的Form Builder开发方法

Oracle ERP系统的Form Builder开发方法

华东师范大学学校代码:10269学 号:63041500015基于O r a c l e E R P系统的F o r mB u i l d e r开发方法院、 系: 软件学院专 业: 软件工程研 究 方 向: 软件项目管理指 导 教 师: 余青松姓 名: 程序2006年3月Oracle ERP二次开发实用技术系列:之一:基于O r a c l e E R P系统的R e p o r t B u i l d e r开发方法之二:基于O r a c l e E R P系统的F o r m B u i l d e r开发方法之三:基于O r a c l e E R P系统的C o n c u r r e n t P r o g r a m开发方法之四:基于O r a c l e E R P系统的A l e r t开发方法之五:基于O r a c l e E R P系统的X M L P u b l i s h e r开发方法摘要摘要内容:Report Builder是Oracle ERP展示数据最重要的方式,也是二次开发中,工作量最多的一个部分。

对于Oracle ERP的二次开发来说,Report的开发与一般CS结构的Report开发,是有区别的,市面上有很多关于Report的书籍,但是相信看过任何一本的人都知道,在你实际开发ERP Report的过程中,还是问题不断,而且这些问题通常是书本上无法解决的。

就算是Oracle的标准培训文档,也只能给你一个大概的蓝图。

本篇文章,就是将一些实际开发过程中的步骤、策略、技巧、疑难杂症展现出来。

本文通过步骤、安装、策略、疑难四个方面讲解Report的开发,通过最通俗的语言讲解,其中一些技巧,是公司同事经验积累的成果,只是由我将它记录下来,其中难免有一些错误,或者疑难问题上不够准确的地方,但是只要能给你的开发和学习一些帮助,就是作者最大的欣慰了。

本文第二章引用了itpub上一位网友的文章,他写的很详细了,也是很基础很重要的,我就直接引用了,不用太麻烦去写了。

OracleERP界面开发(form)-图文

OracleERP界面开发(form)-图文

OracleERP界面开发(form)-图文安裝acleForm6i及補丁以後,你自己開發的Form與OracleEBIS其它的Form不一樣,如:1.沒有工具欄;2.不能用通用的快捷鍵Fll、Ctrl+Fll和F6等等這種毛病在第一次開發人員的通病。

後來才知道,沒有做好Form前期準備工作,不多說了,開始做事吧第一:FTP到OracleEBIS服務器的devappl/au/11.5.0(也就是$AU_TOP)目錄下,下載二個文件夾:Form和Reource,將它們保存在目錄D:/0ralce/0racleForm目錄。

第二:修改注冊表2.1開始-->單擊”運行“-->輸入regedit--回車2.2找到HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE數值名稱:NLS_LANG,修改數值數據為AMERICAN_AMERICA.UTF82.3找到HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE數值名稱:FORMS60_PATH,修改數值數據為D:/Oracle/OracleForm/reource;D:/Oracle/OracleForm/FORMS 呵呵。

準備工作做完成。

開發OracleEBISForm需要套用標準模板TEMPLATE.fmb即可,若自己開發類似的功能的Form,那真是NB人也,此文件在D:/Oracle/OracleForm/Form目錄中。

了解一下Form中的常用的對像:l.DataBlock(數據塊):相當於數據源,指定數據來源於哪個表、哪個視圖或過程等等。

2.1tem(項目)是Form最小單元,也是DataBlock最小單元,相當也表或視圖也過程的遊標某一段。

3.Canvae(畫布)用於布局數據垮的界面。

畫布與數據塊沒有直接的對應關系,而是直接與Item對應,一個Canvae上的Item可以來源不同的DataBlock。

4.L0V(L0V):相當於下拉列表也列表5.Parameter(參數)相當於Form的全局變量,用於傳遞參數。

oracle form编译

oracle form编译

oracle form编译
编译Oracle Forms是将源代码转换为可执行的二进制文件的过程。

编译过程可以在Oracle Forms Builder中完成。

在编译之前,你需要确保你有正确的访问权限,并且已经连接到你的数据库。

首先,打开Oracle Forms Builder并打开你想要编译的表单文件。

然后,点击菜单栏中的"编译"选项或者使用快捷键来启动编译过程。

在编译过程中,Oracle Forms Builder会检查表单文件中的语法错误和逻辑错误。

如果有错误,编译过程会被中断,并且会显示错误的具体信息和位置,你需要根据提示对源代码进行修正。

一旦编译成功,你就可以生成可执行的二进制文件。

这个文件可以被部署到Oracle Forms Server上,或者直接在客户端运行。

在编译完成后,你可以进行测试以确保表单的功能和逻辑都正常。

需要注意的是,编译过程中可能会涉及到一些依赖文件,比如库文件、PL/SQL程序单元等,你需要确保这些依赖文件都是可用的并且能够被正确引用。

总之,编译Oracle Forms是一个重要的步骤,它确保了你的表
单文件能够被正确地转换为可执行的应用程序,从而满足用户的需求并提供良好的用户体验。

希望这个回答能够帮助你理解Oracle Forms的编译过程。

oracle form 二次开发之菜单的客制化

oracle form 二次开发之菜单的客制化

一客制化菜单。

●效果如下●步骤1.在FORM级修改触发器PRE-FORM,添加代码:app_special.instantiate('SPECIAL1’,'测试菜单’,'hrsrtdwn’);其中’SPECIAL1’为固定参数可以换成SPECIAL n(其中n<46,1-15在“工具”下,16-30在“报表”下,31-45在“活动”下,“报表”和“活动"一般没有显示);’测试菜单’为显示的文字;’hrsrtdwn’为图标名称,可以在服务器环境变量为OA_MEDIA的路径下找到相应的gif文件,本文为上图中问号左边的倒三角形,具体图像可以在服务器下查看。

2.添加FORM级修改触发器PRE-BLOCK,添加代码:app_special.enable(’SPECIAL1',PROPERTY_OFF);即设置刚进入form时,菜单变灰色。

效果如下:3.添加BLOCK级触发器PRE—BLOCK在你要触发的块中,添加代码:app_special.enable(’SPECIAL1',PROPERTY_ON)即当光标移到目标块时,使得菜单可用。

4.在目标块下添加触发器,名称为SPECIAL1,具体要实现的代码,在该触发器下,如在触发器下仅仅显示一条信息.fnd_message.debug(’测试菜单’); 如图上传编译便可实现.原理:可以在服务器目录AU_TOP/resource/<language〉下找到FNDMENU.mmb 文件,打开,可见预留SPECIAL菜单下的SPECIAL1菜单,执行代码为:global。

menu_to_appcore := ’SPECIAL1';execute_trigger(’menu_to_appcore’);因此要创建同名的’SPECIAL1’触发器来执行目标代码。

二客制化右键菜单。

●效果如下:●步骤:类似客制化菜单的方法,只需两步◆使用PRE-POPUP—MENU触发器调用方法APP_POPUP。

ORACLE EBS FORM编译入门-挂Form(如何挂)

ORACLE EBS FORM编译入门-挂Form(如何挂)

LINUX平台1、用FORM BUilder做好FORMS2、用winscp上传到服务器(FORMS的位置根据实际情况而定)ora11510/testappl/au/11.5.0/forms/ZHS3、用secureCRT连接到服务器先用PWD看当前目录,再CD /进入根目录。

运行:f60gen module=/ora11510/testappl/au/11.5.0/forms/zhs/BARCODEINPUT.fmb userid=apps/apps如果后面不加output_file,编译出来的文件将位于同一目录下。

f60gen module=BARCODEINPUT.fmb userid=apps/appsoutput_file=/ora11510/test/testappl/inv/11.5.0/forms/ZHS/BARCODEINPUT.fmx 注意文件名的大小写。

如果设置过env,可以这样做移动:f60gen module=BARCODEINPUT.fmb userid=apps/appsmv BARCODEINPUT.fmx $INV_TOP/forms/ZHS移动文件到相应目录这里的OUTPUT_FILE的确定:用系统管理员进入EBS,进入应用,注册节点:进入欲置入程序的应用系统名,如:库存%或,%au,查找出结果,应用简称基本路径库存管理系统 INV INV_TOP库存优化管理系统 MSR MSR_TOP这样很容易找到你的fmx的目标地址。

4、用应用开发权限账号进入EBS系统应用开发员-应用产品-表单:第一列表单名称自已取,第二列在查找中输入你的表单将要放到哪个子系统功能下:如,我们将放入库存下,输入%库存%,点查找,选采购管理系统,用户表单名称这里不能瞎写,写BARCODEINPUT,然后点保存。

应用开发员-应用产品-功能:说明(1)、特性(2)、表单(3)这三个页框要进行修改。

oracle+二次开发-FORM篇

oracle+二次开发-FORM篇

oracle 二次开发----form篇1.一进页面就能看到表中已生成数据,而不用按ctrl+f11进行查询的语句:在form级的触发器when-new-form-instance中,写如下代码:go_block('XXXX');execute_query;要查询的数据块的名称说明:当使用基于表建立的块时,可使用块里的任何项的GO_BLOCK或者GO_ITEM找到那个块当查询数据到一个块里去,可通过execute_query进行处理补充:用DELETE_RECORD从块中删除当前记录,要改变数据库的记录,必须使用COMMIT_FORM------------------------------------------------------------------有什么办法可以控制form中File菜单中的Export吗?使其失效答:在FORM中,在FORM级的触发器EXPORT中,将其中的代码app_standard.event('EXPORT');屏蔽掉,改为null;试一试------------------------------------------------------------------菜单与函数安全性1.子函数命名的标准:--子函数命名如下<form>_<subfunction>例如: PO_POXPOMPO_DELETE--用户函数命名如下<FROM NAME>:<subfunction>例如:PURCHASE ORDERS:DELETE------------------------------------------------------------------2.添加选择到指定的菜单中添加15个指定的form-specific entries到每一个指定的菜单中:tools,reports,actionsCreate a Form-level, User-named Trigger for Each Entry-- The form-level user-named trigger must be called SPECIALn, where n is a numberfrom 1 to 45-- Tools menu includes SPECIAL1 to SPECIAL15-- Reports menu includes SPECIAL16 to SPECIAL30, and the menu name Reports can be changed-- Actions menu includes SPECIAL31 to SPECIAL45, and the menu name Actions can be changed当form 启动时,在pre-form触发器中instantiate你特定的菜单items调用 app_special.instantiate包procedure APP_SPECIAL.INSTANTIATE(option_name varchar2, --定义tigger 名字hint varchar2 default null,--定义菜单实体的名字,使用&来定义菜单实体的键盘快捷键icon varchar2 default null,--initially_enabledboolean default true,separator varchar2 default null);--定义'LINE'为separator例子app_special.instantiate(’SPECIAL1’,’&P rint Order’,’PRINTORD’);在tool 菜单中的check boxes--option_name 与trigger_name 包括关键字CHECKBOX(例如:SPECIAL3_CHECKBOX)app_special.instantiate(’SPECIAL3_CHECKBOX’,’Spe&cial 3 Box w Line’, ’’,TRUE,’LINE’);--调用app_special.set_checkbox 来初始化check box 的值app_special.set_checkbox(’SPECIAL3_CHECKBOX’,’TRUE’);--在SPECIALn_CHECKBOX函数中和相应的逻辑代码中测试check boxapp_special.get_checkboxif (app_special.get_checkbox(’SPECIAL3_CHECKBOX’)=’TRUE’) then fnd_message.debug(’Special 3 is True!’);elsefnd_message.debug(’Special 3 is False!’);end if;----------------------------------------------在你在pre-form 中instantiate实体,随意将指定的菜单实体设置为可用或不可用(基于数据块),调用APP_SPECIAL.ENABLEprocedure APP_SPECIAL.ENABLE(option_name varchar2,state);在form-level 中的pre-block trigger里面,将你的special 菜单的item 定义为disableapp_special.enable(’SPECIAL1’,PROPERTY_OFF);在form-level 中的pre-block trigger里面,将你的special 菜单的item 定义为ableapp_special.enable(’SPECIAL1’,PROPERTY_on);将所有的special 菜单设置为 disableapp_special.enable(’SPECIAL’,PROPERTY_OFF);------------------------------------------------------------------编辑鼠标右键菜单调用APP_POPUP.INSTANTIATE(block或者item层的PRE-POPUPMENU Trigger)procedure APP_POPUP.INSTANTIATE(option_name varchar2,txt varchar2,initially_enabled boolean default true,separator varchar2 default null);与app_special.instantiate类似例如:APP_POPUP.INSTANTIATE('POPUP1','First Entry');d)PRE-QUERY--If you don't do this, whatever query criteria you may enter in-- the concatenated flex field, it is not taken into account.FND_FLEX.EVENT('PRE-QUERY' );e)KEY-LISTVALAPP_STANDARD.EVENT('KEY-LISTVAL');FND_FLEX.EVENT('KEY-LISTVAL' );------------------------------------------------------------------关于 Implementing Zoom Use the Custom Library的学习:1. .pll文件可以用form builder 打开,修改,创建2. .pll文件的编译方法:f60gen module=CUTOM.PLL userid=apps/apps module_type=LIBRARY3. 当系统不自动激活菜单上的图标时,可以在数据块的 block-level 的when-new-block-instance trigger中添加如下代码:以zoom为例子:set_menu_item_property('VIEW.ZOOM',ENABLED,PROPERTY_TURE)在form-level 的相应的trigger(比如zoom trigger)中改写下列代码:custom.event('ZOOM')4. fnd_function.exrcute语法: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); 5.FND_FUNCTION.TEST(function_name IN varchar2)测试指定的函数是否可以连接,该函数用于form 启动时测试函数的可用性,对于‘INIT’的理解:Examine current conditions and reset defaults and dynamic attributes as necessary.Usually called by other handlers that affect this item.validate(参数); 使form执行基于参数范围的有效的过程.参数为:default_scope,form_scope,record_scope,item_scope------------------------------------------------------------------弹性域(Flexfields)的总结:使用 FND_KEY_FLEX.DEFINE 在item handler 中设定key弹性域的定义procedure flexfield_item_name(event varchar2)isbeginfnd_key_flex.define(block=>'block_name',field=>'concatenated_segements_field_name',id=>'ccid_field_name',appl_short_name=>'shortname_of_application_used_to_register_flexfield ',code=>'flexfield_code',NUM=>'structure_number',any_other_auguments);)例:FND_KEY_FLEX.DEFINE(BLOCK=>’LINES’,FIELD=>’ACCTG_FLEX_VALUES’,ID=>’GL_ACCOUNT_CC_ID’,--Your ID field is the GL_ACCOUNT_CC_ID item APPL_SHORT_NAME=>’SQLGL’,CODE=>’GL#’,NUM=>’101’--可以使用GL_SET_OF_BOOKS_ID 作为structure id);----------------------------------------------------------------------------------使用FND_DESCR_FLEX.DEFINE 在item handler 中设定描述性弹性域的定义定义FND_DESCR_FLEX.DEFINE(BLOCK=>'BLOCK_NAME',FIELD=>'DISPLAYED_FLEXFIELD_FIELD_NAME',APPL_SHORT_NAME=>'SHORTNAME_OF_APPLICATION_USED_TO_REGISTER_FLEXFIELD ',DESC_FLEX_NAME=>'FLEXFIELD_NAME',ANY_OTHER_ARGUMNTS);例FND_DESCR_FLEX.DEFINE(BLOCK=>’ORDERS’,FIELD=>’DESC_FLEX’,APPL_SHORT_NAME=>’DEM’,DESC_FLEX_NAME=>’DEM_ORDERS’);)----------------------------------------------------------COPY 命令Copies a value from one item or variable into another item or global variable.SyntaxPROCEDURE COPY(source VARCHAR2, destination VARCHAR2)Parameterssource: The source is a literal value.destination: The destination can be either a text item or another global variable.例:COPY( 'Yes', 'GLOBAL.'||global_var_name );将‘YES’付值给变量global_var_name弹性域说明:/*这里是原来的FND_KEY_FLEX.DEFINE(BLOCK=>'LINES',FIELD=>'ACCTG_FLEX_VALUES',ID=>'GL_ACCOUNT_CC_ID',APPL_SHORT_NAME=>'SQLGL',CODE=>'GL#',NUM=>'101');*//*按以下顺序*/1.先创建一个外键字段, id(指‘Unique_ID_field’)2.修改联合字段的LOV, database item , class properties属性.(指description_field_name)3.WHEN-NEW-FORM-INSTANCEcursor get_cao isselect to_char(id_flex_num)from fnd_id_flex_structureswhere id_flex_structure_code = 'ACCOUNTING_FLEXFIELD'and id_flex_code = 'GL#';v_cao varchar2(1000);...................open get_cao;fetch get_cao into v_cao;if get_cao%notfound thenv_cao := '101';end if;close get_cao;app_standard.event('WHEN-NEW-FORM-INSTANCE');fnd_key_flex.define(BLOCK=>'COMBO',FIELD=>'ACCOUNT_FLEXFIELD',APPL_SHORT_NAME=>'SQLGL',CODE=>'GL#',NUM=>v_cao,ID=>'CODE_COMBINATION_ID',DESCRIPTION=>'',TITLE=>' OK ',VALIDATE=>'FULL',QBE_IN=>'Y',DERIVE_ALWAYS=>'Y',updateable => '',VRULE=>'\\nSUMMARY_FLAG\\nI\\nAPPL=SQLGL;NAME=GL_NO_PARENT_SEGM ENT_ALLOWED\\nN',where_clause => 'summary_flag != ''Y''',QUERY_SECURITY =>'Y');4.在其他触发器中按如下处理‘WHEN-VALIDATE-ITEM’‘WHEN-NEW-ITEM-INSTANCE’‘POST-QUERY’‘PRE-QUERY ’‘KEY-LISTVAL’a)WHEN-VALIDATE-ITEMif ( :system.mode = 'NORMAL' ) thenfnd_flex.event( 'WHEN-VALIDATE-ITEM' );end if;b)WHEN-NEW-ITEM-INSTANCEapp_standard.event('WHEN-NEW-ITEM-INSTANCE');fnd_flex.event('WHEN-NEW-ITEM-INSTANCE' );c)POST-QUERYFND_FLEX.EVENT('POST-QUERY');message 用法总结:1.设置信息:--FND_MESSAGE.SET_NAME 语法:procedure FND_MESSAGE.SET_NAME(application_shortnameINvarchar2,message_name IN varchar2);作用:从Message Dictionary获取一条信息一般情况下在FORM中显示出错信息使用以下代码:FND_MESSAGE.SET_NAME( APPL_SHORT_NAME,MESSAGE_NAME) ;FND_MESSAGE.ERROR ;--FND_MESSAGE.RETRIEVE作用:取得一条数据库中的等待信息--FND_MESSAGE.SET_STRING (value IN varchar2)作用:将字符串放到消息栈中,--FND_MESSAGE.SET_TOKEN作用:用值替换message的信息中的变量语法:procedure FND_MESSAGE.SET_TOKEN(token_name IN VARCHAR2,value IN VARCHAR2translate IN boolean default FALSE);--在form用于显示信息的函数1.FND_MESSAGE.ERROR2.FND_MESSAGE.WARN例子Example:FND_MESSAGE.SET_NAME(’SQLAP’,’AP_PAY_MULTI_PAY_VOID’);REC_COUNT:= <NUMBER OF PAYMENTS>;FND_MESSAGE.SET_TOKEN(’NUM_OF_RECS’,REC_COUNT);IF (NOT FND_MESSAGE.WARN) THENRaise FORM_TRIGGER_FAILURE;END IF;3.FND_MESSAGE.QUESTION语法:FND_MESSAGE.QUESTION(button1 IN varchar2 default ‘YES’,button2 IN varchar2 default ‘NO’,button3 IN varchar2 default ‘CANCEL’;default_btn IN number default 1,cancel_btn IN number default 3,icon IN varchar2 default ‘question’) return number;说明:FND_MESSAGE.QUESTION 返回一个被选中的button的number Example:FND_MESSAGE.SET_NAME(’FND’,’ATCHMT-COMMIT BEFORE INVOKING’); IF FND_MESSAGE.QUESTION(’YES’,’CANCEL’,NULL,1,2,NULL) = 2 THENRAISE FORM_TRIGGER_FAILURE;END IF;4.FND_MESSAGE.SHOW作用:显示信息5.FND_MESSAGE.DEBUG6.FND_MESSAGE.GET作用:取得在message中设置好的message信息设置Item-level和Item-instance-level属性时需特别的注意,Item-level属性影响所有的记录,而Item-instance-level属性只影响特定的记录(当前行)。

OracleForm开发笔记

OracleForm开发笔记

OracleForm开发笔记⽇期选择实现:1、设置Item属性数据类型:Date值列表:ENABLE_LIST_LAMP从列表中验证:否2、编写Item的KEY-LISTVAL触发器:calendar.show;窗⼝最⼤化时⾃动扩展⽂件夹数据块:在Form触发器:WHEN-WINDOW-RESIZED 增加以下代码1IF :SYSTEM.EVENT_WINDOW IN ('WINDOW_NAME') THEN2 APP_FOLDER.EVENT('WHEN-WINDOW-RESIZED');3END IF;有时⽂件夹堆叠画布设置的宽度不起作⽤,可以在Form触发器下增加如下代码:--设置FOLDER 和窗⼝右边距的距离IF :GLOBAL.FOLDER_ACTION ='VIEW-SIZE'THEN:GLOBAL.FOLDER_VIEW_SIZE_MARGIN :='0.05';END IF;设置记录颜⾊app_record.highlight('RED_REC');设置窗⼝居中在Form触发器:WHEN-NEW-FORM-INSTANCE增加以下代码app_window.set_window_position('WINDOW_NAME','CENTER');设置窗⼝标题在Form触发器:WHEN-NEW-FORM-INSTANCE增加以下代码app_window.set_title('WINDOW_NAME','TITLE_NAME');设置项属性1 set_item_property(ITEMID, insert_allowed, property_false/property_true);--插⼊2 set_item_property(ITEMID, update_allowed, property_false/property_true);--更新3 set_item_property(ITEMID, delete_allowed, property_false/property_true);--删除4 set_item_property(ITEMID, REQUIRED, property_false/property_true);--必需5 set_item_property(ITEMID, ENABLED, property_false/property_true);--可⽤6 set_item_property(ITEMID, DISPLAYED, property_false/property_true); --显⽰两项关联:调⽤app_field.clear_dependent_fields来将两个(或多个)item建⽴关联,当⽗item field变化时,⼦fields清空。

Oracle Forms开发常用技巧

Oracle Forms开发常用技巧

Oracle Forms开发常用技巧1 手动提交Request在Form里面,我们可以用APPS.FND_REQUEST.SUBMIT_REQUEST 提交一个Request到Oracle Request Manager。

如果提交成功,该函数返回Request ID,否则,返回0。

1.1 初始化在提交一个Request之前,我们会调用Oracle Standard的Procedure对这个Request做一些基本的参数的初始化。

APPS.FND_GLOBAL.apps_initialize (user_id =>APPS.FND_er_id,);resp_id =>APPS.FND_GLOBAL.resp_id, resp_appl_id=>APPS.FND_GLOBAL.resp_appl_id1.2 FND_REQUEST.SUBMIT_REQUEST函数APPS.FND_REQUEST.SUBMIT_REQUEST有105个参数:APPS.FND_REQUEST.SUBMIT_REQUEST(APPLICATION IN VARCHAR2 DEFAULT NULL, PROGRAM IN VARCHAR2 DEFAULT NULL, DESCRIPTION IN VARCHAR2 DEFAULT NULL, START_TIME IN VARCHAR2 DEFAULT NULL, SUB_REQUEST IN BOOLEAN DEFAULT FALSE,RETURN NUMBER;chr(0),'','','','','','','','','','','','','','','','','','','','','','','','','','','','','', '','','','','','','','','','','','','','','','','','','','', '','','','','','','','','','','','','','','','','','','','', '','','','','','','','','','','','','','','','','','','','', '','','','','','','','','',''1.3 参数详解1.3.1 APPLICATION 必需参数Short name of the application associated with the concurrent request to be submitted. 应用程序的名称缩写。

oracle form 概念

oracle form 概念

oracle form概念Oracle Forms是Oracle Corporation提供的一种应用程序开发工具,用于创建企业级数据库应用程序的用户界面。

它是一种基于图形用户界面(GUI)的工具,用于设计和构建数据输入表单和报表,以便与Oracle数据库进行交互。

Oracle Forms的主要概念包括:1.表单(Forms):表单是用户界面的主要构建块。

它是一个包含各种用户输入元素(如文本框、按钮、下拉列表等)的窗体,用户可以在其中输入和检索数据。

表单用于与数据库进行通信,执行查询、插入、更新和删除等操作。

2.窗体(Canvas):窗体是表单的一部分,表示用户界面的可见区域。

一个表单可以包含一个或多个窗体,每个窗体可以包含不同的用户界面元素。

窗体可以分为多个块(Block),每个块对应一个数据表或查询结果集。

3.块(Block):块是表单中用于显示和编辑数据的逻辑单位。

每个块对应一个数据表、视图或查询结果集。

块定义了数据的输入和输出,以及与数据库的交互方式。

4.触发器(Triggers):触发器是在特定事件发生时执行的PL/SQL代码块。

例如,在用户点击按钮或在数据更新时触发。

触发器用于定义应用程序的行为和业务逻辑。

5.对象库(Object Library):对象库包含了可在多个表单之间共享和重用的对象,如窗体、块、程序单元等。

这有助于提高开发效率和保持一致性。

6.数据块(Data Block):数据块是表单中用于存储和处理数据库中数据的逻辑结构。

每个数据块对应一个数据表、视图或查询结果集,用于实现数据的输入、修改和展示。

总体而言,Oracle Forms提供了一个可视化的开发环境,使开发人员能够轻松地创建与Oracle数据库交互的用户界面。

通过使用这些概念,开发人员可以设计灵活、高效且易于维护的企业级应用程序。

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

oracle 二次开发----form篇1.一进页面就能看到表中已生成数据,而不用按ctrl+f11进行查询的语句:在form级的触发器when-new-form-instance中,写如下代码:go_block('XXXX');execute_query;要查询的数据块的名称说明:当使用基于表建立的块时,可使用块里的任何项的GO_BLOCK或者GO_ITEM找到那个块当查询数据到一个块里去,可通过execute_query进行处理补充:用DELETE_RECORD从块中删除当前记录,要改变数据库的记录,必须使用COMMIT_FORM------------------------------------------------------------------有什么办法可以控制form中File菜单中的Export吗?使其失效答:在FORM中,在FORM级的触发器EXPORT中,将其中的代码app_standard.event('EXPORT');屏蔽掉,改为null;试一试------------------------------------------------------------------菜单与函数安全性1.子函数命名的标准:--子函数命名如下<form>_<subfunction>例如: PO_POXPOMPO_DELETE--用户函数命名如下<FROM NAME>:<subfunction>例如:PURCHASE ORDERS:DELETE------------------------------------------------------------------2.添加选择到指定的菜单中添加15个指定的form-specific entries到每一个指定的菜单中:tools,reports,actionsCreate a Form-level, User-named Trigger for Each Entry-- The form-level user-named trigger must be called SPECIALn, where n is a numberfrom 1 to 45-- Tools menu includes SPECIAL1 to SPECIAL15-- Reports menu includes SPECIAL16 to SPECIAL30, and the menu name Reports can be changed-- Actions menu includes SPECIAL31 to SPECIAL45, and the menu name Actions can be changed当form 启动时,在pre-form触发器中instantiate你特定的菜单items调用 app_special.instantiate包procedure APP_SPECIAL.INSTANTIATE(option_name varchar2, --定义tigger 名字hint varchar2 default null,--定义菜单实体的名字,使用&来定义菜单实体的键盘快捷键icon varchar2 default null,--initially_enabledboolean default true,separator varchar2 default null);--定义'LINE'为separator例子app_special.instantiate(’SPECIAL1’,’&P rint Order’,’PRINTORD’);在tool 菜单中的check boxes--option_name 与trigger_name 包括关键字CHECKBOX(例如:SPECIAL3_CHECKBOX)app_special.instantiate(’SPECIAL3_CHECKBOX’,’Spe&cial 3 Box w Line’, ’’,TRUE,’LINE’);--调用app_special.set_checkbox 来初始化check box 的值app_special.set_checkbox(’SPECIAL3_CHECKBOX’,’TRUE’);--在SPECIALn_CHECKBOX函数中和相应的逻辑代码中测试check boxapp_special.get_checkboxif (app_special.get_checkbox(’SPECIAL3_CHECKBOX’)=’TRUE’) then fnd_message.debug(’Special 3 is True!’);elsefnd_message.debug(’Special 3 is False!’);end if;----------------------------------------------在你在pre-form 中instantiate实体,随意将指定的菜单实体设置为可用或不可用(基于数据块),调用APP_SPECIAL.ENABLEprocedure APP_SPECIAL.ENABLE(option_name varchar2,state);在form-level 中的pre-block trigger里面,将你的special 菜单的item 定义为disableapp_special.enable(’SPECIAL1’,PROPERTY_OFF);在form-level 中的pre-block trigger里面,将你的special 菜单的item 定义为ableapp_special.enable(’SPECIAL1’,PROPERTY_on);将所有的special 菜单设置为 disableapp_special.enable(’SPECIAL’,PROPERTY_OFF);------------------------------------------------------------------编辑鼠标右键菜单调用APP_POPUP.INSTANTIATE(block或者item层的PRE-POPUPMENU Trigger)procedure APP_POPUP.INSTANTIATE(option_name varchar2,txt varchar2,initially_enabled boolean default true,separator varchar2 default null);与app_special.instantiate类似例如:APP_POPUP.INSTANTIATE('POPUP1','First Entry');d)PRE-QUERY--If you don't do this, whatever query criteria you may enter in-- the concatenated flex field, it is not taken into account.FND_FLEX.EVENT('PRE-QUERY' );e)KEY-LISTVALAPP_STANDARD.EVENT('KEY-LISTVAL');FND_FLEX.EVENT('KEY-LISTVAL' );------------------------------------------------------------------关于 Implementing Zoom Use the Custom Library的学习:1. .pll文件可以用form builder 打开,修改,创建2. .pll文件的编译方法:f60gen module=CUTOM.PLL userid=apps/apps module_type=LIBRARY3. 当系统不自动激活菜单上的图标时,可以在数据块的 block-level 的when-new-block-instance trigger中添加如下代码:以zoom为例子:set_menu_item_property('VIEW.ZOOM',ENABLED,PROPERTY_TURE)在form-level 的相应的trigger(比如zoom trigger)中改写下列代码:custom.event('ZOOM')4. fnd_function.exrcute语法: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); 5.FND_FUNCTION.TEST(function_name IN varchar2)测试指定的函数是否可以连接,该函数用于form 启动时测试函数的可用性,对于‘INIT’的理解:Examine current conditions and reset defaults and dynamic attributes as necessary.Usually called by other handlers that affect this item.validate(参数); 使form执行基于参数范围的有效的过程.参数为:default_scope,form_scope,record_scope,item_scope------------------------------------------------------------------弹性域(Flexfields)的总结:使用 FND_KEY_FLEX.DEFINE 在item handler 中设定key弹性域的定义procedure flexfield_item_name(event varchar2)isbeginfnd_key_flex.define(block=>'block_name',field=>'concatenated_segements_field_name',id=>'ccid_field_name',appl_short_name=>'shortname_of_application_used_to_register_flexfield ',code=>'flexfield_code',NUM=>'structure_number',any_other_auguments);)例:FND_KEY_FLEX.DEFINE(BLOCK=>’LINES’,FIELD=>’ACCTG_FLEX_VALUES’,ID=>’GL_ACCOUNT_CC_ID’,--Your ID field is the GL_ACCOUNT_CC_ID item APPL_SHORT_NAME=>’SQLGL’,CODE=>’GL#’,NUM=>’101’--可以使用GL_SET_OF_BOOKS_ID 作为structure id);----------------------------------------------------------------------------------使用FND_DESCR_FLEX.DEFINE 在item handler 中设定描述性弹性域的定义定义FND_DESCR_FLEX.DEFINE(BLOCK=>'BLOCK_NAME',FIELD=>'DISPLAYED_FLEXFIELD_FIELD_NAME',APPL_SHORT_NAME=>'SHORTNAME_OF_APPLICATION_USED_TO_REGISTER_FLEXFIELD ',DESC_FLEX_NAME=>'FLEXFIELD_NAME',ANY_OTHER_ARGUMNTS);例FND_DESCR_FLEX.DEFINE(BLOCK=>’ORDERS’,FIELD=>’DESC_FLEX’,APPL_SHORT_NAME=>’DEM’,DESC_FLEX_NAME=>’DEM_ORDERS’);)----------------------------------------------------------COPY 命令Copies a value from one item or variable into another item or global variable.SyntaxPROCEDURE COPY(source VARCHAR2, destination VARCHAR2)Parameterssource: The source is a literal value.destination: The destination can be either a text item or another global variable.例:COPY( 'Yes', 'GLOBAL.'||global_var_name );将‘YES’付值给变量global_var_name弹性域说明:/*这里是原来的FND_KEY_FLEX.DEFINE(BLOCK=>'LINES',FIELD=>'ACCTG_FLEX_VALUES',ID=>'GL_ACCOUNT_CC_ID',APPL_SHORT_NAME=>'SQLGL',CODE=>'GL#',NUM=>'101');*//*按以下顺序*/1.先创建一个外键字段, id(指‘Unique_ID_field’)2.修改联合字段的LOV, database item , class properties属性.(指description_field_name)3.WHEN-NEW-FORM-INSTANCEcursor get_cao isselect to_char(id_flex_num)from fnd_id_flex_structureswhere id_flex_structure_code = 'ACCOUNTING_FLEXFIELD'and id_flex_code = 'GL#';v_cao varchar2(1000);...................open get_cao;fetch get_cao into v_cao;if get_cao%notfound thenv_cao := '101';end if;close get_cao;app_standard.event('WHEN-NEW-FORM-INSTANCE');fnd_key_flex.define(BLOCK=>'COMBO',FIELD=>'ACCOUNT_FLEXFIELD',APPL_SHORT_NAME=>'SQLGL',CODE=>'GL#',NUM=>v_cao,ID=>'CODE_COMBINATION_ID',DESCRIPTION=>'',TITLE=>' OK ',VALIDATE=>'FULL',QBE_IN=>'Y',DERIVE_ALWAYS=>'Y',updateable => '',VRULE=>'\\nSUMMARY_FLAG\\nI\\nAPPL=SQLGL;NAME=GL_NO_PARENT_SEGM ENT_ALLOWED\\nN',where_clause => 'summary_flag != ''Y''',QUERY_SECURITY =>'Y');4.在其他触发器中按如下处理‘WHEN-VALIDATE-ITEM’‘WHEN-NEW-ITEM-INSTANCE’‘POST-QUERY’‘PRE-QUERY ’‘KEY-LISTVAL’a)WHEN-VALIDATE-ITEMif ( :system.mode = 'NORMAL' ) thenfnd_flex.event( 'WHEN-VALIDATE-ITEM' );end if;b)WHEN-NEW-ITEM-INSTANCEapp_standard.event('WHEN-NEW-ITEM-INSTANCE');fnd_flex.event('WHEN-NEW-ITEM-INSTANCE' );c)POST-QUERYFND_FLEX.EVENT('POST-QUERY');message 用法总结:1.设置信息:--FND_MESSAGE.SET_NAME 语法:procedure FND_MESSAGE.SET_NAME(application_shortnameINvarchar2,message_name IN varchar2);作用:从Message Dictionary获取一条信息一般情况下在FORM中显示出错信息使用以下代码:FND_MESSAGE.SET_NAME( APPL_SHORT_NAME,MESSAGE_NAME) ;FND_MESSAGE.ERROR ;--FND_MESSAGE.RETRIEVE作用:取得一条数据库中的等待信息--FND_MESSAGE.SET_STRING (value IN varchar2)作用:将字符串放到消息栈中,--FND_MESSAGE.SET_TOKEN作用:用值替换message的信息中的变量语法:procedure FND_MESSAGE.SET_TOKEN(token_name IN VARCHAR2,value IN VARCHAR2translate IN boolean default FALSE);--在form用于显示信息的函数1.FND_MESSAGE.ERROR2.FND_MESSAGE.WARN例子Example:FND_MESSAGE.SET_NAME(’SQLAP’,’AP_PAY_MULTI_PAY_VOID’);REC_COUNT:= <NUMBER OF PAYMENTS>;FND_MESSAGE.SET_TOKEN(’NUM_OF_RECS’,REC_COUNT);IF (NOT FND_MESSAGE.WARN) THENRaise FORM_TRIGGER_FAILURE;END IF;3.FND_MESSAGE.QUESTION语法:FND_MESSAGE.QUESTION(button1 IN varchar2 default ‘YES’,button2 IN varchar2 default ‘NO’,button3 IN varchar2 default ‘CANCEL’;default_btn IN number default 1,cancel_btn IN number default 3,icon IN varchar2 default ‘question’) return number;说明:FND_MESSAGE.QUESTION 返回一个被选中的button的number Example:FND_MESSAGE.SET_NAME(’FND’,’ATCHMT-COMMIT BEFORE INVOKING’); IF FND_MESSAGE.QUESTION(’YES’,’CANCEL’,NULL,1,2,NULL) = 2 THENRAISE FORM_TRIGGER_FAILURE;END IF;4.FND_MESSAGE.SHOW作用:显示信息5.FND_MESSAGE.DEBUG6.FND_MESSAGE.GET作用:取得在message中设置好的message信息设置Item-level和Item-instance-level属性时需特别的注意,Item-level属性影响所有的记录,而Item-instance-level属性只影响特定的记录(当前行)。

相关文档
最新文档