ORACLE EBS FORM二次开发整理

合集下载

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属性只影响特定的记录(当前行)。

EBS Form 开发问题集锦

EBS Form 开发问题集锦

1.
基础问题 ..................................................................................................................... 1
1.1. Form Builder打开Form必须先连接数据库,否则直接关掉!......................... 1
5.1. 开发员模式错误, 出现 Oracle Applications 编码标准违例。......................12
6.
疑难杂症 ................................................................................................................... 13
4.1. APP-FND-00756: 无法查找组合 CCID=23379 CODE=MTLL SET=0 ....... 11 4.2. APP-FND-01048: WHERE子句’***’限制此组合的使用...............................11
5.
其他 ........................................................................................................................... 12
Open Issues.....................................................................................................................14 Closed Issues .................................................................................................................. 14

OracleEBS学习经验总结

OracleEBS学习经验总结

OracleEBS学习经验总结目录1、form中数据查询时给定where条件,过滤数据 (2)2、radio-button中给item动态修改属性 (2)3、FORM窗口关闭时报错 (2)4、Form中自定义导出excel (3)5、FORM中限制下限LOV可选数据必须大于上限已选值 (4)6、FORM中选中上限时,默认下限等于上限值 (4)7、按照固定字符分割字符串取其中某段 (4)1、form中数据查询时给定where条件,过滤数据show_window(需要跳转到的window,2,2); --窗口调用函数,窗口名称,和坐标位置GO_BLOCK(指定数据块); --跳转数据块名称------3拼接where条件sql,单引号用’’’’四个单引号来转换,并且数据字段和变量都要用单引号括起来,也可以用三个引号代替where_cause := ' STUNO = '||''''||变量1||’’’’||’and ’;相当于where cause :STUNO = ‘变量1’ andwhere_cause := ' STUNO = '''||变量2||’’’and ’; 相当于where cause :STUNO = ‘变量2’and-----4执行sqlset_block_property('指定数据块',DEFAULT_WHERE,where_cause); --给数据块增加where 条件,将上面的where条件赋值给要查询的数据块EXECUTE_QUERY; --结束2、radio-button中给item动态修改属性SET_ITEM_PROPERTY('指定item ',LOV_NAME,'指定LOV');--set_item_property给item设置属性,将固定的lov设置给某个item--设置ITEM属性NAVIGABLESet_Item_Property('Block_name.Item_name',NAVIGABLE,PR OPERTY_TRUE|FALSE);--设置ITEM属性VISUAL_ATTRIBUTESet_Item_Property('Block_name.Item_name',visual_attribute,' vname'); --'vname'由导航器中(VISUAL_ATTRIBUTES)定义--设置ITEM属性DISPLAYEDSet_Item_Property('Block_name.Item_name',displayed,TRUE| FALSE);--设置ITEM属性POSITIONSet_Item_Property('Block_name.Item_name',position,x,y);--设置ITEM_SIZESet_Item_Property('Block_name.Item_name',item_size,x,y);--设置ITEM属性LABLESet_Item_Property('Block_name.Item_name',LABEL,'MESSAG E')3、FORM窗口关闭时报错在程序单元中修改程序包主体if (wnd = 'MAIN_W') then --这个是必须改的,否则主窗口不能关闭app_window.close_first_window; --关闭函数elsif (wnd = 'SECOND_W') then --某个关闭报错的窗口if (wnd = get_view_property(get_item_property(:SYSTEM.CURSOR_ITEM, ITEM_CANVAS), WINDOW_NAME)) thengo_block(:PARAMETER.PREVIOUS_BLOCK_NAME); --关闭它跳转至其他数据块,直接写数据块name,也可以用系统参数获取数据块名称end if;elsif (wnd = '') then –可以增加自己需要的内容--defer relations--close related windowsnull;end if;4、Form中自定义导出excelDECLAREdb_file NUMBER;url VARCHAR2(500);c_filename VARCHAR2(20);BEGINc_filename := 'test.xls'; --文件名,导出excel格式文件,也可以是txt等多种格式--生成文件db_file := fnd_gfm.file_create(file_name => c_filename,content_type => 'text/tab-separated-values',--文本分隔符,导出数据将按照excel的格式自动分格program_name => 'SQLGL');--用到的application的短名-- 输出块里面的内容,输出语句比如fnd_gfm.file_write_line(db_file, 'Hellow World'||chr(9)||'haha'); -- 输出内容chr(9),tab 符号,用来分割数据db_file := fnd_gfm.file_close(db_file); -- 关闭文件-- 打开文件URLurl := fnd_gfm.construct_download_url(fnd_web_config.gfm_agent, db_file,FALSE); --打开一个页面用来下载文件/* 注意这里要选flase,否则函数会调用系统的环境变量,就不会生成你想要的文件和文件类型,其实拆开fnd_gfm包可以看到*/fnd_utilities.open_url(url);END;5、FORM中限制下限LOV可选数据必须大于上限已选值在LOV的SQL中加where条件,例如::BLOCKNAME.TO_TIEM >= :BLOCKNAME.FORM_TIEM6、FORM中选中上限时,默认下限等于上限值在上限item的触发器WHEN-VALIDATE-ITEM中增加内容,例如::MAIN_B.TO_PERIOD := :MAIN_B.FROM_PERIOD;7、按照固定字符分割字符串取其中某段REGEXP_SUBSTR(’某字符串’,'[^.]+',从第几个字符开始,取截取后的第几段)取科目段很方便SELECT REGEXP_SUBSTR(’01.002.0003.004’,'[^.]+',1,2) FROM DUAL;--'[^.]+'按照.小数点来分割字符串,如果是按照-来分就应该写成'[^-]+'--1表示从第一个字符开始,--2表示取第二段,三个点将字符串分为四段,第二段为002这个方法要求数据库是R12,在11中不能用。

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功能区分原则开发的新功能要求按库存组织区分。

ORACLEERP开发基础之EBS开发基础

ORACLEERP开发基础之EBS开发基础

ORACLEERP开发基础之EBS开发基础第一篇:ORACLE ERP开发基础之EBS开发基础ORACLE ERP开发基础之EBS开发基础Oracle ERPORACLEERP开发基础之前言ORACLE ERP开发之OracleForms基础(一)Forms设置部分ORACLEERP开发基础之OracleForms基础(二)FORMS代码部份ORACLE ERP开发基础之Oracle Report基础ORACLEERP开发基础之Oracle数据库基础开发工具安装Oracle EBS11i 开发工具是developer6i的东西,非常古老。

因为是转手过来的机器,开发工具都是安装好了,所以也没去在意这工具的安装。

今天系统重装了,才知道这工具安装起来也是特烦人的。

先安装FORMS6i与REPORT6i,安装完后一定要打补丁。

否则会出现一大堆莫名的错误。

接着安装discoverer。

安装discoverer时先将注册表备份出来,因为discoverer不能和Forms安装在同一目录。

然后再安装 discoverer的补丁,接着再将注册表恢复回来。

大致这样可以了。

注意顺序一定要不能错了,否则又会出现一堆无聊的错误。

唉!developer6i是98年的工具。

盼着EBS R12应该是用DEVELOPER10g吧。

EBS二次开发包注册2.1 从 Server 中下载 ERP Library(.pll), 存放于本机Server Path : /u01/au/11.5.0/resourceForm文件与Library文件要存放在固定目录例如: Form存放在 d:ErpFormFormLibrary 存放在d:ErpFormLibrary;2.2 在Regedit > HKEY_LOCAL_MACHINE > SOFTWARE > ORACLE > FORMS60_PATH加入client 端存放 Form 及 Library的路径(如图)例如:d:ErpFormLibrary;d:ErpFormForm(建议要加在最前面) 利用TEMPLATE.fmb 模板来开发FormOracle 已经为我们提供了一个Form 的开发模板,(/data/deve/devappl/au/11.5.0/forms/ZHS/TEMPLATE.fmb) 我们的开发实际要基于这个模板,这个模板里面已经存在了我们将会用到的Oracle 标准的对象,我们需要做的,就是这这个模板的基础上面,添加我们自己的对象。

Oracle报表二次开发Reportxml开发技术文档

Oracle报表二次开发Reportxml开发技术文档

Oracle报表二次开发Reportxml开发技术文档XML 报表开发1先根据用户写的需求,在PL/SQL中查出符合用户需求的数据。

例:2.打开oracle report 6i(report builder)选中格式和输入sql语句点下一步标题名自己定义,对话框选列表,再点下一步。

选SQL语句,点下一步。

查询描述那输入在PL/SQL写好的查询语句。

(注意:and (rt.trx_number=:ppno or :ppno is null)参数的传递在PL/SQL中是无效的,但在report builder中允许这样写),然后点连接。

输入用户名,口令和数据库名,点连接测试能不能运行。

点下一步将可用域的数据都导入到显示域中去,点中间的>>就可以一次导过去了。

点下一步再点下一步。

再下一步选无模板。

点下一步。

点完成就好了。

先要在报表触发器的BEFORE REPORT中,点右键选PL/SQL编辑器路径要选对dbms_application_info.set_client_info(147); 这就是池誉的路径。

然后编译一次,完成后退出回到上一步。

点击左边类似红绿灯的小图案。

参数选空既按回车就行了。

然后就可以得出一张表然后保存。

保存后文件格式为RTF格式(注:文件名要大写),将文件上传到服务器us,zhs文件夹上。

3.打开ERP系统的应用开发员,选并发----可执行,可执行名和上面在report build建立的新文件名同名,简称也一样,应用产品选TM Ex tensions ,执行方法选oracle reports,执行文件名和简称同名。

保存后退出。

进入系统应用开发员,选并发----程序程序,简称,应用产品和上面可执行写的一样,格式选XML,样式选A4。

然后点参数序号那SQL写了多少个参数就写多少个参数,值集选100 characters 。

然后保存退出。

进入系统管理员-----安全性------定义,在责任名那做查询你所需要在哪个责任上面挂报表。

Oracle EBS Form 开发 Tips

Oracle EBS Form 开发 Tips

Oracle EBS Form 开发TipsEBSForm开发中经常会遇到一些小问题,以免再次遇到而不记得什么原因,在此记下,如有新的问题,亦在此继续更新...1.带有stacked canvas 的Form,比如content canvas A,stacked canvasB,这两个canvas在WINDOW M上,当光标移动到A的最后一个Item(例如z)的时候,Bcanvas消失了(可以用Tab键移动光标至它,即显示)。

Cause: B和A.z发生的互相遮盖,即有重叠区域。

Solution: 将Item间距离拉大一些。

1-1)有时候还会发现某一个stackedcanvas没有显示出来,在树状结构中把canvas的排列顺序调整一下(最好把item的顺序也调整一下,因其也会有影响),content在前,后面跟stacked A,stacked B。

1-2)一个content canvas(Main),两个stackedcanvas (A&amp;B),发现只显示了content canvas上的item。

Cause: 由于是在测试,B上还没有内容,只选择了view stacked canvasA。

症状是A的内容不显示,只是用TAB键的时候才会把A切换出来。

造成这个的原因是B虽然没有显示,但是也是存在的,且是较大片空白,盖住了A。

--shit...1-3)有时候view--stacked canvas,选中了要显示的stackedcanvas,却不见其显示出来,看下stacked canvas的视图端口高度和宽度是否为0。

2.在Form中使用LOV时,LOV的Record Group 中的语句不要有用'--'Mark掉的东东在里面,如果有的话,'--'后面的所有语句都会被mark掉,因为Record Group的Query 语句会全部被放在一行中。

切记3.Set_item_instance_property() 用来改变一列中的某个的属性,如显示特殊颜色等4.复选框背景色及前景色无法显示成canvas底色、白字。

oracle ebs 开发技巧

oracle ebs 开发技巧

Oracle E-Business Suite(EBS)是一套集成的应用程序,用于支持企业日常的业务运营和管理。

以下是一些常用的Oracle EBS开发技巧:1. 使用标准代码和组件:尽可能使用Oracle提供的标准代码和组件,而不是从头开始编写。

这不仅可以提高代码质量和稳定性,还可以确保与其他Oracle应用程序的兼容性。

2. 定制化开发:如果标准代码和组件不能满足需求,进行定制化开发时,要确保遵循Oracle EBS的最佳实践和规范。

这包括使用标准的Oracle EBS对象、属性和方法。

3. 利用工作流:Oracle EBS支持各种工作流,如审批、任务分配等。

合理利用这些工作流可以提高工作效率,减少手动干预。

4. 优化性能:通过优化数据库性能、减少网络延迟和使用高效的查询语句,可以提高Oracle EBS的性能。

此外,合理配置和应用服务器参数也能有助于提高系统性能。

5. 测试:在部署之前,对修改过的应用程序进行彻底的测试,确保没有引入新的问题。

测试应该覆盖功能、性能和用户界面等方面。

6. 文档:保持完整的开发文档,包括需求分析、设计、实现和测试文档。

这有助于维护和升级应用程序时跟踪代码更改。

7. 安全性:确保应用程序遵循Oracle EBS的安全最佳实践,包括用户认证、访问控制和数据加密等。

8. 持续学习:Oracle EBS是一个不断发展的系统,定期学习新的功能和最佳实践,以及参加Oracle提供的培训课程,可以帮助保持技能更新。

9. 使用工具和插件:Oracle提供了一系列工具和插件,如Oracle SQL Developer和Apex,这些工具可以帮助开发人员更高效地编写、测试和调试代码。

10. 遵循企业架构原则:在开发过程中,遵循企业架构原则,确保应用程序与企业的其他系统集成良好,并满足业务需求。

遵循这些技巧可以帮助开发人员更有效地利用Oracle EBS的功能,提高应用程序的质量和性能。

OracleEBSOAFramework

OracleEBSOAFramework

OracleEBSOAFrameworkOracleEBSOAFramework(一)开发环境搭建关键字:OracleEBSERPOAFrameworkOAF关键字:最近公司开始了一个OracleERP二次开发项目,使用的是EBSR12版本,这个版本由于比较新,从这个版本中可以看到OracleERP二次开发的主要技术有向Web方面发展的趋势,其中主要使用的就是OracleOAFramework应用框架.网上这些资料不好找,我通过查看OAFrameworkGuide整理了一些文档,后面陆续会发布到blog中与大家共享.内容基本上是按我的学习顺序组织的,学到哪里写到哪里,由于是初学OAFramework,而它又与我们通常接触的开源框架差异较大,因此理解上难免出现偏差,有不正确的地方请大家指正.由于系统的限制,不能发过多的插图,文章中的插图没有全部贴上来,这些插图都来自于OAFrameworkGuide.环境塔建按以下几个步骤:1.从MetaLink上下载p5856648_R12_GENERIC.zip2.从你的EBS服务器上下载dbc文件,比如我的dbc位置/u02/prod/inst/apps/PROD_ebs/appl/fnd/12.0.0/secure/PROD.d bc3.启动JDeveloper,从JDeveloper解压目录中找到ToolBox工程,初次打开时会提示代码更新.4.在工程的属性中找到OracleApplications配置好DatabaseConnection.5.在工程的属性中找到OracleApplications->RuntimeConnection页,将DBCFileName设置为从服务器上下载的dbc文件.UserName和Password为登录ebs 环境时使用的用户名和密码.Responsibility中设置好开发所使用的应用简称和职责.这个职责只需要是UserName所具有的职责就可以了.Page基础在浏览器看来,OAFramework页面与其它web页面一样,被渲染为HTML.在中间层中,页面是由内存中层级分布的Javabeans组成——非常像传统的Java客户端UI.每个UI构件,比如按钮,表格,tab,商标图像等,被渲染为页面中对应的构件.浏览器向一个页面发出请求时,Framework读取页面定义的元数据创建webbean结构.OA每个bean与一个UI控制器关联,Framework 调用你编写的代码初始化页面.OA页面处理完成后,FrameworkOA将webbean结构交给UIX框架处理以生成发送给浏览器的HTML.当浏览器发出一个表单提请求时,OAFramework重新创建bean 及其层次结构(只在必要的时候才重新创建,通常这些bean是被缓存的,只在特定的情况下才重新创建),然后调用为pagebean编写的事件处理代码.当页面处理完成后,页面HTML重新生成并发送给浏览器.OAFrameworkMVC架构:模型Model模型包括下层的数据和应用业务逻辑.它也提花了现实世界对象和应用服务间的抽像层.应用模块ApplicationModulesBC4j应用模块本质上是一个容器,它管理和提供对"相关"BC4J模型对象的访问.这里的"相关"指的是同一个任务中的参与者.比如所有的BC4J对象在同一个任务中参与同一个事务——即使对应的用户界面需要用户访问多个页面.应用模块:应用模块是oracle.apps.fnd.framework.server.OAApplicationModuleImpl类的子类.每个OAFramework页都有一个根(root)应用模块,它与最顶层的页面区域(pageregion)关联.根应用模块提供事务环境和连接数据库.如果多个页面参与同一个物理或虚拟事务,它们应该共享相同的根应用模块.如果一个页面功能不依赖于其它东西,它需要拥有自己的应用模块.注意:注意:一个根应用模块可能包含一个或多个嵌套的应用模块,可以嵌套任意多的层次.这种情况下,根应用模块可以访问它包含的子对象的数据和对象,所有子对象共享根应用模块的事务.你可以在创建需要重用的与数据库操作相关的UI区域时使用这个功能.实体对象(实体对象(EntityObjects)和关联对象(AssociationObjects))和关联对象()BC4J实体对象包含了业务规则(校验,动作等)与数据库表中的一行关联.注意:注意:实体也可以基于视图,同义词,快照而定义.OAFramework支持Java和PL/SQL实体.实体对象:多数实体是oracle.aps.fnd.framework.server.OAEntityImpl的子类(PL/SQL继承于特殊版本的OAEntityImpl).表和实体对象一一对象,所有实体应该包含与之关联的表的所有列.实体对象使用映射了它的属性和数据库列,并自动实现了查询,插入,更新,删除等操作.多数情况下,我们只需要添加校验逻辑.实体对象可以用于任何程序(不限于OAFramework).关联对象AssociationObjects用于定义实体间的关系.视图对象(视图对象(ViewObjects)和视图链接(ViewLinks))和视图链接()BC4J视图对象处理数据库查询.查询执行后,视图对象提供了访问它的结果集的功能.结果集包含了一个或多个视图行,视图行与数据库查询的行相对应.视图对象:所有的视图对象都是oracle.apps.fnd.framework.server.OAViewObjectImpl类的子类.视图对象可以配置为使用下面的策略查询数据:它的属性映射到简单的SQL语句的列(通常用于小的只读的视图对象)它的属性映射到实体对象的属性(用于插入,更新和删除实体)一些属性映射到实体对象,一些直接映射到SQL(用于增加实体临时数据,这些数据不能通过实体获得,比如计算值或用于UI显示需要)在OAFramework应用中,将在下面情况下使用视图对象:呈现用于优化用户界面细节的数据.如果用户界面支持实体的插入,更新,删除,你将通过视图对象执行这些操作.为poplists,listsofvalues和其它UI组件创建简单的查询.为业务逻辑创建有效的"校验查询(validationqueries)".比如,在定单处理时使用一个校验视图对象获得最大可以购买的商品数量.可以为视图对象编写代码用于实现复合查询或查询时的数据绑定(以便视图对象知道怎样"查询"自己).视图链接ViewLinks与实体对象类似,也可以为视图对象建立关联,称为视图链接(viewlinks).比如可以在定单头视图对象和定单内容间建立视图链接对象.这可以用于在运行时访问定单头时自动查询定单内容.OADBTransactionOADBTransaction:注意:注意:准备的来说这个图应该要包含实现类oracle.apps.fnd.framework.server.OADBTransactionImpl替代oracle.apps.fnd.framework.OADBTransaction接口.如图所示,OADBTransaction扮演的是模型中的中心角色,因为它与一个根应用模块关联,管理JDBC连接/数据库会话,直接拥有你创建的任何实体(根应用模块拥有的视图对象中的行指向实体对象).可以使用OADBTransaction在模型代码中完成下面的操作:创建一个语句执行PL/SQL函数和存储过程访问应用会话级环境信息(session-levelApplicationcontextinformation),比如:用户名,id,当前责任(resposibility)等.访问一个oracle.apps.fnd.framework.OANLSServices对象,如果你需要page2执行NLS操作,比如转换服务器时间到用户日期/时间等.可以通过根应用模块访问OADBTransaction.视图视图格式化当前模型数据给用户.定义页面在OracleApplications开发时,将使用XML页面定义文件.当产品发布后,OAFramework从数据库获取页面定义.使用JDeveloper定义的页面(pages)由区域(regions)和条目(items)组成.条目是简单的构件,比如按钮,输入域,图像等,它不包含子构件.区域是容器对象它可以包含条目和其它区域.比如区域包含文件头(headers),表格和特别的布局组件(layoutcomponents).定义的每个区域和条目都有style属性,它告诉OAFramework使用哪个webbean对象来描述它.比如,如果你定义区域的style属性为"table",OAFramework将使用oracle.apps.fnd.framework.webui .beans.table.OATableBean.所有页面必须有一个单一的top-levelregion(通常称为"rootregion")它的style为pageLayout.它将使用/doc/be11231430.html,yout.OAPageLayoutBea n.regions和items显示在JDeveloperpagetree中的顺序告诉了Framework将这些对象添加在什么位置.属性集AttributeSets每个region或item通过使用attributesets可以继承一组属性集合.attributesets是一个被命名的属性的集合,可重用于任何UI对象,包括:regions,items和其它属性集.当使用attributesset创建UI时,你可以覆盖所继承的属性.组件重用如果需要在页面使用共同对象,可以简单的从它继承.比如,可以创建一个通用的region.新建region时,将新region的Extends属性设置为通用region 的命名.注意:注意:共享的通用region 在引用它的page中是不可编辑的,属于它的选项目在JDeveloper中将显示为灰色.数据源绑定对于需要与数据库交互的bean,你需要指定数据源,将它绑定到ViewInstanceName,并关联好ViewAttributeName.这个绑定是至关重要的,因为OAFramework使用它获取数据,并将用户输入的数据写入下面的视图对象.ViewInstanceName指向当前上下文环境中包含应用模块中的视图对象(所有视图对象"生活"于一个应用模块中,在包含它的容器对象中有一个实例变量名).比如,如果SuppliersVO视图对象,在页面的根应用模块中有一个实例变量"MySupVO".ViewAttributeName指向视图对象中映射到数据库列的属性.定义菜单定义页面流个性化页面控制器控制器响应用户动作控制应用流转.控制器可以与视图中的region级的对象关联(任何实现oracle.apps.fnd.framework.webui.beans.OAWebBeanContainer 的OAFrameworkwebbean都可以与控制器关联).控制器是oracle.apps.fnd.framework.webui.OAControllerImpl的子类.控制器代码的行为:生成/初始化UI中途截取或处理用户事件,比如按钮按下请求处理当浏览器向OA.jsp请求一个页面时:1.oracle.apps.fnd.framework.webui.OAPageBean(OAFramew ork主页面处理类)根据请求的页面名称检查需要哪个根应用模块,并从应用模块池(applicationmodulepool)中取出.这个应用模块将为页面从JDBC连接池中获取连接和事务上下文.2.用户会话校验;如果无效,将显示登录页面(这里是简化的说法,具体细节在Developer'sGuid 中有说明).3.如果用户有效,OAPageBean根据请求参数处理HTTPPOST或GET.处理GET请求当浏览器发起GET请求一个page时(或你手工forward时),OAFramework使用描述的UI定义构建webbean层级结构:page31.OAPageBean调用页面的top-levelpageLayoutbean的processRequest()方法,然后进入webbean层级结构中继续递归调用来初始化webbeans(包括任何相关的模型组件).1.每个webbean可以有自己的控制器,如果有就调用控制器的processRequest(OAPageContextpageContext,OAWebBeanwebBean)方法.这个方法可以用于构件或修改页面布局,设置webbean属性和执行任何手工的数据初始化工作(比如,打开页面时自动执行查询).2.一些复杂的webbeans(比如:oracle.apps.fnd.framework.webui.beans.table.OATableBean和oracle.apps.fnd.framework./doc/be11231430.html,yout.OAPageLayoutBea n)通过调用它们的prepareForRendering()(这个方法在JavaDoc中的说明)方法执行post-controller处理.3.每个webbean调用它的子对象的processRequest()方法.2.oracle.apps.fnd.framework.webui.OAPageBean将webbean结构传递给UIX渲染并发送给浏览器处理POST请求当浏览器向服务器页面发出POST请求时:1.OAPageBean检查webbean层级结构是否在内存中.如果没有它就像在GET请求中一样创建一个webbean层级结构.2.OAPageBean调用整个层级结构中的webbean的processFormData(OAPageContextpageContext,OAWebBeanweb Bean)方法,并将form中的数据写入模型(它在pageLayoutregion上调用processFormData(),然后在它的子对象上递归的调用processFormData()方法).将form数据写入模型时将自动调用属性和实体级别(attributeandentity-levelvalidations)的校验,如果抛出了任何校验异常,处理将停止,错误信息将显示给用户.3.如果在执行processFormData()期间没有异常抛出,OAPageBean将使用与上面相同的方法在层级结构中的所有webbean上调用processFormRequest(OAPageContextpageContext,OAWebBean webBean)方法.这里给了你的控制器响应用户动作的机会.4.如果没有JSPforward或redirect发出,或在执行processFormRequest()方法时没有异常被抛出.则页面刷新OAPageContext当OAFramework收到一个OA.jsp请求时,OAPageBean创建一个oracle.apps.fnd.framework.webui.OAPageContext,这个类仅在页面处理过程中存在.上面描述的三个方法(processRequest(),processFormData(),processFormRequest())都有一个OAPageContext参数,任何将要编写的控制器代码都使用了这个至关重要的类.如上图所描述的,OAPageContext有指向request和根应用模块的引用.根据这个关系,OAPageContext被传递到每个控制器的响应处理方法中,你将看到如何在下面的通用任务中使用OAPageContext:访问请求参数可以使用getParameter(Stringname)方法读取请求参数.技巧:技巧:页面上的每个webbean(buttons,fields等等)传递给getParameter()的是你定义在页面上的唯一ID属性.比如,使用下面的代码可以得到用户是否按下了名为"GoButton"的按钮:processFormRequest(OAPageContextpageContext,OAWebBe anwebBean){if(pageContext.getParameter("GoButton")!=null){//Theuser pressedthe"Go"button,dosomething……}}访问根应用模块OAPageContext缓存了根应用模块的引用,它可以访问视图对象和事务.如果需要访问应用模块,可以通过OAPageContext:processFormRequest(OAPageContextpageCont ext,OAWebBeanwebBean){OAApplicationModuleam=(OAApplicationModule)pageContext.getRoo tApplicationModule();}发出导航指令使用方法告诉OAFramework 执行JSPforward或客户端重定向.比如: processFormRequest(OAPageContextpageContext,OAWebBean webBean){if(pageContext.getParameter("CreateButton")!=null){//Theuserpressedthe"CreateSupplier"button,nowperformaJSPforwardto//the"CreateSupplier"page.pageContext.setForwardURL("OA.jsp?page=/oracle/apps/d em/employee/webui/EmpDetailsPG",null,OAWebBeanConstants.KEEP_MENU_C ONTEXT,null,null,true,//RetainAMOA WebBeanConstants.ADD_BREAD_CRUMB_YES,//Showbreadcrum bs OAWebBeanConstants.IGNORE_MESSAGES);}}访问应用上下文信息与模型中的page4OADBTransaction类似,OAPageContext可以访问servletsession级的OracleApplication上下文信息,如:用户名,ID,当前职责等.比如,下面的片段用于获取用户名:processRequest(OAPageContextpageContext,OAWebBeanw ebBean){StringuserName=pageContext.getUserName();}WebBean架构所有OAFrameworkwebbeans都与UIXframework中的bean 对应.比如,OATableBean继承自oracle.cabo.ui.beans.table.TableBean("cabo"是UIXframework早期的名字,包定义仍然使用了旧名).每个OAFrameworkwebbean都实现了一组接口,这些接口实现了OAFramework添加到基础的UIXbeans上的行为.oracle.apps.fnd.framework.webui.beans.OAWebBean定义了所有webbeans的通用行为(比如,其中在这里定义的关键的行为有processRequest,processFormData,processFormRequest方法,一些beans自己实现了这些方法).oracle.apps.fnd.framework.webui.OAWebBeanConstants用于视图和控制器的常量集合.oracle.apps.fnd.framework.webui.beans.OAWebBeanData定义通用的个性化定义和数据源管理行为oracle.apps.fnd.framework.webui.beans.OAWebBeanContainer 定义所有可以作为其它webbeans容器的webbeans的特性.比如,所有layoutwebbeans都实现了这个接口.只有实现了这个接口的beans 才可以与控制器关联.OAWebBean定义了bean在OAFramework上下文环境中的内在特性.比如,OATableBean实现的oracle.apps.fnd.framework.webui.beans.OAWebBeanTable接口.webbean例子(OAT ableBean):内部Bean结构每个webbean自己包含了下列的信息:_indexedChildren子webbeans_namedChildren子webbeans 特殊行为的UIX标记._attributeswebbean的特性(属性描述),下表的图表描述描述webbean使用Dictionary保存键值对属性:数据绑定值与上面的图表描述的情况不同,OAFrameworkwebbean的attributes实际上是用数据绑定值实现的,这意味着它是由下层的数据源提供的,在组件被渲染时才被获取.后面将看到如何定义用户自定义绑定值.渲染在页面渲染时,UIXframework处理webbean层级对象产生页面的HTML代码.对于每个webbean属性,UIX调用它的getAttributeValue()方法.并传递给它一个渲染上下文(renderingcontext),renderingcontext是UIX决定绑定值的全部基础.对于给出的属性,比如,renderingcontext知道下层的视图对象实例,视图属性和当前的行.数据绑定使用rendering context通过查询它的数据源所提供的返回值传递给UIX以产正确的HTML. OAFrameworkJavadoc手册每个OAFramework包的描述:oracle.apps.fnd.framework包含的类和接口可以安全的从模型(server)和用户界面控制器或视图(client)访问.比如,需要在页面中访问根应用模块,应该使用oracle.apps.fnd.framework.OAApplicationModule接口(不应该在客户端访问它的实现).这个包也包括:所有OAFramework异常OANLSServices类用于执行国际化操作oracle.apps.fnd.framework.server包含了OAFrameworkModel-View-Controller中用于实现model的类和接口.这些类规定用于任何客户端用户界面(不仅仅是OAFrameworkHTMLpages)[译注:根据后面的意思,这里似乎应该是不能用于!],并且不允许被任何oracle.apps.fnd.framework.webui包和其子包中的类和接口引用,也不允许应用中的webui包和其子包引用.当建造OAFramework应用模型时,应该使用这个包中的类替代BC4J中继承的类.警告:永远不要从控制器或视图代码中调用这个包中的类.警告: oracle.app.fnd.framework.webui包括了构造OAFrameworkHTML用户界面的核心类.一些这个包中最常用的类和接口: OAControllerOAPageContext任何下面所描述的beans子包中的类警告:警告:永远不要从模型代码中调用这个包中的类.oracle.app.fnd.framework.webui.beans包含用于用户界面组件的webbean.你将在编写用户界面控制器时编程的方式处理这些webbeans.这个包和其子包中的类与UIX组件对应,它们继承关系如下.当构造OAFramework应用页面时,应该使用OAFramework类,除非你要使用一个已经介绍给UIX的新的功能,但目前这还不被支持.注意:注意:OAFramework类是在JDeveloper中描述的MDS页面中使用. UIXPackageoracle.cable.ui.beansoracle.cable.ui.beans.formoracl e.c/doc/be11231430.html,youtoracle.cabo.ui. beans.messageoracle.cabo.ui.beans.navoracle.cabo.ui.beans.tableOAPa ckageoracle.apps.fnd.framework.webui.beansoracle.apps.fnd.framework. webui.beans.formoracle.apps.fnd.framework.webui.beans.includeoracle.apps.f nd.framework.we/doc/be11231430.html,youtoracle.apps.fnd .framework.webui.beans.messageoracle.apps.fnd.framework.webui.beans.navoracle.apps.fnd.framework. webui.beans.table警告:警告:永远不要在模型代码中调用这些类.oracle.apps.fnd.framework.webui.beans.form包含了HTMLform组件相关的webbean类.包括了提交按钮和各种数据入口/特定的控件(checkbox,radio,group,shuttle,textinputfield等).可以在编写用户界面控制器时使用这些类,需要用编程的方式处理webbeans.与这个包中其它的webbeans不同的是oracle.apps.fnd.framework.webui.beans.message包(messagewebbeans可以显示错误,信息,带警告图标的说明信息) .当在JDeveloper中创建页面时,OAFramework为同一个包中的这些组件自动显示消息.应该只在下面的情况下使用这个包中的这个类: 类没有messagebean供选择.(比如,这个包中唯一的类OASubmitButtonBean)不能使用messagebean替换的时候.警告:警告:永远不要在模型代码中调用这些类.oracle.apps.fnd.framework.webui.bean.include包含了用于将外部资源(servlet,JSP,HTML)中包含到用户界面的webbean类.将在编写用户界面控制器时编程的方式处理这些webbeans.警告:永远不要在模型代码中调用这些类.警告:/doc/be11231430.html,yout包含了OAFramework程序中页面布局的webbean类,包括特殊的layout件,比如,hide/show,contentcontainer,bulletedlists,headers,standardizedtemplates等等.将在编写用户界面控制器时编程的方式处理这些webbeans.警告:警告:永远不要在模型代码中调用这些类.oracle.apps.fnd.framework.webui.beans.message包含了HTMlform数据相关组件具有显示相关错误,警告信息或带信息图标的说明性消息的webbean类(比如,如果用户在文本框中输入了错误的值,下次渲染这个页面时,这个文本框前将显示一个表示出错的图标).将在编写用户界面控制器时编程的方式处理这些webbeans.这个包中的许多webbean也包含在oracle.apps.fnd.framework.webui.bean.form包中,没有显示额外的消息文本和图标文本的能力.当在JDeveloper中创建页面时,OAFramework自动将messagebean添加这两个包中的组件.应该只在不能使用包含messagebean的页面上使用不带消息显示能力的类.警告:警告:永远不要在模型代码中调用这些类.oracle.apps.fnd.framework.webui.bean.nav包含了用户界面导航的组件(links,trees,menuelements,quicklinks,breadcrumbs等).将在编写用户界面控制器时编程的方式处理这些webbeans.警告:警告:永远不要在模型代码中调用这些类.oracle.apps.fnd.framework.webui.beans.table包含显示table和HGrid组件的webbean类.将在编写用户界面控制器时编程的方式处理这些webbeans.警告:警告:永远不要在模型代码中调用这些类./doc/be11231430.html,f包含用于控制HTML渲染特性,包括页面观感和上下文细节(比如,内容能为打印效果而优化显示在浏览器中或用于e-mail)的工具.警告:警告:永远不要在模型代码中调用这些类.bean_arch.gif描述:文件大小:看过的:bean_arch.gif14KB文件被下载或查看5次概述这个文档用于描述OAFramework状态管理架构,包括缓存应用系统用户数据和从页面间值传递的机制.结构预览主要状态管理组:根应用模块(数据库会话和事务状态)根应用模块(数据库会话和事务状态)如OAFramework页面解析一文中描述的,每个OAFramework页面与一个根应用模块关联,根应用模块提供事务环境和JDBC数据库连接.注意:注意:OAFramework中,一个数据库会话与一个JDBC连接关联.根应用模块是任何OAFramework模块的中枢,因为核心应用数据(存储在BC4J视图,实体对象,等等)和页面webbean层级结构自动缓存于根应用模块的oracle.apps.fnd.framework.OADBTransaction对象中.警告:可以查看Supportingthe警告:使用浏览器后退按钮将导致应用模块状态丢失.BrowserBackButton一文.任何存储于事务中的数据可以被任何共享同一个根应用模块实例的页面访问(在页面间导航时使用下面描述的方式保留应用模块).OAFramework提供了方法用于从事务中存储,获取和移除值.可以在控制器(client)和模型(server)代码中访问单一的事务对象,这些工具在oracle.apps.fnd.framework.webui.OAPageContext(controller 中)和OADBTransaction(model中)类可以访问.根应用模块保留缺省情况下,当用户从一个页面导航到另一个页面(比如使用GET请求或JSPforward)时,OAFramework渲染新的页面,与前一个页面关联的应用模块实例被"释放",一个新的实例请求被发送到应用模块池.导航到新的页面时,缺省情况下的原页面的根应用模块将被释放:注意:注意: OAFramework在表单提交(POST)期间不会释放应用模块,除非你显式的在控制器中释放应用模块.比如,如果用户对表格中的数据排序或在表格数据中导航——两个动作隐式的提交了页面表单——页面的根应用模块实例被自动保留.在页面间保留应用模块在多个页面处理同一个任务时相关的页面需要参与同一个虚拟事务.这时,不同页面需要关联到同一个根应用模块实例.相关页面共同同一个根应用模块(和事务):为达到这个目的,必须执行下面的操作:申明各个页面关联同一个类型的根应用模块.设置应用模块的保留标记.通过指定URL参数retainAM=y设置模块保留标记.对于GET请求.当新的页面被渲染时(注意,OAFramework对于POST请求将一直保留应用模块而不管retainAM参数的值).如果设置为"Y",前一个页面的应用模块实例将被保留.如果设置为"N"(或不指定,缺省为"N"),OAFramework将释放所有应用模块——包括到达这点前任何可能显式申明为保留的.也可以在调用JSPforwardOAPageContext中的方法时设置这个参数.警告:警告:不能简单的让不同页面关联相同的根应用模块.如果忘记设置retainAM标记,每个页面仍将使用不同的应用模块实例和事务,即使这些页面关联的是同一个类型的应用模块.注意:技术上来说,这依赖于应用模块池的状态.PageB可能获取到与PageA注意:使用的同一个物理应用模块.但是,对象的状态将完全被重置,就像被新创建的一样.从这个观点来看,可以看作一个"新的实例".两个页面引用相page7同类型的应用模块,但没有设置RetainAM标记:同样,retainAM标记设置为"Y"——但没有将页面的根应用模块设置为相同将的类型.这将产生不同的应用模块实例(每个页面一个),各自有自己的事务.有条件的保留和释放应用模块有些情况下,你需要通过一个条件来决定是否保留或释放应用模块.这时,你可以让应用模块实现oracle.apps.fnd.framework.webui.OAReleaseListener接口,详细描述见Javadoc.警告:警告:OracleApplication开发人员应该在使用这个接口时通知OAFramework开发团队.不正确的使用这个接口将导致内存泄漏.OAFramework团队正在跟踪这个问题.显式的释放应用模块可以显式的通过代码在OAFramework处理之前释放根应用模块.可以在页面控制器中调用OAPageContext.releaseRootApplicationModule()方法,OAFramework将在页面渲染完成后尽快释放这个页面的根应用模块,而不是等到下次应用模块请求时.根应用模块保留的使用场景根应用模块保留的使用场景下列情况下推荐保留/释放应用模块.情况推荐操作无关的当导航到两个不相关的页面时不保留应用模块.比如一连串的不相关的管理任分离的务,它们是独立运行的(即使这们与同一个菜单项目关联),保留应用模块是不任务必要的.多页面当在相关的页面间导航时,这些页面合作完成同一个完整的任务处于单个事务中流时,保留应用模块相关页当在关联同一个业务对象(即使页面为用户设置了不同的提交点)的不同任务间面(虚拟的相关页面间导航时,如果UI关联得比较紧密则保留应用模块.比如,一个模事务)块可以查询,查看, 更新,删除,打印写单则应该使应用模块保留多页面有一个多页面流使用了分支事务,比如,在创建定单时创建供应商时,在主流程流中使中保留应用模块,而在创建供应商的页面使用用分支OAPageContext.releaseRootApplicationModule方法释放模块.事务注意:注意:在介绍OAFramework的钝化和JDBC池化/回收之前,鼓励开发人员经常的释放应用模块,因为保留JDBC连接是一个昂贵的开销.在了解钝化功能后这不再是个问题.ServletSession可以在servletsession中缓存小型的,可序列化的对象(OAFramework限定为字符串,数字和日期类型)注意:注意:使用session缓存那些需要在多个页面设置或访问的简单值,这些页面可以有不同的根应用模块.(事务缓存不在这个范围内).由于session变量失效时间较长,且没有好的事件可以释放内存,因此应该把session作为最后一种缓存选择.技巧:技巧:隐藏域通常不被推荐使用.因此,OAFramework当前的菜单实现(一些菜单发送GET请求。

EBS二次开发学习-查询功能

EBS二次开发学习-查询功能

EBS二次开发学习--编写查询功能查询功能实现的方式有以下三种1、行-值列表模式2、弹出查询窗口模式3、主画布简易模式如果你需要在进入FORM时触发查询功能,则在WHEN–NEW–FORM–INSTANCE触发器结尾处调用:EXECUTE_TRIGGER(’QUERY_FIND’);行-值列表模式实现方法实现Row–LOV, 建立一个选择键值的LOV的form 参数,然后在执行查询前复制该值到结果集数据块的键值字段1)建立键值的FORM参数,例:对于DEPT块,建立参数DEPTNO_QF,用来保存lov选择来的键值2)创建LOV, 返回键值到建立的参数,例如把DEPTNO返回到DEPTNO_QF3)创建PRE-QUERY触发器, 含以下代码:IF :parameter.G_query_find = ’TRUE’ THEN<Primary Key> := :parameter.<Your parameter>;:parameter.G_query_find := ’FALSE’;END IF;注:G_query_find参数是TEMPLATE模板中带有的4)创建(用户自定义名称)结果集数据块QUERY_FIND触发器, 含以下代码:APP_FIND.QUERY_FIND(’<Your LOV Name>’);查询窗口模式实现方法举例子:基于EMP表的数据块, 键值empNO, 做一个查询窗口按empno和Hiredate的范围查询;(有关在查询窗口使用Flexfields则需要特殊方法处理。

参见14-65页.)1、复制QUERY_FIND 对象组从APPSTAND form复制QUERY_FIND 对象组到你的FORM中,它在你的FORM中建立包括一个窗口,一个块,一个画布;复制后把对象组删除。

2、重命名块、画布及窗口,设置块的queryable属性为No;例如:改名块: EMP_QF,画布:EMP_QF_CANVAS, 窗口:EMP_QF_WINDOW;3、修改[New]按钮触发器修改查询窗口块中[NEW]按钮的WHEN–BUTTON–PRESSED触发器,该钮按你的需要而定,如果只是查询不增加修改数据记录,可以不要该钮。

Oracle EBS FORM 阶段总结--李桂钦

Oracle EBS FORM  阶段总结--李桂钦
1.1.2. 文档感谢人员 在编写文档的过程中,由于本人是初次接触Oracle EBS 系统开发,对Oracle EBS
系统开发以及Oracle EBS 系统了解不够,另外,网上可查询的中文资料十分有限,幸 得许多资深的技术人员帮助,或耐心细心地答疑解惑,或不辞辛苦地循循善诱,着实 获益匪浅,特此感谢。
2.
基础知识................................................................................................................ 3
2.1. FORM 基础知识 ............................................................................................ 3 oracle EBS Form 界面 ....................................................................................................... 3 oracle EBS Form 运行原理................................................................................................ 3 oracle EBS Form 客户端浏览器工作模式......................................................................... 3 oracle EBS Form 源程序的组成元素 ................................................................................ 4 oracle EBS Form 源程序的组成元素层次关系 ................................................................. 5 oracle EBS Form 画布 ....................................................................................................... 6 oracle EBS Form 属性 ....................................................................................................... 7 oracle EBS Form 触发器 .................................................................................................. 8 oracle EBS Form 中内置的变量元素 ................................................................................ 9 oracle EBS Form 中内置的函数 ........................................................................................ 9 oracle EBS Form 中的导航.............................................................................................. 10 oracle EBS Form 中的事务.............................................................................................. 11 oracle EBS Form 多个Form开发..................................................................................... 12 oracle EBS Form 中DML编程......................................................................................... 13

EBS Form开发总结

EBS Form开发总结

Oracle ERPE-BUSINESS SUITE Form开发总结文档作者: 何云创建日期:2012-02-12更新日期:2015-02-10文档编码:MD070当前版本:1.1审批者:用户项目经理:信息部项目经理:外包方项目经理:文档控制1.1.更新记录1.2.审阅记录1.3.分发人员目录文档控制 ................................................................................................................................... i i1.1.更新记录 .................................................................................................................. i i1.2.审阅记录 .................................................................................................................. i i1.3.分发人员 .................................................................................................................. i i1.前言 (4)2.基本步骤 (5)2.1 环境设置 (5)2.2 新建fmb (5)2.3 添加对象 (5)2.4 建立主体对象 (6)2.5 初始化参数 (7)2.6 标准代码 (9)2.7 ITEM调整 (11)2.8 界面调整 (12)2.9 实现增删改锁 (13)2.10 手电筒查询 (18)2.11 上传编译 (19)3.常用功能 (20)3.1 TAB页Folder (20)3.2 弹性域 (23)3.3 LOV (25)3.4 Form个性化 (26)3.5 弹出窗口居中 (26)3.6 警告 (26)3.7 Onetime_where与Default_where (27)3.8 启动功能 (28)3.9 退出form (28)3.10 工具栏 (28)3.11 保存点及回滚 (29)4.其他功能 (30)4.1 消息等级 (30)4.2 颜色属性 (30)4.3 CASE_INSENSITIVE_QUERY (30)4.4 Clear_block (30)4.5 禁用历史记录 (30)5.附件 (32)5.1 触发器执行顺序 (32)6.参考资料 (33)1.前言在学习form的过程中,平时有在写一些关于form开发的笔记,不过内容都比较零散,没有归纳成一篇较为全面的总结文档。

Oracle+EBS+Forms开发指南(中级)

Oracle+EBS+Forms开发指南(中级)

Contents1.Folder、JTF Grid .................................................................... 错误!未定义书签。

1.1.Folder开发步骤(从头开始) (2)1.2.Folder问题 (7)1.3.Folder开发步骤(基于模版) (7)1.4.JTF Grid开发步骤 (10)2.多语言开发 (14)2.1.国际化支持 (14)2.2.Form自身的多语言版本 (14)2.3.数据多语言开发步骤 (14)2.4.EBS启用新语言时的考虑 (22)3.附件开发 (24)3.1.关于附件 (24)3.2.标准附件设置 (24)4.Javabean (29)4.1.Form与Java (29)4.2.例子:Hello World (31)4.3.例子:执行PC本地命令 (34)4.4.例子:读取PC文本文件 (37)4.5.例子:通用导入 (39)5.Form个性化 (41)5.1.Form个性化概述 (41)5.2.例子:修改字段Prompt (42)5.3.例子:有条件显示消息 (43)5.4.例子:调用数据库Package (44)5.5.例子:添加菜单 (44)5.6.例子:打开功能 (45)5.7.例子:执行查询 (46)5.8.例子:其他应用 (47)5.9.例子:Instance间迁移 (48)6.技巧、常用代码 (49)6.1.Form中的变量 (49)6.2.初始值、格式掩码 (49)6.3.消息处理 (50)6.4.Special菜单 (50)6.5.库存组织访问 (50)6.6.MFG_ORGANIZATION_ID相关问题 (51)6.7.常用内置过程 (52)1.1.Folder开发步骤(从头开始)本节标题说明:标准指做Folder都要做而且是一样的步骤,可以考虑做个模版了;普通指和做普通Form一样;特殊指做Folder都要做但需要根据实际内容作修改。

Oracle_Ebs_开发总结

Oracle_Ebs_开发总结

技术心得一、SQL查询:1、”列出同部门中工资高于1000的员工数量超过2人的部门,显示部门名字、地区名称”.查询语句如下:selectdistinct dept.department_name,loc.cityfrom employeesemp,departmentsdept,locationslocwhere emp.department_id=dept.department_idandfromwhereand)子,fromwhereandandhavingcount(*)>2对于groupby来说每一条emp.department_id必对应唯一dept.department_id、dept.department_name因此不论groupbydepartment_id还是groupbydepartment_name,loc.city达到的效果是一样的2、用一条语句查询出scott.emp表中每个部门工资前三位的数据:selectdepartment_id,max(salary)max_salary,max(decode(rank,2,salary,salary))mid_s alary,min(salary)min_salaryfrom(selectdepartment_id,salary,rankfrom(selectemp.department_id,emp.employee_id,emp.salary,row_number()over(partitionby emp.department_idorderbyemp.salary)asrankfromemployeesemp)EwhereE.rank<=3)groupbydepartment_idSQL%ISOPEN FALSE FALSE FALSE FALSESQL%FOUND TRUE有结果成功成功-20,999之间的参数.可在程序块中自定义异常,并捕捉在其他函数或存储过程中RAISE_APPLICATION_ERROR抛出的异常,与Oracle交互.4、PRAGMAAUTONOMOUS_TRANSACTIONORACLE8i可以支持事务处理中的事务处理的概念.这种子事务处理可以完成它自己的工作,独(2)不使用自动事务处理:CREATEORREPLACEPROCEDURE log_message(p_message varchar2)ASBEGININSERTINTO logtable VALUES(user,sysdate,p_message);COMMIT;END log_message;(select*fromtemp_table查询结果有数据)流程:1、以2、3、4、实例:1为’GL’)件:and'yyy y-mm-ddHH24:MI:SS'))and(to_date(p_End_Date,'yyyy-mm-ddHH24:MI:SS'));!!!注意’HH24:MI:SS’必不可少,因为请求程序要求的数据一定是带时分秒的数据否则解析报表时会报错.如下所示:**Starts**23-08-201111:53:42**Ends**23-08-201111:53:42ORA-01830:日期格式图片在转换整个输入字符串之前结束2、根据借方数量与借方金额求出借方单价同理求贷方单价,每发生一笔,统计当前数量与当前金额,然后得出当前数量当前总价与当前单价其中借方与贷方金额的获取,如:select(case cila.inv_typewhen'IN'then(case cila.type_codewhen'GL'thenACCOUNTED_DRwhen'AP'thenAP_ACCOUNTEDend)end3四、1即是多OUview_all_orgnization_flagFROMper_security_profilesWHEREsecurity_profile_id=to_number(fnd_profile.value(‘XLA_MO_SECURITY_PROFILE_LEVEL’));可以通过以下语句获取当前安全性配置文件和当前用户在当前职责下可访问的OU nazation_id,organization_id,nameFROMper_orgnazation_listper,Hr_operating_unitshrWHEREper.secutity_profile_id=to_number(fnd_profile.VALUE(‘XLA_MO_SECURITY_PROFILE_LEVEL’))nization_id=nization_idable_flagisnull;如我在CUX_INV_MATERIAL_ALL表中建立的Org_Id字段,可在策略函数中通过此字段产生Where 子句,筛选可操作客户化职责下物料维护菜单的OU.当用户进入YD_GL_ALL_总账超级用户职责时将初始化用户的上下文,通过MO_GLOBAL的一系列方法设置CONTEXT的值(包括访问模式和当前Org_Id)。

常用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);。

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 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。

ebs form开发总结

ebs form开发总结

1.前言这是在深航2期项目期间学习form的过程中总结出来的一些东西,但内容比较零散,不包含form开发的完整过程。

1.开发规范1.1 命名规范文件命名:一般将源码放在….\SVN\05.客户化开发\05.源代码\ 目录下,文件的格式参考该目录下的代码包模板:开发编号-开发项名称文件夹,该文件夹命名如:EAM010_资产报废计划EAM代表模块,010和资产报废计划是由开发文档给出,不需要自己取编号。

路径:05.源代码\代码包模板:开发编号-开发项名称\SZAXXXXX\code 中,SZAXXXXX 也有自己的命名规范,一般取表名称的前6个字符,即应用名+模块名,在取表名后的5-6字符作为后缀,例如:表名是SZA_EAM_RETIRE_PLAN ,则取SZAEAMREPLAN,该文件夹名称与form名称保持一致。

SVN模板目录:Sql :注册弹性域的plsql代码块,名称与表名一致Table :建表脚本View :建视图脚本Pck : 基于视图的增删改form,在hss_public_util程序包中,Table_Handle_Pkg这个过程生成的代码要在数据库中执行,并且代码保存在package文件夹下,并以.pck保存。

Form_Table_Handle这个过程是要放在form中Form规范1.Form的命名:例如表名SZA_INV_TST_DOC_TYPES,选取前6个字符SZAINV,加上后面字符串的5-6个字符,SZAINVTSTDOCTP.2. 块名命名:SZA_INV_TST_DOC_TYPES选表中间字段TST_DOC3.窗口查询的块QUERY_FIND 的名称:块名+QF,对应的FIX和STK画布名字也要保持一致,但是QUERY_FIND触发器名称不能修改。

4.在ebs上注册表单,功能,弹性域时,form表单,功能和弹性域名称:SZA INV:+中文解释,例如:SZA INV:单据类型定义。

Oracle_EBS_Form_触发器学习大全

Oracle_EBS_Form_触发器学习大全

Oracle EBS Form Trigger学习大全打开,关闭,创建,更新记录的trigger次序PRE-……在进入一个form,或是导航到一个新的block时触发,PRE-……系列的触发器一般是在WHEN-NEW-……-INSTANCE系列之前,它们如果失败了的话,就不能成功导航到下一个对象了,只能留在当前的位置。

在这些触发器里可以设置一些判断条件来限制是否可以导航到新的位置。

WHEN-NEW-……-INSTANCE这一类的trigger都是当鼠标光标每次落到一个新的block,record,item上时触发的,而且就算失败了,也不会发生什么错误。

但是when-new-form-instance,只有当form 启动时,光标导航到第一个导航块的第一个导航item时触发,如果一个应用有多个form,当光标在各个form之间转换时,并不会触发它。

POST-TEXT-ITEM和WHEN-VALIDATE-ITEMPost-text-item的触发点:当输入的光标从一个Text-Item 转到其它item,可以用它来改变item的值,而when-Validate-item虽然也是在离开前触发,但是作用不同,Post-Text-Item本身是没有验证的,when-Validate-item可以用来补充一些验证(除了form本身的验证),但是当form验证成功以后,会把item标志为…valid‟,而不会再去验证了,如果这时我们再去修改它的值,那么就有可能会把无效的值导入到数据库。

在创建和更新一条记录时,先触发when-Validate-item,再触发Post-Text-Item,然后是when-Validate-record。

POST-……系列的都是离开当前的block,record,item时触发的WHEN-WINDOW-ACTIVATED做原材料属性修改平台时,第一次使用这个触发器,用来从另一个window返回时,刷新当前window,代码写在了这个触发器里。

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

一、开始开发标准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里面添加文本项等查询内容。

3.在目的数据块添加PRE-QUERY(BLOCK LEVEL),添加代码如下:IF :parameter.G_query_find = 'TRUE' THENAPP_FIND.QUERY_RANGE(:QUERY_FIND.CDATE_FROM,:QUERY_FIND.CDATE_TO,'MAIN.CREATION_DATE');APP_FIND.QUERY_RANGE(:QUERY_FIND.ITEM_FROM,:QUERY_FIND.ITEM_TO,'MAIN.SEGMENT1');APP_FIND.QUERY_RANGE(:QUERY_FIND.DESC_FROM,:QUERY_FIND.DESC_TO,'MAIN.DESCRIPTION');:parameter.G_query_find := 'FALSE';END IF;三、FOLDER 制作1.添加附加程序库:APPFLDR.pll.2.把APPSTAND 的STANDARD FOLDER 对象组拉到开发的FORM上,选择子类。

3.在目的画布上画一个堆叠画布,之类信息选择CANV AS_STACKED。

4.创建一个数据块,作为创建数据块的FOLDER使用,子类信息选择BLOCK。

5.把需要放到FOLDER的数据项放到堆叠画布上,把这些数据项的提示全部去掉,然后给每一个数据项创建一个提示,提示用显示项做(基于新建数据块),子类信息选择FOLDER_PROMPT_MULTIROW,显示项名称和对应的数据项名称必须相同。

6.创建三个按钮(基于新建数据块),名称分别是ORDER_BY1,ORDER_BY2,ORDER_BY3,之类信息选择之类信息选择FOLDER_ORDER_BY,把这三个按钮放在堆叠画布上(放在看不见的区域)。

7.在原来画布上创建一个FOLDER_OPEN按钮(基于新建数据块),之类信息选择FOLDER_OPEN。

8.在原来画布上创建一个FOLDER_TITLE显示项(基于新建数据块),之类信息选择DYNAMIC_TITLE。

9.在新建的数据块上创建一个FOLDER_DUMMY,之类信息选择FOLDER_DUMMY。

10.FOLDER_ACTION(form level)触发器的代码修改,修改如下:--message('You must modify the FOLDER_ACTION trigger in your form!');app_folder.event(:global.folder_action);11.修改WHEN-NEW-FORM-INSTANCE代码,修改如下:app_folder.define_folder_blockapp_folder.event('INSTANTIATE');12.把APPSTAND的SAMPLE_FOLDER数据块的TRIGGER全部靠到原来数据库上。

(添加块的trigger。

新增Pre-Query、Post-Query、Key-Prev-Item、Key-Next-Item、Key-ExeQry 、Key-EntQry、When-New-Record-Instance、Post-Block、Pre-Block,When-New-Block-Instance, Key-Prvrec,Key-Nxtrec, Key-Clrblk, Key-Clrrec, Query_Find以上Trigger均直接引用标准Standard Trigger ,如:app_folder.event('KEY-PREV-ITEM');)四、DA TE的使用1.ITEM的LOV属性选择ENABLE_LAMP_LIST2.LOV for Validation属性选择false3.增加Item级trigger:key_listvaluecalendar.show;4.并注意时间的长度格式五、FND_ORG.CHOOSE_ORG的使用注:FND_ORG.CHOOSE_ORG 需要创建的参数:CHART_OF_ACCOUNTS_ID(Number)ORG_NAME(Char)ORG_CODE(Char)ORG_ID(Number)六、说明性弹性域使用1.注册table以及column利用ad_dd packagebeginad_dd.register_table(p_appl_short_name=>'CUS' ,p_tab_name => 'actuant_task_lists_all',p_tab_type => 'T' );end;beginad_dd.register_column(p_appl_short_name =>'CUS' ,p_tab_name => 'actuant_task_lists_all',p_col_name =>'ATTRIBUTE9' ,p_col_seq => 9,p_col_type =>'V ARCHAR2' ,p_col_width =>250 ,p_nullable => 'Y',p_translate => 'N');end;2.Application中Flex Table的定义Application Developer GUI◊Flexfield◊Descriptive◊Register3.增加Item属性继承text_item_desc_flex,并显示于canvas上4.增加一些标准trigger FORM LEVELa.定义flex的triggerwhen_new_form_instanceFND_DESCR_FLEX.DEFINE(BLOCK=>'ACTUANT_TASK_LISTS_ALL',FIELD=>'DESC_FLEX',APPL_SHORT_NAME =>'CUS',DESC_FLEX_NAME =>'Actuant Header Flex');b. PRE–QUERYFND_FLEX.EVENT(‘PRE-QUERY’);c. POST–QUERYFND_FLEX.EVENT(‘POST-QUERY’);d. PRE–INSERTFND_FLEX.EVENT(‘PRE-INSERT’);e. PRE–UPDATEFND_FLEX.EVENT(‘PRE-UPDATE’);f. WHEN–V ALIDATE–RECORDFND_FLEX.EVENT(‘WHEN-VALIDATE-RECORD’);g. WHEN–NEW–ITEM–INSTANCEFND_FLEX.EVENT(‘WHEN-NEW-ITEM-INSTANCE’);5.弹性栏位的开启和编译七、关键性弹性域使用1.添加代码,ID,描述3个项,继承TEXT_ITEM子类2.增加一些标准trigger FORM LEVELa.定义flex的triggerwhen_new_form_instancefnd_key_flex.define( BLOCK => 'CONTRACTS',field => 'SUB_CODE',id => 'SUB_ID',description => 'SUB_DESC',appl_short_name => 'SQLGL',code => 'GL#',num => nvl(to_number(fnd_profile.V ALUE('MFG_CHART_OF_ACCOUNTS_ID')),-1), --STRUCTURE Numberrequired => 'N',validate => 'FULL',usedbflds => 'N');b. PRE–QUERYFND_FLEX.EVENT(‘PRE-QUERY’);c. POST–QUERYFND_FLEX.EVENT(‘POST-QUERY’);d. PRE–INSERTFND_FLEX.EVENT(‘PRE-INSERT’);e. PRE–UPDATEFND_FLEX.EVENT(‘PRE-UPDATE’);f. WHEN–V ALIDATE–RECORDFND_FLEX.EVENT(‘WHEN-VALIDATE-RECORD’);g. WHEN–NEW–ITEM–INSTANCEFND_FLEX.EVENT(‘WHEN-NEW-ITEM-INSTANCE’);3.弹性栏位的开启和编译八、Special菜单的制作1.增加一个User_Named的trigger,并改名SPECIALn(1<=n<=15)2.在PRE–FORM中调用app_special.instantiate 来注册菜单项app_special.instantiate('SPECIAL1', 'Approve', '', FALSE);parameter2: Special上显示的字,可以其他方式得到3.在PRE-BLOCK 或PRE-RECORD 中调用app_special.enable 启用或屏蔽菜单项,或者其他trigger:app_special.enable('SPECIAL1', property_on);4.在specialn的trigger里面写要得代码请求日期INV_SRS_DATE_STANDARD:$PROFILES$.GL_SET_OF_BKS_ID科目GL_SRS_LEDGER_FLEXFIELD。

相关文档
最新文档