尽管Oracle的Developer工具已经升级到9i、10g,但EBS中使用的Forms Server和Forms Builder版本还是6i,今后的开发将逐步转移到Java,Oracle将来也不会在EBS中使用高于6i的Forms。
Developer 6i的安装不够友好,必须安装到Default Home,为避免手工修改注册表的烦恼,最好先安装6i,再安装其他Oracle产品。
使用Form创建一些数据对象
- 创建List
其中,Mspping of Other Values 这个属性,他的意思是,
从数据库中读出来的数据,不在这个列表内(这里是I和E),那么要映射为I还是E,如果不映射,那么该条记录将无法在Form中显示出来,表现出来的现象就是“数据库和View中明明有,界面却看不到”。
删除List中的条目,使用Ctrl+Shift+<删除快捷键
- LOV 注意事项:
不管是自动选择还是手工选择,只有“选择”了,才会触发LOV中各列的值返回给对
应的目标Item;而不验证的LOV就要注意了,因为其可能没有经过“选择”这一步。LOV还有个麻烦的问题,如果清空了Item的值,因为空值不触发验证,这样之前返回
到各个目标Item上的值并没有自动被清空,需要写代码处理。
- 字段和记录的控制
字段的控制,最常见的就是默认值、是否必需、是否可以更新、是否可以F11查询。其
他的都可以顾名思义,可直接看各个属性。字段控制实例:
Customer、Sales Person、Price List在状态为非“Entered”的情况下,才不可更新
的,这需要用代码实现。在Block的WHEN-NEW-RECORD-INSTANCE触发器中写入
下代码,最好写成program unit:
if :ORDER_HEADERS.FLOW_STATUS_CODE = 'ENTERED' then
app_item_property.set_property('ORDER_HEADERS.CUSTOMER_NAME',UPDATE_ALLOWED,PROPERTY_TRUE);
app_item_property.set_property('ORDER_HEADERS.SALESREP_NAME',UPDATE_ALLOWED,PROPERTY_TRUE);
app_item_property.set_property('ORDER_HEADERS.PRICE_LIST_NAME',UPDATE_ALLOWED,PROPERTY_TRUE);
else
app_item_property.set_property('ORDER_HEADERS.CUSTOMER_NAME',UPDATE_ALLOWED,PROPERTY_FALSE);
app_item_property.set_property('ORDER_HEADERS.SALESREP_NAME',UPDATE_ALLOWED,PROPERTY_FALSE);
app_item_property.set_property('ORDER_HEADERS.PRICE_LIST_NAME',UPDATE_ALLOWED,PROPERTY_FALSE);
end if记录的控制,最常见就是显示条数、是否可增/删/改/查、是否可以F11查询、是否显
示滚动条。本例需要实现,在状态为非“Entered”的情况下,记录不可删除,这样需
要在Block的WHEN-NEW-RECORD-INSTANCE触发器中追加代码(红色部分),最
好写成program unit:if :ORDER_HEADERS.FLOW_STATUS_CODE = 'ENTERED' then
app_item_property.set_property('ORDER_HEADERS.CUSTOMER_NAME',UPDATE_ALLOWED,PROPERTY_TRUE);
app_item_property.set_property('ORDER_HEADERS.SALESREP_NAME',UPDATE_ALLOWED,PROPERTY_TRUE);
app_item_property.set_property('ORDER_HEADERS.PRICE_LIST_NAME',UPDATE_ALLOWED,PROPERTY_TRUE);
set_block_property('ORDER_HEADERS',DELETE_ALLOWED,PROPERTY_TRUE);
else
app_item_property.set_property('ORDER_HEADERS.CUSTOMER_NAME',UPDATE_ALLOWED,PROPERTY_FALSE);
app_item_property.set_property('ORDER_HEADERS.SALESREP_NAME',UPDATE_ALLOWED,PROPERTY_FALSE);
app_item_property.set_property('ORDER_HEADERS.PRICE_LIST_NAME',UPDATE_ALLOWED,PROPERTY_FALSE);
set_block_property('ORDER_HEADERS',DELETE_ALLOWED,PROPERTY_FALSE);
end if;
- 日历控件
1、 编写Item的KEY-LISTVAL触发器:calendar.show;
2、 设置Item的List of Values属性:ENABLE_LIST_LAMP
3、 设置Item的Validate from List属性:No