显示标签为“forms”的博文。显示所有博文
显示标签为“forms”的博文。显示所有博文

2012年11月10日星期六

Linux下面手动安装firefox java插件

最近需要在linux下面使用EBS forms, 因此需要用到firefox+java plugin. 在linux下面安装java时不会自动安装好firefox相应的插件, 因此需要手动操作. 具体的操作十分简单, 只需要建立一个软文件链接即可. 以笔者的为例:
ln -s /usr/java/jdk1.6.0_34/jre/lib/i386/libnpjp2.so /usr/lib/mozilla/plugins/libnpjp2.so
然后重启firefox访问EBS forms试试, 供参考.

--EOF--

2012年11月5日星期一

一个小的Forms Trigger跟踪工具

Oracle forms里面的trigger种类繁多在各个层次都有定义, 并且可以设置trigger的执行方式. 这就导致了很大的灵活性, 以致于有的时候很难去判断某个trigger是否执行.下面是我使用的一个简单工具, 用于记录trigger的相关执行信息.

首先需要创建一张存放trace记录的表及相应的序列:
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)
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;
/
上面的过程可以记录具体的forms/block/item以及哪个level上执行了trigger, 这对于诊断trigger的调用比较有帮助. 通常还有一些另外的情况, 我们需要知道哪段代码被执行了, 以及相关的输出, 但是不需要记录forms/block/item等相关信息, 可以使用下面的存储过程:
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');
以上供参考.
--EOF--

2012年6月21日星期四

Forms Builder 10g IDE介绍

工欲善其事, 必先利其器. 在做forms开发之前, 有必要对Forms Builder这个开发工具有一定程度的了解. 接下来我会参照下图对一些主要的功能进行说明:











域1: 菜单栏
File > Connect/Disconnect 用于数据库连接, 这里会用到tnsnames.ora指定的名称进行连接, 通过环境变量TNS_ADMIN指定.
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一次性进行水平/垂直方向的布局操作, 这个排列布局时比较有用.
其它菜单的功能基本就没有什么值得介绍的了, 看了基本都会用.
域2: Object Navigator
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下面的组件.

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.
域3: Layout Editor
这个区域用于编辑UI界面, 使用快捷键F2调用. 主要使用到的是区域上方用于对其的工具条, 如下:
其他的基本很少会使用到.


域4: Property Palette
属性面板, 使用快捷键F4调用. 每个forms对象包括window/canvas/block/item都有相应的属性可以在属性面板中查看, 由于涉及到的属性多而繁杂, 不作一一列举.
基本上关于forms builder要说的就是这些了, 对比其他的IDE会有很多不同的地方, 个人觉得还是要慢慢适应, 熟能生巧吧.

--EOF--

2012年6月14日星期四

如何在Forms Builder中打开多个plsql编辑窗口

在使用forms builder编写program unit或者trigger代码时会发现当打开一个plsql编辑窗口时会覆盖掉上一个窗口, 这样就带来了诸多的不便.

实际上这是有办法解决的, 在通过双击trigger或者program unit的图标打开编辑窗口时按住shift键, 就可以同时打开多个窗口. 如图:


--EOF--

Basic Forms 10g开发系列

最近打算写一些关于基础forms开发的笔记, 一方面作为分享, 另一方面也是对自己所学知识的一种巩固吧.(06/12/2012) 

这一个系列是关于基础forms开发的. 有相关经验的读者的应该都了解在真正的EBS客户化过程是与基本的forms开发大不相同的, 比如必须基于EBS对应 的模板进行开发, 必须参照相应的数据库的设计规范等等. 但是不要因此而忽略了基础forms开发的重要性, 所有的EBS forms客户化开发都是基础forms 开发的扩展和延伸, 因此有必要学好基础forms开的相关知识.

第一篇: Forms Hello World
第二篇: Forms Builder IDE Introduction

待续.

Forms Hello World

所有的开发语言在作入门介绍时, 都喜欢引用经典的hello world. 在这里我也想采用这种方式来作为forms的入门介绍, 文章的结尾将显示这样一个forms欢迎界面:

首先是forms开发环境的搭建, 参考这里. 如果想省去EBS的安装, 则最好另外安装ORACLE数据库, 虽然听闻可以基于非ORACLE的数据库作forms开发, 但是那样做的意义实在不大.

请参照以下步骤:
1, 打开forms builder, 连接数据库. 在这个例子里面, 任意的数据库账户均可;
2, 新建一个module, 命名为HelloWorld, 另存;
3, 设置Ruler. 在Navigator中选中module, 按下F4打开属性面板, 设置Physical > Coordinate System设置Real Unit为inch;
4, 添加window 与 canvas. 在module里面增加一个window, 设置Functional > Title属性为Hello World, Physical > Width为8, Height为5(这里参考了R12的开发规范). 设置canvas的Physical > window属性, 并将宽度高度设置与上面一致;
5, 添加一个Block. 选择"Build a new data block manually", 在block上面增加一个text item, 设置Physical > width为0, 将canvas属性设置为步骤4中新增的canvas;
6, 添加一个form level trigger when-new-form-instance, 添加如下代码:
message('Hello World, this is my first form.'); 
7, 在canvas界面上添加一个Text Graphic, 内容为"Hello World, this is my first form.", 字体大小设为48.
8, 运行本地的OC4J. 在安装Oracle Developer Suite 10g的时候会自带OC4J.
9, 在forms builder中点击运行form即可.

到此为止第一个forms就完成了. 步骤有点多并且对于初学者而言可能会有些地方不是太明白, 那么请关注我后续的文章.

--EOF--