ORACLE EBS FORM 二次开发常用
- 格式:doc
- 大小:30.50 KB
- 文档页数:2
一、开始开发标准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里面添加文本项等查询内容。
本帖最后由 ljb_ 于 2010-12-10 15:41 编辑---(1)./* 根据报表文件名称关键字查找报表的执行文件名称等信息*/SELECT ER_CONCURRENT_PROGRAM_NAME as 用户并发程序名称,A.CONCURRENT_PROGRAM_NAME as 并发程序,A.OUTPUT_FILE_TYPE as 输出格式,B.EXECUTION_FILE_NAME 执行文件名,B.EXECUTABLE_NAME,FND_L.MEANING as 文件格式,ER_EXECUTABLE_NAME as 执行文件名,B.DESCRIPTION as 描述FROM FND_CONCURRENT_PROGRAMS_VL A,fnd_executables_vl B,FND_LOOKUPS FND_LWHERE A.APPLICATION_ID=B.APPLICATION_IDAND A.EXECUTABLE_ID=B.EXECUTABLE_IDAND B.EXECUTION_METHOD_CODE= FND_L.LOOKUP_CODE(+)AND FND_L.LOOKUP_TYPE='CP_EXECUTION_METHOD_CODE'AND ER_CONCURRENT_PROGRAM_NAME LIKE '挑库单报表%'--(2)./*查找在标准请求组里提交的报表所在的职责*/SELECT A.RESPONSIBILITY_NAME,ER_CONCURRENT_PROGRAM_NAME,B.CONCURRENT_PROGRAM_NAME FROM FND_RESPONSIBILITY_VL A,FND_CONCURRENT_PROGRAMS_VL B,FND_REQUEST_GROUP_UNITS CWHERE A.APPLICATION_ID=C.APPLICATION_IDAND A.REQUEST_GROUP_ID=C.REQUEST_GROUP_IDAND B.APPLICATION_ID=C.UNIT_APPLICATION_IDAND B.CONCURRENT_PROGRAM_ID=C.REQUEST_UNIT_IDAND ER_CONCURRENT_PROGRAM_NAME LIKE '%挑库单报表%'--(3)./*查找在菜单里提交的报表所在职责*/SELECT A.RESPONSIBILITY_NAME as 职责名,B.PROMPT as 并发程序名,ER_CONCURRENT_PROGRAM_NAMEFROM FND_RESPONSIBILITY_VL A,FND_MENU_ENTRIES_VL B,FND_FORM_FUNCTIONS_VL C,FND_REQUEST_GROUPS D,FND_REQUEST_GROUP_UNITS E,FND_CONCURRENT_PROGRAMS_VL FWHERE A.MENU_ID=B.MENU_IDAND B.FUNCTION_ID=C.FUNCTION_IDAND C.PARAMETERS LIKE '%'||D.REQUEST_GROUP_CODE||'%'AND D.APPLICATION_ID=E.APPLICATION_IDAND D.REQUEST_GROUP_ID=E.REQUEST_GROUP_IDAND E.UNIT_APPLICATION_ID=F.APPLICATION_IDAND E.REQUEST_UNIT_ID=F.CONCURRENT_PROGRAM_IDAND ER_CONCURRENT_PROGRAM_NAME LIKE '%挑库单报表%'--(4)./* 根据窗口名称查找关键字弹性域用到的表,列等信息*/--SELECT C.ID_FLEX_NAME,A.ID_FLEX_STRUCTURE_NAME,B.FORM_LEFT_PROMPT,C.APPLICATION_TABLE_NAME,B.APPLICATION_COLUMN_NAME,B.FLEX_VALUE_SET_ID FROM FND_ID_FLEX_STRUCTURES_VL A,FND_ID_FLEX_SEGMENTS_VL B,FND_ID_FLEXS CWHERE A.ID_FLEX_STRUCTURE_NAME='帐户别名' --用你自己要查的代替,就是Form窗口的标题AND A.APPLICATION_ID=B.APPLICATION_IDAND A.ID_FLEX_CODE=B.ID_FLEX_CODEAND A.ID_FLEX_NUM=B.ID_FLEX_NUMAND A.APPLICATION_ID=C.APPLICATION_IDAND A.ID_FLEX_CODE=C.ID_FLEX_CODE--根据上面FLEX_VALUE_SET_ID查弹性域的数据SELECT *FROM FND_FLEX_VALUES_VL TWHERE T.FLEX_VALUE_SET_ID=1005982 -- FLEX_VALUE_SET_ID--具体某一数据SELECT *FROM FND_FLEX_VALUES_VL TWHERE T.FLEX_VALUE_SET_ID=1005982AND T.FLEX_VALUE='720611'(5)/*根据描述性弹性域的标题查找描述性弹性域表和列*/--SELECT FND_DFV.TITLE,FND_DFV.DESCRIPTIVE_FLEXFIELD_NAME ,FND_DFV.APPLICATION_TABLE_NAME ,FND_DFU.APPLICATION_COLUMN_NAME,FND_DFU.FORM_LEFT_PROMPT,FND_DFU.FORM_ABOVE_PROMPTFROM FND_DESCRIPTIVE_FLEXS_VL FND_DFV,FND_DESCR_FLEX_COL_USAGE_VL FND_DFUWHERE FND_DFV.TITLE='物料' --如:物料AND FND_DFU.DESCRIPTIVE_FLEXFIELD_NAME=FND_DFV.DESCRIPTIVE_FLEXFIELD_NAME(6)。
OracleEBSForm开发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&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底色、白字。
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);。
1.FORM表单1.1 Forms运行模式1.1 Form表单模块属性1.2 Form挂默认菜单及工具条即Menu Module处用:DEFAULT&SMARTBAR 1.3 Form表单之多表单应用1.4 多表单间传递参数1.4 Form参数详细使用—一个窗体使用前一窗体参数参数提供了一种简便的机制,它用来设置Form启动时所需要的输入值。
参数的变量类型可以是CHAR、NUMBER或DATE,在设计Form时定义。
在应用程序执行CALL_FORM、OPEN_FORM、RUN_PRODUCT等内部子程序时,可以向一个FORM传送参数。
参数也可以由操作员在启动Form时,从命令行输入。
参数提供了一种简便的机制,它用来设置Form启动时所需要的输入值。
参数的变量类型可以是CHAR、NUMBER或DATE,在设计Form时定义。
在应用程序执行CALL_FORM、OPEN_FORM、RUN_PRODUCT等内部子程序时,可以向一个FORM传送参数。
参数也可以由操作员在启动Form时,从命令行输入。
1.4.1创建并引用参数在对象导航器中点中“参数”(PARAMETER),然后在工具条中点击“创建”图标,即可创建参数。
创建后要在其属性窗口中设置属性。
Data Type 设置为CHAR、NUMBER或DATE。
Default 参数的缺省值,必须与参数的数据类型和长度一致。
Length 参数可存贮的最长字符数。
它只对 CHAR型参数有效,最大为64K。
NUMBER型参数的缺省值为23字节,DATE型参数的缺省值为7字节。
Name 参数的名称。
在PL/SQL中,可以引用参数,或给参数赋值,方法是将保留字PARAMETER置于参数名之前,如::PARAMETER.P_NAME1 :=’Qilu _Rubber’;或:block.item := :PARAMETER.P_NAME1;除了在PL/SQL中直接引用参数外,你也可以在某些内部子程序中,或者在对象属性中引用参数。
Oracle ERP 二次开发探讨随着企业信息化的建设和发展,采购ERP软件的企业越来越多,从笔者工作过的保险行业和几个公司来看,该行业绝大多数公司都采购了ERP软件,主要集中在Oracle ERP,SAP,其中Oracle ERP 占比较大。
其实Oracle ERP 软件价格不菲,有产品费用,还有实施费用,初期投入都要几百万,企业花了这么大的投入,软件应该产生更多的价值来回报企业,目前很多企业只把Oracle ERP当做财务管理系统,仅仅只用了总账模块,固定资产模块。
有的企业上了应付,采购,但是流程和管理与公司管理方式很多出入,就出现了抛弃买来的Oracle ERP,购买新的系统满足需求,笔者就这种情况,怎么充分利用好Oracle ERP,在Oracle ERP的基础上进行二次开发,搭建企业的信息系统,用较小的成本,快速开发出企业级应用程序,为企业带来更多的价值,进行讨论。
首先,我们对Oracle ERP的产品体现进行初步介绍。
要想对Oracle ERP 进行客户化开发,就必须对Oracle ERP产品有深入的了解,为客户化开发奠定基础(这里只做概要介绍,详细介绍请参考Oracle ERP 文档),Oracle ERP 系统业务应用分很多模块,总账(GL),固定资产(FA),应付(AP),应收(AR),采购(PO),库存(INV),等等,还有一个基础公用模块(FND),该模块是其他模块的基础,有了这个公用模块,这对于我们做二次开发有了很多良好的基础。
Oracle ERP 客户化方式。
Oracle 客户化方式很多,常见的有FORM客户化,Report,OAF程序,请求等等。
下面就各种客户化方式进行分析和比较。
笔者还提出另外一种客户化方式进行探讨。
FORM客户化。
这事以前很常见的客户化方式,有对原始FORM进行修改,新增一个FORM等等方式。
由于访问FORM必须采用Oracle 账户进行登录才可以,占用Oracle 的用户。
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&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底色、白字。
首先先用sysadmin进入定义一个用户:系统管理员—安全性—责任—定义
定义自己的用户
然后用自己定义的用户进入操作一下
注意:application 选cux customer app。
那个。
其他的按说明改成自己的就行定义表单(Form)
切换责任:Application Developer:application→form
1.定义功能(Function),并关联已定义的表单
责任:Application Developer:application→function
2.定义/分配菜单(Menu),将定义好的功能分配到菜单项
责任:Application Developer:application→menu
保存
3.定义请求组(只需要第一次定义)
切换责任:系统管理员(System Administrator):安全(security)→责任(responsibility)→请求
保存
系统管理员(System Administrator):安全(security)→责任(responsibility)→定义
保存
退出用sysadmin登录
4.查找职责(刚开始定义的那个),分配菜单和请求组给职责;将职责分配给用户
系统管理员(System Administrator):安全(security)→用户→定义
进入查询模式查找出你要挂载的用户,添加责任
退出用自己定义的用户登录5.切换到定义好的职责运行表单。
(ERPMRP管理)ORACLEERP开发基础之EBS开发基础ORACLEERP开发基础之EBS开发基础OracleERP开发工具安装OracleEBS11i开发工具是developer6i的东西,非常古老。
因为是转手过来的机器,开发工具都是安装好了,所以也没去在意这工具的安装。
今天系统重装了,才知道这工具安装起来也是特烦人的。
先安装FORMS6i与REPORT6i,安装完后一定要打补丁。
否则会出现一大堆莫名的错误。
接着安装discoverer。
安装discoverer时先将注册表备份出来,因为discoverer不能和Forms安装在同一目录。
然后再安装discoverer的补丁,接着再将注册表恢复回来。
大致这样可以了。
注意顺序一定要不能错了,否则又会出现一堆无聊的错误。
唉!developer6i 是98年的工具。
盼着EBSR12应该是用DEVELOPER10g吧。
EBS二次开发包注册2.1从Server中下载ERPLibrary(.pll),存放于本机ServerPath:/u01/au/11.5.0/resource Form文件与Library文件要存放在固定目录例如:Form存放在d:\ErpForm\FormLibrary存放在d:\ErpForm\Library;2.2在Regedit>HKEY_LOCAL_MACHINE>SOFTWARE>ORACLE>FORMS60_PATH加入client端存放Form及Library的路径(如图)例如:d:\ErpForm\Library;d:\ErpForm\Form(建议要加在最前面)利用TEMPLATE.fmb模板来开发FormOracle已经为我们提供了一个Form的开发模板,(/data/deve/devappl/au/11.5.0/forms/ZHS/TEMPLATE.fmb)我们的开发实际要基于这个模板,这个模板里面已经存在了我们将会用到的Oracle标准的对象,我们需要做的,就是这这个模板的基础上面,添加我们自己的对象。
常用ORACLE EBS FORM 二次开发常用总结
1.锁住当前行
Set_Item_Instance_Property('main.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_window.set_window_position('WINDOW_NAME','CENTER');
4.最大化窗口时自动扩展文件夹数据块
在WHEN-WINDOW-RESIZED中添加以下代码即可。
if :system.event_window in ('MAIN') then
app_folder.event('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_Item_Instance_Property(item_name, CURRENT_RECORD, REQUIRED,PROPERTY_TRUE); 如:
if :CUX_WORKHOUR_EMP.ATTRIBUTE2 <> :CUX_WORKHOUR_EMP.ATTRIBUTE1 then
Set_Item_Instance_Property('CUX_WORKHOUR_EMP.MODIFY_REASON', CURRENT_RECORD,
REQUIRED,PROPERTY_TRUE);
if :CUX_WORKHOUR_EMP.MODIFY_REASON is null then
:CUX_WORKHOUR_EMP.MODIFY_REASON := '123';
:CUX_WORKHOUR_EMP.MODIFY_REASON := null ;
fnd_message.set_string('请输入调整原因.');
fnd_message.show;
end if;
else
if :CUX_WORKHOUR_EMP.ATTRIBUTE4 = :CUX_WORKHOUR_EMP.ATTRIBUTE3 then
Set_Item_Instance_Property('CUX_WORKHOUR_EMP.MODIFY_REASON',
CURRENT_RECORD, REQUIRED,PROPERTY_FALSE); end if;
end if;
7.增加菜单在 FORM级的when-new-form-instance
APP_SPECIAL.INSTANTIATE('SPECIAL1','取消需求行', '', TRUE, 'LINE');
8.LOV指定初始值后需在WHEN-NEW-RRECORD-INSTANCE用以下语句模拟验证,
否则会弹出验证框.代码如下:
app_item_property.set_property('DETAIL_D.DEMAND_STATUS_DESC',
ITEM_IS_VALID,property_on);。