您的位置:首页 > 产品设计 > UI/UE

Form Builder环境配置与编译(FRM-18108处理) .

2012-05-29 13:39 351 查看
1. 安装FormBuilder
· Form Builder有6i和10g两种主要版本,请与正式环境中实际使用的为准,本文以6i为例。
· 如果只安装了开发版的Form Builder6i,则编译fmb文件时要求本地另提供Oracle本地监听器(Oracle快捷版无此服务)

2. 本地(Windows)环境配置
目标:能本地的FormBuilder中正常编译fmb文件。
a. 从服务下载form,resource两个文件夹到本地任意位置
如:/u01/oracle/prodappl/au/11.5.0/forms/ZHS,/u01/oracle/prodappl/au/11.5.0/resource
b. 把本地这两个文件夹添加到注册表
在命令行中用regedit打开注册表编辑器,找到以下这个项:
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\FORMS60_PATH
该项原值为:E:\orant\TOOLS\OPEN60\PLSQLLIB
修改之后为:E:\orant\TOOLS\OPEN60\PLSQLLIB;E:\oracleForm\resource;E:\oracleForm\form
注:如果FORMS60_PATH项的路径与上述不同,请在Oracle层下搜索一下,不要随便新建
c. 用FormBuilder打开要编辑的fmb文件
打开文件后使用“文件->连接”连接到Oracle数据库;再通过“文件管理编译文件”即可完成编译,在fmb的同目录下生成fmx文件。
注:如果打开文件时弹出一堆报错窗口,请放到没有空格及中文的简单路径下再试;
  本地编译的文件直接放到服务器上使用可能会有乱码,正式版建议直接在服务器中编译。

3. 服务器(Linux)环境配置
目标:在服务器中编译fmb文件,生成fmx文件。
a. 上传文件
用SSH连接Linux服务器,把修改过的文件放到服务器中(建议备份fmb及fmx原文件),本人路径为/u01/oracle/prodappl/cux/11.5.0/forms/ZHS
b. 配置环境
回到/u01/oracle/****appl/目录,以我所用的环境为例,要依次执行以下两个文件:
[oraprod@fin02 prodappl]$ .APPSORA.env
[oraprod@fin02 prodappl]$ .APPSPROD_fin02.env
注:配置文件间存在相互调用,所以目录中可能不止上述两个env文件。
c. 编译文件(实际应用时注意路径差异)
命令如下,其中XXX为文件名:
f60genmodule=/u01/oracle/prodappl/cux/11.5.0/forms/ZHS/******.fmb userid=apps/appsoutput_file=/u01/oracle/prodappl/cux/11.5.0/forms/ZHS/******.fmx
编译过程中本人碰到如下错误:
FRM-18108: Failed to load the following objects.
Source Module:APPSTAND.fmb
……
PL/SQL ERROR 307 at line 40, column 10
too many declarations of'QUERY_RANGE' match thiscall

经分析,这是重复引用问题,因为服务器中存在不同语言的多个版本的form(分别放在/ZHS/, /US/目录下),所以报错。
我解决的方法是细化引用位置:
[oradevp@fintest03 prodappl]$ echo$FORMS60_PATH
看显示的路径中是否有form目录的配置,如果没有,就在prodappl目录下的env文件中寻找$FORMS60_PATH变量的配置,增加一个“/u01/oracle/prodappl/au/11.5.0/forms/ZHS”,限定范围,即可正常编译。

4. 开发需求:关闭窗口时不允许提示保存,只能选择是否放弃所有更改
· 问题描述:EBS系统中的一个自定义功能下,当关闭窗口时,如果窗口内有更改,它会弹出是否保存的提示。但如果此时点“是”,它就会保存本不符合校验规则的数据。
· 在"CLOSE-WINDOS"触发器中发现如下代码:
APP_CUSTOM.CLOSE_WINDOW(:SYSTEM.EVENT_WINDOW);
· 在该procedure下找到对目标窗口的处理,当前的处理方法是:
app_window.close_first_window;
· app_window是直接调用的APPCORE.dll中的公有方法,无法修改,所以改为如下处理:
fnd_message.set_string('现在关闭窗口将放弃所有操作,确认?');
if fnd_message.warn then --表示选择“是”
  close_form('CUXCEXCABMR'); --参数是当前的fmb文件名
Else --表示选择“取消”
return;
endif;
· 其中的close_form(FORM_NAME)方法就是关闭当前整个from,我还试过clear_form()等方法,没有起到理想效果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: