楼主: 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
31#
 楼主| 发表于 2008-8-24 15:44 | 只看该作者
2. 显示Message
    显示Message使用FND_MESSAGE API函数,根据需要选用。
• FND_MESSAGE.ERROR to display an error
• FND_MESSAGE.WARN to display a warning
• FND_MESSAGE.QUESTION to display a question
• FND_MESSAGE.SHOW to display an informational message
• FND_MESSAGE.HINT to display a hint

还有一点比较遗憾,练习中提及可以设置外部文件,获取和写入Message信息,我试了,好像有报错,可能是路径不对,以后再研究吧

使用道具 举报

回复
论坛徽章:
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
32#
 楼主| 发表于 2008-8-24 20:42 | 只看该作者
刚开始看这一节的文档时,觉的Flexfields的概念很难理解,生吞活剥地按照步骤做完这一练习,再联系后面几节的练习又生吞了一遍文档,Flexfields的面貌才渐渐清晰过来。
     学完了这节,我才知道为什么Orders表中会有atrribute1~attribute9这几个奇怪的字段。
     Flexfields分为两种,Key Flexfields和Discriptive Flexfields,Flexfields中包含的字段叫做segment。尽管使用Flexfields的目的都是使系统获得更加具有柔性的数据结构,但是两种Flexfields的作用、组成结构和使用时机都有很大的不同。

使用道具 举报

回复
论坛徽章:
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
33#
 楼主| 发表于 2008-8-24 20:43 | 只看该作者
1. Key Flexfields
     在我看来,Key Flexfields可以看作是Keys的集合,这些Keys每个都对应与数据库中的一个字段。而且每个Key Flexfield都对应一个Combination Table,按照Combination Table的不同使用Key Flexfields主要可分为三类:一是Combinations Form(Maintenance Form), Key Flexfield对应的字段的基表就是Combination Table,Table中会包括structure id和很多segment字段,segment字段记录那些Keys的值;二是Form with Foreign Key Reference ,基表中Key Flexfield对应的字段作为外键引用了Combination Table中的主键字段,同样改Table中也会包括structure id和很多segment字段。通过查看Combination Table的记录,我觉得该表包含了多个Key字段的所有可能的组合(如果Key很多的话,这样是不是重复太多了);三是Form with a Range Flexfield ,使用这种类型的Flexfield,并不需要真正绑定一个Combination Table,只需在一个Table设置structure id和多个segment N_LOW、segment N_HIGH字段,多用于出报表的情况。
     使用Key Flexfield时,由于可为每个Key Flexfield定义多个structure(对应上段提及的structure id),因此在系统中根据商务规则的需要动态的改变Key Flexfield的structure。从下图可看出,title为Accounting Flexfield的Flexfield具有多个structure。

1.JPG (38.46 KB, 下载次数: 21)

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
34#
 楼主| 发表于 2008-8-24 20:44 | 只看该作者
2. Discriptive Flexfields
     Discriptive Flexfields相对来说比较容易些,没有那么多类别,依赖的基表就是Form的基表,表中包含了Attribute Catalog和多个Attribute N字段,至于Attribute Catalog字段我个人觉得和Key Flexfield中的structure id字段功能类似,不知道是否正确。

1.JPG (18.02 KB, 下载次数: 18)

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
35#
 楼主| 发表于 2008-8-24 20:44 | 只看该作者
与定义Key Flexfield类似,定义Discriptive Flexfields时定义一个Flexfield时不过指定对应的 Application和Base Table,就是向指定场所和提供了原材料,至于如何将这些原材料组合成什么样的structure以及这些structure中的segment又有什么特殊的要求,其实是在Segment窗体中设置的。

1.JPG (30.97 KB, 下载次数: 66)

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
36#
 楼主| 发表于 2008-8-24 20:45 | 只看该作者
3. 开发Flexfields的步骤
*设计合理的Combination Table表结构,根据Flexfield 的类别,创建相应的Combination Table并设计合适的attribute 、segment、structure id、attribute catalog等字段。
*在Form 6i中创建Flexfield:
Discriptive Flexfield:property class —〉TEXT_ITEM_DESC_FLEX ,List of Values —〉ENABLE_LIST_LAMP  
Key Flexfield:List of Values —〉ENABLE_LIST_LAMP  
如果是Range Flexfields,就创建2个field 。
*调用Flexfield的API函数,在Form-level的when-new-form-instance trigger中调用。
• FND_DESCR_FLEX.DEFINE for descriptive flexfields
• FND_KEY_FLEX.DEFINE for key flexfields
• FND_RANGE_FLEX.DEFINE for range flexfields
FND_DESCR_FLEX.DEFINE和FND_KEY_FLEX.DEFINE参数有所不同。
Eg:
FND_KEY_FLEX.DEFINE(
BLOCK=>’LINES’,
FIELD=>’ACCTG_FLEX_VALUES’,
ID=>’GL_ACCOUNT_CC_ID’,
APPL_SHORT_NAME=>’SQLGL’,
CODE=>’GL#’,
NUM=>’101’);

FND_DESCR_FLEX.DEFINE(
BLOCK=>’ORDERS’,
FIELD=>’DESC_FLEX’,
APPL_SHORT_NAME=>’DEM’,
DESC_FLEX_NAME=>’DEM_ORDERS’);
这种区别和不同Flexfield的定义方法有关。
此外在Form-level的下列trigger中,加入后面的函数。如果在block/item-level 上override了这些trigger,在处理代码中加上后面的函数。Block/ item-level的 POST-QUERY trigger,Execution Hierarchyà ‘After’。
PRE-QUERY                   FND_FLEX.EVENT(‘PRE-QUERY’);
POST-QUERY                  FND_FLEX.EVENT(‘POST-QUERY’);
PRE-INSERT                   FND_FLEX.EVENT(‘PRE-INSERT’);
PRE-UPDATE                  FND_FLEX.EVENT(‘PRE-UPDATE’);
WHEN-VALIDATERECORD      FND_FLEX.EVENT(‘WHEN-VALIDATE-RECORD’);
WHEN-NEW-ITEMINSTANCE    FND_FLEX.EVENT(‘WHEN-NEW-ITEMINSTANCE’);
WHEN-VALIDATE-ITEM        FND_FLEX.EVENT(‘WHEN-VALIDATE-ITEM’);
    另外TEMPLATE form在下列form-level triggers调用的APP_STANDARD.EVENT 过程直接调用了FND_FLEX函数。如果在block/item-level 上override了这些trigger,在处理代码中加上后面的函数。
KEY-EDIT                     APP_STANDARD.EVENT(‘KEY-EDIT’);
KEY-LISTVAL                 APP_STANDARD.EVENT(‘KEY-LISTVAL’);
POST-FORM                   APP_STANDARD.EVENT(‘POST-FORM’);
*在系统中注册Flexfield
    注册Key Flexfield时,可以使用Qualifiers来设置Key之间的规则,Columns设置包含的可用列(尽管不会全被用到),KFV View Name和定义Descriptive Flexfield时DFV View Name类似,是一种特殊的View,用于生产报表,其名字我无法更改,猜想是系统根据Table Name自动生成。(假如一个Table使用了两个Description Flexfield,DFV View Name该如何命名?)

1.JPG (20.34 KB, 下载次数: 17)

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
37#
 楼主| 发表于 2008-8-24 20:45 | 只看该作者
*在系统中定义Flexfield
定义Flexfield,Key Flexfield实际是用Segment窗体定义Structure及其对应的Segments,Descriptive Flexfield是用Segment窗体定义Context及其对应的Segments,每个Segment的值还可通过Value Set ,Segment Value去控制,具体的设置方法我就没有深入研究了。
最后我总结一下Flexfield的使用步骤:首先定义合理的Combination Table,这个是必须的前提。然后在系统里注册并定义需要的Flexfield,接着在Form 6i中添加Flexfield字段并设置好属性,最后在Form-Level的when-new-form-instance trigger中调用函数设置Flexfield到相关字段,注意在相应级别的trigger中添加处理函数或修改属性。

使用道具 举报

回复
论坛徽章:
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
38#
 楼主| 发表于 2008-8-24 20:46 | 只看该作者
明天在来

使用道具 举报

回复
论坛徽章:
16
奥运会纪念徽章:游泳
日期:2008-06-27 08:53:59ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262011新春纪念徽章
日期:2011-02-18 11:43:33ITPUB元老
日期:2010-10-20 09:36:47ITPUB9周年纪念徽章
日期:2010-10-08 09:31:22参与WIN7挑战赛纪念
日期:2009-11-06 11:40:06生肖徽章2007版:兔
日期:2009-04-23 09:25:22生肖徽章2007版:鼠
日期:2009-03-10 21:32:40生肖徽章2007版:猴
日期:2009-03-10 21:23:27CTO参与奖
日期:2009-02-12 11:45:48
39#
发表于 2008-8-25 09:50 | 只看该作者
楼主辛苦

使用道具 举报

回复
论坛徽章:
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
40#
 楼主| 发表于 2008-8-25 19:26 | 只看该作者
Lab 15: Query Find
Query Find的主要作用是在Non-Query状态下查询记录,而且比query mode要灵活方便。主要有两类用法:Row-LOV和Find window。所有queryable block都应该支持这两种用法中的一种,否则主菜单中ViewàFind…/Find All会报错。

1. Row-LOV
Row-LOV类似与普通LOV,在下列情况下适于使用:
*一次只返回一条记录,特别适合single row block;
*在detail block中自动查询关联master block的所有记录;
*基于主键而不是其他属性查询记录;
*数据量很少的情况。
下面是创建Row-LOV的步骤:首先创建一个parameter用于存储返回的Primary Key,接着创建合适的Row-LOV设置Primary Key返回给parameter,再创建block-level PRE-QUERY trigger (Execution Hierarch—>Before)
    IF arameter.G_query_find = 'TRUE' THEN
    :lines.order_line_num := arameter.ORDER_LINE_NUM_QF;
    arameter.G_query_find := 'FALSE';
end if;
最后创建block-level QUERY_FIND trigger (Execution Hierarch—>Override)
app_find.query_find('ORDER_LINES_QF');

使用道具 举报

回复

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

本版积分规则 发表回复

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