楼主: ganghz

[转载] Oracle Form 6i开发

[复制链接]
论坛徽章:
259
地主长老
日期:2008-05-16 13:45:41春季摄影比赛纪念奖
日期:2008-06-04 10:35:252008欧洲杯之星
日期:2008-07-01 14:52:28金牌徽章
日期:2008-09-04 11:32:50地主之星
日期:2009-03-30 10:29:22欧洲冠军杯纪念徽章
日期:2009-05-31 09:59:59NBA季后赛大富翁
日期:2009-06-16 11:48:01NBA之星
日期:2010-04-15 14:14:34NBA大富翁
日期:2010-04-15 14:17:22博彩之星
日期:2010-07-12 13:14:39
11#
 楼主| 发表于 2008-8-24 15:12 | 只看该作者
然后就可以在Responsibility窗体中添加Menu或function了。  
  最后在User窗体中添加Responsibility。

1.JPG (25.46 KB, 下载次数: 13)

1.JPG

使用道具 举报

回复
论坛徽章:
259
地主长老
日期:2008-05-16 13:45:41春季摄影比赛纪念奖
日期:2008-06-04 10:35:252008欧洲杯之星
日期:2008-07-01 14:52:28金牌徽章
日期:2008-09-04 11:32:50地主之星
日期:2009-03-30 10:29:22欧洲冠军杯纪念徽章
日期:2009-05-31 09:59:59NBA季后赛大富翁
日期:2009-06-16 11:48:01NBA之星
日期:2010-04-15 14:14:34NBA大富翁
日期:2010-04-15 14:17:22博彩之星
日期:2010-07-12 13:14:39
12#
 楼主| 发表于 2008-8-24 15:13 | 只看该作者
下面就真正开始进入Oracle form的开发。拷贝template.fmb的副本,打开后重命名为在定义Forms时form字段的名字,必须这样命名,否则系统找不到该form的可执行文件,我的窗体文件就叫DEMVCEOR.fmb
   可以这么认为,最大的容器对象是Form,一个form可以包括多个window,一个window可以包括多个canvas,canvas又分content canvas ,tab canvas和stacked canvas,content canvas上可以容纳tab canvas和stacked canvas,一个canvas又可以布置多个item;另一个体系是data,一个form可以包括多个datablock,一个datablock可以包括多个item。我觉得item 是连接data和layout的桥梁,如果是基于数据库的item,就必须指定Database Item属性为Yes,并为Column Name属性赋相应值。若该Item需要显示在Canvas上,那就必须指定该Item的Canvas属性。除此之外,还需为每个canvas指定其对应的window属性。
    可以在block的属性中设置scroll bar属性;如果block要显示的是单条记录的话,设置Navigator Style属性为Same Record,如果要显示的是多条记录的话,设置Navigator Style属性为Change record;假如block的数据源是基于复杂视图的话,Key Mode属性设为Non-Updateable;
     在设置master-detail blocks时,在master block中可以设置许多控制master-detail行为的属性。例如:Master Deletes,Coordination等。Relation应当创建在master block中。我在练习中曾犯过这样的错误,在master和detail blocks中设置了相同的Relation,结果挂到系统里一看detail block中的数据怎么也出不来,同事告诉我这是因为两个block中的Relation形成了死锁。他还说如果要删除detail block的Relation,应在master block的data block wizard中进行,反之亦然。我自己在object navigator里直接删除了detail block的Relation,结果也没问题,所以我就没用他的方法。
    此外,还需设置各个block的顺序,如果没有显式指定各个block的Previous Navigation Data Block 和 Next Navigation Data Block,那么导航顺序将默认为各个
Block在object navigator中的顺序。此外module的Navigation Block属性将决定窗口打开时展现的block及其所在的Canvas、window。此外,最好将每个block的主键字段的item-level Primary Key属性设为Yes。
在本练习中,我还遇到了练习中遇到的第一个trigger,在后面的一节我会重点总结trigger。
还有一点不可忽视的是,对于object navigator中窗体的每个对象,都应尽可能地设置正确的Property Class,否则在Form 6i中设计的对象在窗体被挂到系统中时无法正常显示,我被该问题困扰许久,直到问过同事才搞清楚,Form 窗体的大多数对象都有对应的Property Class,开发时应一一设上。

使用道具 举报

回复
论坛徽章:
259
地主长老
日期:2008-05-16 13:45:41春季摄影比赛纪念奖
日期:2008-06-04 10:35:252008欧洲杯之星
日期:2008-07-01 14:52:28金牌徽章
日期:2008-09-04 11:32:50地主之星
日期:2009-03-30 10:29:22欧洲冠军杯纪念徽章
日期:2009-05-31 09:59:59NBA季后赛大富翁
日期:2009-06-16 11:48:01NBA之星
日期:2010-04-15 14:14:34NBA大富翁
日期:2010-04-15 14:17:22博彩之星
日期:2010-07-12 13:14:39
13#
 楼主| 发表于 2008-8-24 15:13 | 只看该作者
这个练习主要介绍了各种widget。
无论是在region、block还是在window 中,item的导航顺序(Tab)总是从左到右,从上到下。
1.Text Items
    可以根据需要为Text Items设置不同的Property Class。大多数情况下property class—TEXT_ITEM,只读文本框property class—TEXT_ITEM_DISPLAY_ONLY,多行文本框property class—TEXT_ITEM_MULTILINE,日期文本框property class—TEXT_ITEM_DATE , WHO日期文本框 property class—CREATION_OR_LAST_UPDATE_DATE,百分数文本框property class—TEXT_ITEM_PERCENT_FIXED。
  Validate from List—Yes意味着配合LOV使用的Text Items可以根据输入的内容自动在LOV中寻找对应的内容。

使用道具 举报

回复
论坛徽章:
259
地主长老
日期:2008-05-16 13:45:41春季摄影比赛纪念奖
日期:2008-06-04 10:35:252008欧洲杯之星
日期:2008-07-01 14:52:28金牌徽章
日期:2008-09-04 11:32:50地主之星
日期:2009-03-30 10:29:22欧洲冠军杯纪念徽章
日期:2009-05-31 09:59:59NBA季后赛大富翁
日期:2009-06-16 11:48:01NBA之星
日期:2010-04-15 14:14:34NBA大富翁
日期:2010-04-15 14:17:22博彩之星
日期:2010-07-12 13:14:39
14#
 楼主| 发表于 2008-8-24 15:13 | 只看该作者
2. Display Items
Display Item应当设置的足够宽以显示数据库中取出的内容。
3. Check Boxes
    Check Boxes需要设置一个数据库内容对应的值。还有一类比较特殊的Check Boxes(property class—CHECKBOX_COORDINATION),用以控制Master-Detail Block的关联行为,在随后的练习中能看到。
4. Buttons
可设置Access Key。
5. Option Groups
    必须设定缺省值。
6. Poplists
    在可选值不超过15个情况下,Poplists是个不错的选择。和.net平台下的dropdownlist控件类似,它也有List Elements和List Item Value(大写字母)之分,对Poplists的编程应对应List Item Value。应尽量避免将Poplists设为multi-row blocks的首字段。
7. LOVS
LOV可以比Poplists容纳更多的记录,而且设置上也比较复杂,随后有专门的练习。
8. Descriptive Flexfields
关于Key弹性域和描述性弹性域后面的练习会有更详细的说明,我觉得这个东西有点难理解,暂且把它当成某个数据库字段来用了。

使用道具 举报

回复
论坛徽章:
259
地主长老
日期:2008-05-16 13:45:41春季摄影比赛纪念奖
日期:2008-06-04 10:35:252008欧洲杯之星
日期:2008-07-01 14:52:28金牌徽章
日期:2008-09-04 11:32:50地主之星
日期:2009-03-30 10:29:22欧洲冠军杯纪念徽章
日期:2009-05-31 09:59:59NBA季后赛大富翁
日期:2009-06-16 11:48:01NBA之星
日期:2010-04-15 14:14:34NBA大富翁
日期:2010-04-15 14:17:22博彩之星
日期:2010-07-12 13:14:39
15#
 楼主| 发表于 2008-8-24 15:14 | 只看该作者
上图反映了Layout的一般顺序。
布局设置:Format—>Layout Options—>Ruler中可以设置Content Canvas标尺的间距;Format—> Ruler设置是否在Layout界面中显示标尺栏;Format—> Grid设置是否在Layout界面中显示间距点;Format—> Snap to Grid设置是否以设定大小进行控件在Layout界面中的移动;Format—> Show View设置是否在Layout界面中显示window的尺寸;Format—> Show Canvas设置是否在Layout界面中显示Content Canvas
对于各个Item来说,考虑到界面转译的需要,应尽量给promptlabel等描述性字段留出足够的空间。
Coordination Check Boxes 是个比较特殊的对象,如果Master-Detail Blocks分属不同的windowsCoordination Check Boxes应放在Detail Blocks所在window的右上方。否则如果Master-Detail Blocks在同一window中以分界线隔开,Coordination Check Boxes应放在分界线右边window最右边3个字符的位置。还有一种布局与folder title有关,放在folder title line最右边3个字符的位置。

1.JPG (10.62 KB, 下载次数: 23)

1.JPG

使用道具 举报

回复
论坛徽章:
259
地主长老
日期:2008-05-16 13:45:41春季摄影比赛纪念奖
日期:2008-06-04 10:35:252008欧洲杯之星
日期:2008-07-01 14:52:28金牌徽章
日期:2008-09-04 11:32:50地主之星
日期:2009-03-30 10:29:22欧洲冠军杯纪念徽章
日期:2009-05-31 09:59:59NBA季后赛大富翁
日期:2009-06-16 11:48:01NBA之星
日期:2010-04-15 14:14:34NBA大富翁
日期:2010-04-15 14:17:22博彩之星
日期:2010-07-12 13:14:39
16#
 楼主| 发表于 2008-8-24 15:15 | 只看该作者
LOV相对于Poplists来说,可以容纳的记录更多,使用起来也更加灵活。
创建正确的LOV的前提是创建正确的Record Group,顺序是:在select语句中选择需要的column—>选择需要显示的column—>设置column的title和description —> 设置column的Return Value—>指定能使用该LOV的item—>设置LOV的Title和尺寸。
如果LOV在发现符合查询条件的返回记录只有一条时,自动选择该记录。如果查询到的记录很多的话,设置Automatic Refresh—> Yes,系统会缓存这些记录。
对于和LOV配合使用的其它item对象来说,必须指定其List of Values属性。

使用道具 举报

回复
论坛徽章:
259
地主长老
日期:2008-05-16 13:45:41春季摄影比赛纪念奖
日期:2008-06-04 10:35:252008欧洲杯之星
日期:2008-07-01 14:52:28金牌徽章
日期:2008-09-04 11:32:50地主之星
日期:2009-03-30 10:29:22欧洲冠军杯纪念徽章
日期:2009-05-31 09:59:59NBA季后赛大富翁
日期:2009-06-16 11:48:01NBA之星
日期:2010-04-15 14:14:34NBA大富翁
日期:2010-04-15 14:17:22博彩之星
日期:2010-07-12 13:14:39
17#
 楼主| 发表于 2008-8-24 15:15 | 只看该作者
我觉得这节是学习form 开发的重点和难点。这一节里又会出现很多的概念、术语、以及和Oracle数据库相关的一些知识。
    首先我花了些时间去搞清楚Handler的概念,于.net平台下的事件驱动机制类似,form也依靠events,不同点在于form把这些事件分了form,block,item三个层次,以trigger的形式面向开发者。而Handler就类似于处理事件的函数,不同的是Handler既可以位于database server层,又可以位于application server层。通常这些handlers被封装在package对象中,调用方式如:package_name. handler_name。按照作用对象的不同,Handler又可以分为Item handlers、Event handlers、Table handlers三类。

使用道具 举报

回复
论坛徽章:
259
地主长老
日期:2008-05-16 13:45:41春季摄影比赛纪念奖
日期:2008-06-04 10:35:252008欧洲杯之星
日期:2008-07-01 14:52:28金牌徽章
日期:2008-09-04 11:32:50地主之星
日期:2009-03-30 10:29:22欧洲冠军杯纪念徽章
日期:2009-05-31 09:59:59NBA季后赛大富翁
日期:2009-06-16 11:48:01NBA之星
日期:2010-04-15 14:14:34NBA大富翁
日期:2010-04-15 14:17:22博彩之星
日期:2010-07-12 13:14:39
18#
 楼主| 发表于 2008-8-24 15:15 | 只看该作者
1. Item Handlers
Item Handlers 经常会在多种trigger触发的时候被调用,比如一个Item会在WHEN-VALIDATE-ITEM、WHEN-NEW-RECORD-INSTANCE和初始化的时候被触发,每种触发事件的处理方法又不一样,于是定义如下的Handlers,并在相应的trigger中调用。
Eg:
PROCEDURE item_name (EVENT VARCHAR2) IS
BEGIN
IF (EVENT = ’INIT’) THEN
... /* your code here */
END IF;
IF (EVENT = ’WHEN_NEW_RECORD_INSTANCE’) THEN
... /* your code here */
END IF;
IF (EVENT = ’WHEN_VALIDATE_ITEM’) THEN
... /* your code here */
END IF;
END item_name;

2. Events Handlers
在某个Event发生时,可以调用多个对象的与该 Events相关的Events Handlers,需要注意的是Events Handlers必须以该Event命名。

3. Table Handlers
    Table handlers主要支持block-level views的insert、update、delete和locks操作。
    那么这些代码究竟是存放于database server层,还是存放于application server层?有这样的标准:调用Oracle Forms built-ins和直接引用数据库字段(我的理解是硬编码的)的Procedures,放在application server层;调用数据库Procedures的、使用多个表和程序的和大型的(>64k)Procedures,放在database server层。Oracle建议:复杂的SQL代码尽量放到database server层;尽量用存储过程参数的形式代替直接引用数据库字段的形式;而且对于某些Procedures的使用,根据实际情况可以同时放在database server层和application server层。

使用道具 举报

回复
论坛徽章:
259
地主长老
日期:2008-05-16 13:45:41春季摄影比赛纪念奖
日期:2008-06-04 10:35:252008欧洲杯之星
日期:2008-07-01 14:52:28金牌徽章
日期:2008-09-04 11:32:50地主之星
日期:2009-03-30 10:29:22欧洲冠军杯纪念徽章
日期:2009-05-31 09:59:59NBA季后赛大富翁
日期:2009-06-16 11:48:01NBA之星
日期:2010-04-15 14:14:34NBA大富翁
日期:2010-04-15 14:17:22博彩之星
日期:2010-07-12 13:14:39
19#
 楼主| 发表于 2008-8-24 15:16 | 只看该作者
4.编码标准
    Oracle提出了一下的编码标准来提高性能:
      *引用字段时,使用BlockName.ItemName的形式;
      *使用亚元直接用dual,不要用sys.dual和system.dual;
      *使用object IDs获得更好的性能;
declare
x_id item;
begin
x_id := find_item(’block.item’);
/* your code here */
end;
      *总是使用显式游标;
      *超过64k的Package存放与database server层,每个Package包含的Procedures和Functions总数不超过25;
      *处理好异常;(本练习接触的不多)FND_MESSAGE 显示系统信息,FORM_TRIGGER_FAILURE 停止application层的事务, APP_EXCEPTION.RAISE_EXCEPTION停止database层的事务,此外还需编码处理可预计的database server异常。
     同时Oracle还建议尽可能用Application 语法代替Forms built-ins ;
Eg:
* FND_FUNCTION.EXECUTE代替OPEN_FORM;
*不要使用CALL_FORM;
* do_key(‘exit_form’)代替EXIT_FORM;
* do_key(‘commit_form’)代替COMMIT;
* do_key(‘edit_field’)代替EDIT_FIELD/EDIT_TEXTITEM;
5.Examine工具
最后我还要提一下一个很有用的调试工具,当系统运行时,窗体Menu :Help–>Tools–>Examine,可以在这个工具中查看系统变量,全局变量,操作系统环境变量,SQL*PLUS变量,用户概要文件设置以及显示/隐藏的字段值。虽然我现在还不大熟悉这个功能,直觉告诉我能否用好这个工具也是高手与菜鸟的区别之一。

使用道具 举报

回复
论坛徽章:
259
地主长老
日期:2008-05-16 13:45:41春季摄影比赛纪念奖
日期:2008-06-04 10:35:252008欧洲杯之星
日期:2008-07-01 14:52:28金牌徽章
日期:2008-09-04 11:32:50地主之星
日期:2009-03-30 10:29:22欧洲冠军杯纪念徽章
日期:2009-05-31 09:59:59NBA季后赛大富翁
日期:2009-06-16 11:48:01NBA之星
日期:2010-04-15 14:14:34NBA大富翁
日期:2010-04-15 14:17:22博彩之星
日期:2010-07-12 13:14:39
20#
 楼主| 发表于 2008-8-24 15:16 | 只看该作者
这节练习主要介绍了如何对windows进行控制。概括起来包括:打开windows,关闭windows,控制master-detail windows。
   在分别介绍之间,先来了解以下windows的动作规则:
   *在非模型窗体中不要使用button编码关闭窗体,使用关闭箭头或menu项;
   *可以通过CASCADE, RIGHT, BELOW, OVERLAP or CENTER参数设置detail window 与master window之间的相对位置;
   *Context-dependent titles remain in context这个没大理解,估计说的是动态生成window title依赖于那些在title中出现的字段;
   *在query模式下window不能被关闭;
   *关闭window后并不会自动执行commit操作,除非开发人员编码提交;
   *关闭parent window时系统会提醒用户是否保存detail window变化;
   *关闭window后,焦点会离开该窗体返回previous block所在windows;
   *关闭master window会自动关闭其所有detail windows 和其相关的find windows;
*关闭first window会退出form。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表