Oracle Form Builder中Form的布局方法、 赋初始值及Item对象的相关属性

一、Form的布局方法

一个Form Module可能包含了多个window,多个Data Block,多个canvas,在对象众多的情况下,布局方法遵循一定的规则可让你事半功倍。

Form Module的基本结构,如图

一般来说布局,应按照windows-canvases-data block-items的顺序,先简单说明下各对象与布局相关的属性。

Window
Property        Note
X Position        Form启动时X轴坐标
Y Position        Form启动时Y轴坐标
Width        Form实际宽度
Height        Form实际高度

Canvas
Property        Note
Window        指定Canvas所在的window 7
View X Position on Canvas        可见部分相对于Canvas 的X轴坐标,通常置0
View Y Position on Canvas        可见部分相对于Canvas 的Y轴坐标,通常置0
Width        Canvas实际宽度
Height        Canvas实际高度

Canvas一般都要设置以上属性,但是根据Property Class的不同,几类canvas还是有所区别。

        1、Content Canvas又称基础画布或内容画布,是必不可少的。一般情况下Content Canvas的宽和高应设置和windows的宽高一致或略小于,建议是设成一样。

        2、CANVAS_STACKED Canvas又称堆叠画布。在需要显示得列太多,界面上无法一次排开的情况,需要使用滚动条时多用到这种画布。这种类型的画布,一般Canvas的宽和高要比Viewport的宽和高要大得多,另外还要设置Show Horizontal Scroll Bar属性为Yes,允许使用横向滚动条。

        3、Tab_Canvas又称标签画布,此类画布使用起来比较简单再此就不再赘述。

Block
注意设置Number of Records Dispalyed和相关的Scrollbar属性。
Property        Note
Navigate Style        Same Record/Change Record/ Change Data Block 10
Previous Navigation Data Block        比如关闭一个window后,光标会落到Previous Block上的第一个可导航Item时
Next Navigation Data Block        当导航方式为Change Data Block时,光标落在前一个块最后一个可导航Item时,再按tab键,光标就会跳到Next Block上

***当Previous Navigation Data Block,Next Navigation Data Block属性为空时,系统会自动根据Form Builder对象树各block的排列顺序,自动决定各Block的导航顺序。这种默认的方式可能会带来其他的问题,比如关闭窗体时,光标落在不该落到的块上,最好指定一下。

Item
Item和布局属性相关的属性有Property Class和相关prompt属性。我一般的做法是根据不同类型字段先批量修改Property Class和Format mask,第二步根据Block的设置批量设置ITEM的相关prompt属性如:
Property        Note
width        宽度
height        高度
Keyboard Navigable        设置Item是否可使用tab键导航
Previous Navigation Item        前一个可导航Item(可能会向前导航到前一个块的最后一个可导航Item)
Next Navigation Item        后一个可导航Item时(可能会向后导航到后一个块的第一个可导航Item)

***注意当Previous Navigation Item,Next Navigation Item属性为空时,系统会自动根据Form Builder对象树各block下Item的排列顺序,自动决定各Item的导航顺序。所以当我们不想去设置Item的导航顺序,又希望界面上各字段能够按照从上到下从左到右的顺序导航,那么就必须合理安排各Item的排列顺序,切记。

每个ITEM的prompt的属性值,会在layout 窗口中部分修改。

二、赋初始值

        在form中需要记录一些变量的值,这些值在Form的整个运行过程中都可能被引用,为了避免重复的获取,我们采用的策略为在Form的when-new-form-instance时间中将这些变量读取出来赋值给parameter(有时候是存入global变量中),以后对这些变量的引用就转换成对Form parameter的引用。以下是程序示例:
Procedure Get_Profile_Parameter Is
Begin
    Fnd_Profile.Get('ORG_ID', :Parameter.g_Org_Id);
    Fnd_Profile.Get('USER_ID', :Parameter.g_User_Id);
    Select User_Name
      Into :Parameter.g_User_Name
      From Fnd_User
     Where User_Id = :Parameter.g_User_Id;
    Select Nvl(Employee_Id, 100)
      Into :Parameter.g_Employee_Id
      From Fnd_User
     Where User_Id = :Parameter.g_User_Id;
End Get_Profile_Parameter;

        对于Item来说也需要赋初始值,设置日期型字段的初始值为当前日期,某主键字段为sequence的nextval
Eg:

Data Type        Initial Value                                              Note
Date                $$DATE$$                                                当前日期
NUMBER        :sequence.order_header_s.nextval          取自sequence
NUMBER        fnd_ profile.value(‘org_id’)                        取自系统变量
Char                :parameter.G_USER_NAME                    取自parameter

三、Item对象的相关属性

        各种Item由于property class的不同视觉效果与属性设置都有所不同,下面简单列举各类Item属性设置需要注意的地方。

1.Text Items
        可以根据需要为Text Items设置不同的Property Class,TEXT_ITEM,TEXT_ITEM_DISPLAY_ONLY,TEXT_ITEM_MULTILINE, TEXT_ITEM_DATE ,
REATION_OR_LAST_UPDATE_DATE,TEXT_ITEM_PERCENT_FIXED等。对于各种类型的字段,注意根据data type设置合适的Format mask。

2. Display Items
        应当设置足够宽以显示数据库中该项的最长内容。

3. Check Boxes
需要特别注意的属性
Property        Note
Value when checked
Value when unchecked
Check Box mapping of other values        checked/ unchecked/not allowed,当该选项为not
allowed时,必须指定Initial value,否则编译出错。
        还有一类比较特殊的Check Boxes(property class-CHECKBOX_COORDINATION),用以控制Master-Detail Block的关联行为。

4. Buttons
        可设置Access Key。(ALT+KEY)

5. Option Groups
        必须设定缺省值。

6. Poplists
        在可选值不超过15个情况下,Poplists是个不错的选择,对Poplists的编程应对应List Item Value。应尽量避免将Poplists设为multi-row blocks的首字段。
Property        Note
List Style        列表风格,poplist/combox/tlist使用前两种风格居多,在设置poplist
风格的Elements时,有几项就输入几项,鼠标不要做多余的操作,比如明明只有4项,偏要点到第5项上去,虽然什么都不输入,编译后列表就是多出白花花的一行,非常的难看,此时只有删除该列表Item,重头来过,甚是麻烦。
mapping of other values        不指定的话遇到该项数据不匹配的情况,可能整条记录都被屏蔽。
Initial value        不指定的话编译时会提示,不影响程序。

7. LOVS
        LOV可以比Poplists容纳更多的记录,使用中需注意的地方在后续章节介绍。

8. Flexfields
        关于Key弹性域和Descriptive弹性域的介绍。

9. Current Record Indicator
        建议对于多行的Block都建立一个Property Class为CURRENT_RECORD_INDICATOR的非数据字段,作用:当前记录指示器。

10. Rowid
        这个字段不是必需但很有用。Property Class:ROW_ID,当需要利用记录的物理地址更新或删除一条记录时,该字段就是必需的,当然前提是Block的数据源中必须包含该字段。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值