ln -s /usr/java/jdk1.6.0_34/jre/lib/i386/libnpjp2.so /usr/lib/mozilla/plugins/libnpjp2.so然后重启firefox访问EBS forms试试, 供参考.
--EOF--
ln -s /usr/java/jdk1.6.0_34/jre/lib/i386/libnpjp2.so /usr/lib/mozilla/plugins/libnpjp2.so然后重启firefox访问EBS forms试试, 供参考.
CREATE TABLE FORMS_TRACE (
TRACE_ID NUMBER PRIMARY KEY,
FORMS_NAME VARCHAR2(50),
BLOCK_NAME VARCHAR2(50),
ITEM_NAME VARCHAR2(50),
TRACE_COMMENT VARCHAR2(100),
TRIGGER_NAME VARCHAR2(50),
TRIGGER_LEVEL VARCHAR2(1), -- 'B','R', 'F', 'I'/'N'
TRACE_DATE DATE DEFAULT SYSDATE NOT NULL
);
CREATE SEQUENCE S_FORMS_TRACE MINVALUE 1 MAXVALUE 2147483647 START WITH 1000 INCREMENT BY 1 CACHE 20;接下来是相应的存储过程, 这里使用了自治性事务(Autonomous Transaction 简称AT), AT经常会使用在日志记录的功能中.
CREATE OR REPLACE PROCEDURE TTRACE(P_FNAME IN VARCHAR2, P_BNAME IN VARCHAR2, P_INAME IN VARCHAR2, P_TNAME IN VARCHAR2, P_LEVEL IN VARCHAR2, P_COMMENT IN VARCHAR2)上面的过程可以记录具体的forms/block/item以及哪个level上执行了trigger, 这对于诊断trigger的调用比较有帮助. 通常还有一些另外的情况, 我们需要知道哪段代码被执行了, 以及相关的输出, 但是不需要记录forms/block/item等相关信息, 可以使用下面的存储过程:
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
INSERT INTO FORMS_TRACE(TRACE_ID, FORMS_NAME, BLOCK_NAME, ITEM_NAME, TRIGGER_NAME, TRIGGER_LEVEL, TRACE_COMMENT) VALUES (S_FORMS_TRACE.NEXTVAL, P_FNAME, P_BNAME, P_INAME, P_TNAME, P_LEVEL, P_COMMENT);
COMMIT;
EXCEPTION WHEN OTHERS THEN
ROLLBACK;
END;
/
CREATE OR REPLACE PROCEDURE CTRACE(P_COMMENT IN VARCHAR2)示例:
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
INSERT INTO FORMS_TRACE(TRACE_ID, TRACE_COMMENT) VALUES (S_FORMS_TRACE.NEXTVAL, P_COMMENT);
COMMIT;
EXCEPTION WHEN OTHERS THEN
ROLLBACK;
END;
/
ttrace('GMDRCPED', 'GMD_RECIPES', null, 'WHEN-NEW-RECORD-INSTANCE', 'B', NULL);以上供参考.
ctrace('some comment');
File > Connect/Disconnect 用于数据库连接, 这里会用到tnsnames.ora指定的名称进行连接, 通过环境变量TNS_ADMIN指定.区域2: Object Navigator
File > Convert 用于在二进制的fmb文件和文本文件fmt之间进行转换, fmt格式是forms早起版本的格式以文本方式保存.
View > Ownership view 默认会显示所有的forms对象, 比如blocks/triggers/windows等
View > Visual View 只会显示可视化对象windows/visual attributes
View > Stacked Views 用于显示Stacked Canvas和Tab Canvas, 默认情况下这两种画布在设计时不显示. 注意: 这个选项需要在layout editor中选中Canvas时才会出现.
Layout > Align Components 对多个item一次性进行水平/垂直方向的布局操作, 这个排列布局时比较有用.
其它菜单的功能基本就没有什么值得介绍的了, 看了基本都会用.
Object Navigator树显示的是所有的forms(也称为module), Menus(forms菜单), PL/SQL Libraries(pll库, 被多个forms共享使用), Object Libraries(包含多个forms对象,用于subclass或者copy), Built-in Packages(基础程序库, 比如常用的standard package包含了诸如go_item/go_block之类的基础调用). 这里重点介绍的是Module下面的组件.区域3: Layout Editor
1, Triggers
Trigger等价于其他3GL中的event handler, 可以在trigger里面编写相应的事件处理代码. Forms分三种级别form,block和item. Module下面的Trigger指的是form level的trigger.
2, Alerts
对话框, 这在EBS开发中被fnd_messages代替不会被使用.
3, Data Blocks
这是forms开发的重头戏, 基本上forms开发就是围绕着几个block转.可以将block理解为数据库中表或者视图, 而block下面的item则对应其中的列. 这在以后的文章中会详细讲到.
4, Canvases
画布, 在构建forms UI界面时所有的item都必须放在一张画布上面, 画布包含以下类型: Content(内容画布)/Tab(Tab页画布)/Stacked(堆叠画布).
5, Editors
Item内容编辑框, EBS中自带有编辑框因而不会被用到.
6, LOVs
全称List of Values. 用于选择输入的对话框, 可以理解为一个为方便和验证输入存在的东西, 这在EBS中会经常遇到.
7, Object Groups
与上面提到的Object Libraries类似, 用于创建一些公用的forms对象比如block/canvas之类, 被其他的forms继承或者拷贝. 目前遇到使用Object Groups的情况有query find window和folder功能.
8, Parameters
forms参数, 有两个用途. 一是作为调用forms的参数, 比如EBS模板中的QUERY_ONLY参数; 二是用于存储一些临时的值, 比如作基于lov的query find时就会用到.
9, Popup Menus
邮件菜单,EBS中提供了相应的接口用于扩展.不多作讨论.
10, Program Units
这也是forms开发中代码的一个聚集地, 通常forms开发建议的是不要在trigger中编写过多的代码, 而是集中编码为program unit的形式在trigger中进行调用.
11, Property Classes
属性类, 主要用于规范化. 举例来说TEMPLATE.fmb中的TEXT_ITEM property class定义了文本框的相关属性信息, 每个TEXT ITEM如果都设置Subclass Info 为该属性类, 则可以保证这些ITEM在显示上的一致性.
12, Record Groups
记录组,实际上就是一条sql语句. LOV和Hierarchy Tree会用到.
13, Visual Attributes
用于定义一些可视化属性, 比如宽高/颜色等. 典型的应用是设置行标指示器的颜色.
14, Windows
可以理解为Canvas的容器, 一个forms必须至少有一个window.
这个区域用于编辑UI界面, 使用快捷键F2调用. 主要使用到的是区域上方用于对其的工具条, 如下:
其他的基本很少会使用到.
属性面板, 使用快捷键F4调用. 每个forms对象包括window/canvas/block/item都有相应的属性可以在属性面板中查看, 由于涉及到的属性多而繁杂, 不作一一列举.基本上关于forms builder要说的就是这些了, 对比其他的IDE会有很多不同的地方, 个人觉得还是要慢慢适应, 熟能生巧吧.
message('Hello World, this is my first form.');7, 在canvas界面上添加一个Text Graphic, 内容为"Hello World, this is my first form.", 字体大小设为48.