编译form时出现FRM-10043: Cannot open file

本文记录了使用FormBuilder10.1.2.0.2开发FMB文件后,上传至服务器时遇到的FRM-10043错误,并详细描述了解决过程,包括采用二进制上传方式及FTP重连问题的处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天下午,用form builder 10.1.2.0.2  开发fmb后上传致服务器后一直报错

FRM-10043: Cannot open file

而且把从服务器下载下来之前别人做的fmb打开也报错:

一开始以为是form builer的版本问题。

后来经过排查,发现是上传,下载 fmb的方式不对,改为用二进制后,问题解决!!

eg.后来又发现过段时间ftp断线后点reconnect重连,问题又出现了。

把ftp工具重启,再用binary方式传递,fmb正常编译。

 

<think>我们正在处理Oracle EBS中的两个错误:FRM-30188和FRM-30087。首先,我们需要分别理解这两个错误的含义和常见原因。1.FRM-30188:没有给出初始值这个错误通常发生在表单打开,表单中的某个项(Item)被设置为必须输入(Required)或者有初始值要求,但系统没有获取到初始值。可能的原因包括:-在表单的触发器(如WHEN-NEW-FORM-INSTANCE)中试图访问一个尚未初始化的全局变量或参数。-表单参数(Parameter)没有正确传递,导致表单中的项无法得到初始值。-表单中某个项被设置为“Required”(必须输入)且“InputAllowed”为否,但启动表单没有提供初始值。2. FRM-30087:无法创建表单文件这个错误通常发生在运行表单,系统无法在临目录中创建表单运行所需的临文件(通常是.fmx文件或临文件)。可能的原因包括:-目录(由TEMP或TMPDIR环境变量指定)的磁盘空间不足。-目录的权限问题,导致应用用户无法写入。-目录路径不存在或配置错误。针对这两个错误,我们可以分别给出解决方案。对于FRM-30188:-检查表单中所有必须输入的项(特别是隐藏项)是否在表单启动被正确赋值。可以通过在触发器(如WHEN-NEW-FORM-INSTANCE)中设置初始值来解决。-确保传递给表单的参数正确。如果表单需要参数,检查调用表单是否传递了所有必需的参数,并且参数名称正确。-检查表单中项的属性:将不必要的项的“Required”属性设置为“No”,特别是那些不需要用户输入的项(如显示项、按钮等)。对于FRM-30087:-检查临目录的磁盘空间。清理磁盘空间或增加磁盘容量。-检查临目录的权限:确保Oracle应用用户(通常是applmgr)对临目录有读写权限。-检查环境变量TEMP和TMPDIR的设置是否正确(在运行表单的操作系统用户的环境变量中设置)。在Unix/Linux系统中,通常设置在用户配置文件(如.bash_profile)中,例如:export TEMP=/tmpexportTMPDIR=/tmp然后确保/tmp目录存在且权限正确(例如,权限设置为777)。-如果临目录设置正确,尝试清理临目录中的旧文件,因为有过多的文件也可能导致问题。此外,还有一些通用步骤:-重启应用服务器和数据库服务器,有性问题可以通过重启解决。-确保表单模块(.fmx文件)没有损坏,可以尝试重新生成表单模块并重新部署。如果问题仍然存在,需要进一步检查日志文件(如应用服务器的日志、表单跟踪日志)以获取更多信息。下面我们生成相关问题:§§相关问题§§1.如何设置Oracle EBS中表单的临目录? 2.如何检查Oracle EBS表单中的项属性(如Required属性)?3.如何重新生成OracleEBS表单的.fmx文件?4.如何启用Oracle表单的跟踪以诊断错误? 5. FRM-30188错误通常与哪些触发器相关? 6.在Unix/Linux系统中,如何为Oracle应用用户设置TEMP和TMPDIR环境变量?</think>### Oracle EBS FRM-30188 和 FRM-30087 错误分析与解决方案 #### **FRM-30188 "No initial value given" 错误** **原因** 1. **未初始化全局变量**: 表单触发器(如 `WHEN-NEW-FORM-INSTANCE`)引用了未赋值的全局变量或参数[^1]。 2. **参数传递失败**: 调用表单未传递必需的参数(如 `ORG_ID`),或参数名拼写错误。 3. **项属性配置错误**: - 表单中某项的 *Required* 属性设为 *Yes* 但未设置初始值。 - 隐藏项(如 `GLOBAL.VARIABLE`)未在启动赋值。 **解决方案** 1. **检查触发器逻辑**: 在表单触发器开头初始化全局变量,例如: ```sql DEFAULT_VALUE('0', 'GLOBAL.USER_ID'); -- 设置默认值 ``` 2. **验证参数传递**: - 在调用表单的代码中确认参数名称和值匹配,例如: ```sql APP_FND_FUNC_EXEC.EXECUTE_FUNCTION( function_name => 'FORM_NAME', parameters => 'PARAM1=value1; PARAM2=value2' ); ``` - 使用 `PARAMETER('PARAM_NAME')` 调试参数值。 3. **修改项属性**: 在表单设计器(Form Builder)中: - 将非关键项的 *Required* 属性改为 *No*。 - 在 *Initial Value* 字段设置默认值(如 `0` 或 `NULL`)。 --- #### **FRM-30087 "Unable to create form file" 错误** **原因** 1. **临目录权限问题**: Oracle应用用户(如 `applmgr`)对临目录(`/tmp` 或 `$TMPDIR`)无写入权限[^2]。 2. **磁盘空间不足**: 临目录所在磁盘已满。 3. **环境变量配置错误**: `TEMP`/`TMPDIR` 变量未设置或指向无效路径。 4. **文件描述符耗尽**: 系统或用户级文件句柄限制过低。 **解决方案** 1. **修复目录权限**: ```bash chown applmgr:dba /tmp # 修改所有者 chmod 777 /tmp # 开放读写权限 ``` 2. **清理磁盘空间**: ```bash df -h /tmp # 检查磁盘使用率 rm -rf /tmp/oracle_* # 删除旧临文件 ``` 3. **配置环境变量**: 在应用用户配置文件(如 `.bash_profile`)中添加: ```bash export TEMP=/tmp export TMPDIR=/tmp ``` 4. **调整文件描述符限制**: ```bash ulimit -n 65535 # 临生效 # 永久生效:编辑 /etc/security/limits.conf ``` 5. **重建表单文件**: 重新编译 `.fmb` 源文件生成 `.fmx` 文件,并部署到 `$AU_TOP/forms/US`。 --- #### **通用故障排除步骤** 1. **启用表单跟踪**: 在 URL 中添加参数 `trace=YES`,生成日志分析错误源头。 2. **检查日志文件**: - 应用日志:`$FND_TOP/log/*.log` - 表单日志:`$TEMP/forms_trc_*.trc` 3. **重启管理服务**: ```bash adcmctl.sh stop apps/apps adcmctl.sh start apps/apps ``` > **预防建议**: > - 在测试环境充分验证表单参数传递逻辑。 > - 定期监控临目录空间和权限。 > - 使用 `COPY()` 函数替代全局变量传递关键值[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值