Form开发指南-第一弹:开发背景与基础环境

article/2025/7/14 7:59:17

1 用户和常用工具

1.1 区分3类用户

  1. OS用户:包括超级用户root,应用OS用户如applprod,数据库OS用户oraprod。
  2. 数据库用户:包括内置管理用户sys、system,EBS用户apps,EBS各模块用户applys、gl、inv、po、ar、ap等等。EBS网关用户applsyspub。
  3. EBS用户:也叫OA用户、应用用户、ERP用户,包括默认超级用户sysadmin,其他内置用户,企业实施,使用过程中创建的用户。

1.2 Form开发使用的用户和工具

Forms开发过程中需要具体使用如下3个用户。

                                        ①应用OS用户:用telnet工具如SecureCRT登录服务器,获得各$XXX_TOP的具体路径、编译form和pll;用FTP如cuteftp连接服务器,下载必要文件、上传开发的form。

                                        ②APPS:用PL/SQL Developer登录数据库,创建各类数据库对象。

                                       ③sysadmin或者拥有应用开发员和系统管理员职责的等价用户:注册form等各AOL对象、测试form。

2 AOL开发框架

2.1 Navigator

Forms自身菜单其实和传统菜单一样:

然而EBS中基本摒弃Forms自身的菜单功能,而是专门开发了一个Navigator界面,采用树形结构显示菜单,每个菜单项对应一个Forms:

这里的菜单是可随意组织的,因此非常灵活,而不用如传统菜单那样要么写死要么用代码控制。

实际上,该方式完成了EBS最主要的安全性控制——功能安全性,为什么这么说呢?

 2.2 AOL开发框架:EBS功能安全性基本原理

这里仅说明Forms部分,

安全性最终都要落实到“用户”身上,即某一用户是否具有某一权限;功能安全性的核心就是某一用户是否具有运行某一个Forms的权限。

为了方便管理,分类维护,EBS在“用户”和“Forms”之间加了几个层次。考察如下过程:

                                       ①“用户”如sysadmin登录,系统验证其用户名/密码

                                      ②如果OK,系统列出其拥有的所有角色,在EBS中叫“职责”(Responsibility),而每个职责,都对应一个定义好的“菜单”

                                      ③当用户选择相应的职责进入“Navigator”后,显示的就是此菜单的内容

                                      ④每个底层菜单项,还不是直接对应Forms,而是先对应一个“功能”(Function),由功能再去对应一个具体的“Forms”。这里的好处是,在功能上可以定义参数比如查询条件、控制码等,然后传递给Forms,当然大部分情况是不定义参数,所以功能和Forms基本上是一一对应关系

                                     ⑤用户点击菜单项,到定义Forms时指定的应用的TOP下,找到“fmx文件”执行之所以,反过来,如果我们开发好一个Forms,要在EBS中跑起来,完整的过程就是为该“Forms”定义“功能”,定义“菜单”调用该功能,定义“职责”使用该菜单,最后把职责分配给“用户”等一系列无Coding的定义工作。

2.3 Tmeplate.fmb

专业的软件系统,其操作方式、界面风格总是非常统一,即便是后来收购集成进来的模块,经过调整优化后,风格也基本一致。那么如何才能做到统一呢?一是依赖于规范文档,大家老老实实照标准开发;二是采用更加直接有效的办法——模版。

Oracle EBS的Forms,基本上都是从Template.fmb开始,该模版预先定义了:

  1. 各种界面元素的属性集——子类
  2. 常用的控件——日历、进度条
  3. 一系列Form级触发器,统一处理各种未被明确处理的事件
  4. 丰富的PLL库函数,大大超越了Forms Builder内置的函数

所以,我们基于EBS的开发,当然也是从Template.fmb开始。

2.4 EBS文件系统

EBS文件系统,指其以怎样的目录结构组织各种可执行文件、命令文件、配置文件的。

从整个EBS的角度看,分DB、APP两部分、五个大目录:

         其中COMN目录(对应环境变量$COMMON_TOP)存放服务启停脚本和基于HTML的应用文件(Java类、JSP页等):

         APPL(对应环境变量$APPL_TOP)则存放配置文件、各种管理脚本、各模块应用代码:

         APPL下的各个应用模块目录,则是本次介绍的主角了:

         AU模块存放fmb、pll、plx文件、各应用模块存放fmx文件,具体是:

目录路径说明文件类型备注
$AU_TOP/resource资源文件目录.pll.plxPL/SQL库文件
$AU_TOP/forms/US英文Forms源文件目录.fmb英文版本的Forms源文件
$AU_TOP/forms/<语言代码>特定语言Forms源文件目录.fmbZHS表示中文简体
$<应用简称>_TOP/forms/US各模块英文Forms编译文件目录.fmx编译后的英文Forms文件
$<应用简称>_TOP/forms/<语言代码>各模块特定语言Forms编译文件目录.fmb.fmxZHS表示中文简体

上面<应用简称>,如INV、GL、AP、AR等等,在System Administrator职责下的Application/Register中定义。

通常各个企业都会创建一个客户化应用来管理二次开发的所有代码和设置,比如CUX、HAND等,下面以CUX(客户化的意思)为例

总之我们需要的模版及相关文件在AU_TOP下;我们开发的fmb文件呢,也应根据上述规则传到$AU_TOP/forms的相关语言路径下,不过为管理、备份方便,实际开发中可能故意违反EBS的规则,与fmx一起放在$CUX_TOP/forms的相关语言路径下。

3 多组织支持

3.1 说明

 Oracle的多组织数据屏蔽,设计要点如下:

  1. 核心层次:业务组BG→账套SOB→法人实体LE→经营单位OU→库存组织INV,这些层次统称为组织,可通过视图org_organization_definitions查看关系。
  2. 数据级别:表中设计有组织ID来屏蔽;不同模块因为针对的层次不同,其组织ID含义不同,比如HR的表用Business_Group_Id,GL的表用Set_Of_Book_Id,AR/AP/PO/OM等表用经营单位Org_Id,INV/MRP/WIP/BOM等模块用库存组织Organization_Id。
  3. 程序级别:用户登录、选择职责后,其所能操作的业务组、账套、法人实体、经营单位就确定了,这个是通过相关的Profile来设置的;当进入制造和库存相关模块,需要通过Change Organization菜单来获得可操作的库存组织。Oracle标准的Package、Form、Java等程序,都是严格根据当前用户的参数来过滤各模块表数据。

3.2 主要实例

         本文档主要围绕开发销售订单来介绍Form开发过程中涉及的关键技术点。

3.2.1 销售订单

销售订单最核心的内容为:某客户,在某天,以何价格,购买多少数量的哪些商品。

一张销售订单,客户是一定的,销售员可能有多个,这里假定只记录主销售员,所以这两个信息构成销售订单的“头信息”;一次订单,客户通常会同时购买多种商品,并且未必是同一天要货,这样需求日期、商品、数量、价格构成销售订单的“行信息”。

3.2.2 开发需求分析

销售订单还需要记录其它重要的内容,这个可直接参照EBS的“Sales Order”,为学习方便,这里仅加入如下不完整、不严谨的信息。

头信息:订单编号、订单日期、内销还是外销、所采用的价目表、总价、币别、订单状态;非“录入”的不能删除,“部分履行”或“完全履行”的不能修改。

订单状态:录入、确定、部分履行、完全履行。

行信息:发货日期、收款日期;如果已发货,商品和数量不能修改,记录不能删除;如果已收款,整条记录都不能修改、不能删除。

全部行都已发货、已收款则订单状态为“完全履行”,部分发货或部分收款,则订单状态为“部分履行”。

订单查询:需要提供按订单号、订单日期、客户、销售员、销售类型、商品、是否发货、是否收款等条件进行组合查询,查询表现方式分为Folder形式和Grid形式。

3.2.3 其它说明

本文档使用“SCF”客户化应用做开发,不过数据库对象仍然沿用“CUX”前缀;没有建立专门的索引表空间。

4 基于EBS的Forms开发过程

4.1 Form文件类型

文件扩展名文件类型说明类比示例
.fmb源文件Forms的源文件,二进制格式,也可转成ASCII格式类似程序的源代码文件
.fmx可执行文件编译后的Forms可执行文件,需要Forms Runtime运行类似VB的.exe文件
.pll库函数源文件Forms的库函数源代码文件,类似开发语言的库函数类似VC的.cpp文件
.plx库函数可执行文件编译后的库函数文件,用于运行时调用类似编译后的库文件

调用关系:fmb文件可以引用其他fmb文件、pll文件,pll文件可以进一步引用其他pll文件,引用是可以嵌套的。所以要成功打开一个forms源文件,必须保证其直接引用、间接引用的fmb、pll文件均存在。

怎样才叫“存在”呢?类似各种语言如C的Include Path或Java的Class Path,Forms也有一个参数——注册表FORMS60_PATH来指示引用的路径,只要需要的文件在该路径下即可。

 4.2 下载TEMPLATE.fmb

  1.          用FTP以应用操作系统用户登录EBS服务器,进入到$AU_TOP目录下。
  2.          从$AU_TOP/forms/US下载TEMPLATE.fmbFORMS60_PATH对应的目录下。
find / -iname "template.fmb" 2>/dev/null

         也可以使用上面的命令去寻找模板所在地,登陆服务器后,直接运行即可。

4.3 打开TEMPLATE.fmb及报错分析

        打开TEMPLATE.fmb及报错分析

        本地仅有TEMPLATE.fmb,将报fmb文件找不到——Source Module后就是form文件名: 

        点击OK,再报pll文件找不到——PL/SQL library后面就是就是pll文件名: 

注意只可关闭、不可保存TEMPLATE.fmb 

4.4 下载必要的文件到FORMS60_PATH对应的目录

目标:不断测试、下载,直至打开TEMPLATE.fmb,没有任何错误为止。

从$AU_TOP/forms/US下载缺失的fmb文件。

从$AU_TOP/resource下载缺失的pll文件。

因为form和pll都可嵌套引用,所以有时候把提示的form或者pll下载下来,打开TEMPLATE.fmb依然报错,那么需要直接打开提示缺失的fmb或pll文件,这个时候才会看到真正缺失的文件,下载之。

4.5 fs1、fs2和fs_ne三个系统文件的存在原因 

        在Oracle EBS(ERP)系统中,为什么会存在 /u01/SIT/app/fs1/u01/SIT/app/fs2/u01/SIT/app/fs_ne 这三个不同的文件系统目录,背后其实是为了满足系统的高可用性、灵活升级和版本管理需求。下面详细解释原因:

1. 多个应用文件系统副本(fs1 和 fs2)的原因

  • 高可用性和负载均衡
    通过部署两个(或多个)应用文件系统副本,系统可以实现负载均衡和故障切换。

    • fs1所在的节点出现故障时,可以切换到fs2继续提供服务,保证系统不间断运行。
    • 也可以根据负载情况,将请求分配到fs1fs2,提高整体性能。
  • 无缝升级和版本切换
    在升级或维护时,可以先在fs2上部署新版本,测试确认无误后,再切换流量到fs2,而fs1保持旧版本,减少停机时间。
    这种方式称为“蓝绿部署”或“滚动升级”,极大提升了系统的可维护性和稳定性。

2. 非版本化文件系统(fs_ne)的作用

  • 共享公共资源
    fs_ne目录存放的是不随版本变化的公共文件,比如共享库、公共配置文件、工具脚本等。
    这些文件对所有版本都是通用的,避免了重复存储和维护。

  • 简化版本管理
    通过将公共资源放在fs_ne,升级时只需替换fs1fs2,而不必重复更新公共文件,降低了升级复杂度和风险。

目录作用说明目的和优势
/u01/SIT/app/fs1应用文件系统副本1支持多节点部署,提供服务的一个版本
/u01/SIT/app/fs2应用文件系统副本2另一个版本或节点,实现负载均衡和高可用
/u01/SIT/app/fs_ne非版本化文件系统,存放公共资源共享公共文件,简化升级和维护

简单比喻:可以把fs1fs2看成两台“备用服务器”,fs_ne是“公共仓库”,这样即使一台服务器升级或维护,另一台还能继续工作,公共仓库里的资源也不用重复拷贝。


http://www.hkcw.cn/article/gGCTEBTMSp.shtml

相关文章

基于LBS的上门代厨APP开发全流程解析

上门做饭将会取代外卖行业成为新一轮的创业风口吗&#xff1f;杭州一位女士的3菜一汤88元套餐引爆社交网络&#xff0c;这个包含做饭、洗碗、收拾厨房的全套服务&#xff0c;正在重新定义"到家经济"的边界。当25岁的研究生系着围裙出现在客户厨房&#xff0c;当年轻姑…

Bootstrap项目 - 个人作品与成就展示网站

文章目录 前言一、项目整体概述1. 项目功能介绍1.1 导航栏1.2 首页模块1.3 关于我模块1.4 技能模块1.5 作品模块1.6 成就模块1.7 博客模块1.8 联系我模块 2. 技术选型说明 二、项目成果展示1. PC端展示1.1 首页1.2 关于我1.3 技能1.4 作品1.5 成就1.6 博客1.7 联系我 2. 移动端…

QML 滑动与翻转效果(Flickable与Flipable)

目录 引言相关阅读核心组件解析Flickable基础属性Flipable核心特性 示例解析示例1&#xff1a;可滑动列表&#xff08;FlickableDemo&#xff09;示例2&#xff1a;可翻转卡片&#xff08;FlipableCard&#xff09; 总结下载链接 引言 Qt Quick 框架提供的 Flickable 与 Flipa…

氮气吹扫电磁阀

一、氮气吹扫电磁阀的概述 氮气吹扫电磁阀是一种重要的工业自动控制设备&#xff0c;用于对工业设备中出现的杂质和沉淀物进行清理&#xff0c;以保证生产线的畅通和生产效率的稳定。其作用是在需要吹扫清洗的工业设备中&#xff0c;通过控制气源的气压&#xff0c;打开电磁阀…

【香港科大+华为诺亚方舟】Web Reconstruction方法:从原始网页文档合成高质量指令遵循数据,效果显著,代码开源

论文名称&#xff1a;Instruction-Tuning Data Synthesis from Scratch via Web Reconstruction 论文链接&#xff1a;https://arxiv.org/abs/2504.15573 机构&#xff1a;香港科技大学 华为诺亚方舟实验室 Github代码链接&#xff1a;https://github.com/YJiangcm/WebR 个人文…

星际巡航-第16届蓝桥第6次STEMA测评Scratch真题第4题

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥真题&#xff0c;这是Scratch蓝桥真题解析第233讲。 第16届蓝桥第6次STEMA测评已于2025年4月13日落下帷幕&#xff0c;编程题一共有5题&#xff08;初级组只有前4道编…

C++17新特性 类型推导

在传统C和C中&#xff0c;参数的类型都必须明确定义&#xff0c;这其实对我们快速进行编码没有任何帮助&#xff0c;尤 其是当我们面对一大堆复杂的模板类型时&#xff0c;必须明确的指出变量的类型才能进行后续的编码&#xff0c;这不仅拖 慢我们的开发效率&#xff0c;也让代…

leetcode 2359. 找到离给定两个节点最近的节点

给你一个 n 个节点的 有向图 &#xff0c;节点编号为 0 到 n - 1 &#xff0c;每个节点 至多 有一条出边。 有向图用大小为 n 下标从 0 开始的数组 edges 表示&#xff0c;表示节点 i 有一条有向边指向 edges[i] 。如果节点 i 没有出边&#xff0c;那么 edges[i] -1 。 同时…

Qt creator 设计页面控件认识与了解

记录一下 Qt 中的认识与了解&#xff1a; 在 Qt 中&#xff0c;这些功能属于 Qt Designer 的组件过滤系统&#xff0c;旨在帮助开发者在对象浏览器中快速定位和使用不同类型的控件和组件。以下是每个功能的详细讲解&#xff1a; ‌Layouts&#xff08;布局&#xff09;‌&…

[网页五子棋][对战模块]前后端交互接口(建立连接、连接响应、落子请求/响应),客户端开发(实现棋盘/棋子绘制)

文章目录 约定前后端交互接口建立连接建立连接响应针对"落子"的请求和响应 客户端开发实现棋盘/棋子绘制部分逻辑解释 约定前后端交互接口 对战模块和匹配模块使用的是两套逻辑&#xff0c;使用不同的 websocket 的路径进行处理&#xff0c;做到更好的耦合 建立连接 …

Redisson学习专栏(三):高级特性与实战(Spring/Spring Boot 集成,响应式编程,分布式服务,性能优化)

文章目录 前言一、Spring Boot深度整合实战1.1 分布式缓存管理1.2 声明式缓存1.3 响应式编程 二、分布式服务治理2.1 服务端实现2.2 客户端调用2.3 高级特性2.4 服务治理功能 三、分布式任务调度引擎四、连接池配置与网络参数调优4.1 连接池配置4.2 网络参数调优4.3 集群模式特…

行程规划:智能规划,轻松旅行

在旅行中&#xff0c;一个好的行程规划是成功旅行的关键。它不仅能帮助你合理安排时间&#xff0c;还能让你的旅行更加经济、高效。成都为普云科技有限公司推出的“行程规划”APP&#xff0c;就是这样一个贴心的旅行助手。它不仅能让你自由记录旅游路线&#xff0c;还能实时记账…

动态报表筛选多项时的优化处理

如图所示 在有比较麻烦且数量比较的动态筛选条件时&#xff0c;就可以单独用一个页面&#xff0c;来囊括所有的参数选项&#xff0c;依次把从接口那得到的筛选列表按id来成数组&#xff0c;依次判断返回赋即可&#xff0c;非常方便

PSpice软件快速入门系列--07.如何进行Worst Case最坏情况分析

背景介绍&#xff1a;由于电路特性受电路中不同元器件的影响程度不同&#xff0c;当电路中不同元器件分别变化时&#xff0c;即使元器件值的变化相同&#xff0c;但电路特性变化的绝对值不会相同&#xff0c;而且其变化的方向也可能不同。PSpice提供了最坏情况分析&#xff0c;…

从收货到上架,海外仓系统如何智能优化入库管理?

在全球电商交易蓬勃发展的当下&#xff0c;跨境电商市场规模持续扩大&#xff0c;海外仓的重要性愈发凸显。其中高效、精准的入库管理&#xff0c;不仅是提升海外仓运营效率的关键&#xff0c;更是赢得客户信任、增强市场竞争力的核心要素。然而&#xff0c;传统的入库模式往往…

特朗普称美国汽车制造商“必须在国内生产整车”

当地时间5月30日,美国总统特朗普表示,包括特斯拉在内的美国汽车制造商必须在美国生产整车和所有零部件,而不是在国外生产。特朗普表示,之前汽车制造商在加拿大、墨西哥、欧洲生产零部件,这让他很困扰,但在接下来的一年里,这些汽车制造商“必须在美国生产整车”。(总台记…

特朗普称6月4日起把进口钢铁关税提高至50%

当地时间5月30日,美国总统特朗普在宾夕法尼亚州举行的一场集会上表示,将把进口钢铁的关税从25%提高至50%。随后,特朗普在社交媒体平台上发文表示,该决定从自6月4日起生效。美国白宫当天在社交媒体上发布公告称,“为进一步保护美国钢铁行业免受外国和不公平竞争的影响,从下…

官方通报:跳至兵马俑三号坑男子已被控制

造成两尊铠甲武士俑损坏 官方通报跳至兵马俑三号坑男子已被控制陕西省西安市公安局临潼分局今日发布警情通报,跳至兵马俑三号坑男子已被公安机关控制。2025年5月30日17时30分许,孙某(男,30岁)进入兵马俑景区参观时,翻越遗址坑护栏及防护网跳至三号坑内推拉陶俑,造成两尊…

【速通RAG实战:进阶】21、取长补短:LangChain与LlamaIndex等RAG框架的企业级融合实践

一、RAG框架的现状与核心挑战 (一)主流框架的优势与局限 LangChain、LlamaIndex等RAG框架已成为构建智能问答系统的基础设施,但在企业级落地中暴露出以下矛盾: 灵活性与专业性的冲突:LangChain的模块化设计支持复杂工作流,但对垂直领域(如医疗、金融)的深度优化不足;…

宝塔部署 Vue + NestJS 全栈项目

这里写自定义目录标题 前言一、Node.js版本管理器1、安装2、配置 二、NestJS项目管理&#xff08;等同Node项目&#xff09;1、Git安装2、拉取项目代码3、无法自动认证4、添加Node项目5、配置防火墙&#xff08;两道&#xff09; 三、Vue项目管理1、项目上传2、Nginx安装3、配置…