OAF中的MASTER-DETAIL关系
在日常开发中,我们经常会遇到头行结构,并且要求打开界面,行是隐藏的,点击头上的“显示”按钮,才要求头对应的行信息全部显示出来,这样,我们就用到了Master-Detail结构。
下面,我们就一步一步来实现他吧。
学习目的:
1、掌握AM,View Object,View Link的创建方法
2、学会用向导创建表格
3、可以制作简单条件查询(simpleSearchPanel)
4、掌握创建Detail的方法,以及属性的设置
一、新建AM:DetailAM
选择项目TESTOAProject,点击右键New->Business Tier->ADF Business Components->Application Module
设置 Package:test.oracle.apps.cux.details.server
Name:DetailAM
点击下一步,一直到完成。
二、新建VO:PoHeaderVO
选择包test.oracle.apps.cux.details.server,右键选择 New View Object
设置 Package:test.oracle.apps.cux.details.server
Name:PoHeaderVO
选择下一步,到Step5,SQL Statement,输入SQL
- SELECT 'N' selectflag
- ,poh.po_header_id
- ,poh.segment1 po_number
- ,poh.vendor_id
- ,pv.vendor_name
- ,poh.vendor_site_id
- ,pvs.vendor_site_code
- ,0 viewline
- FROM po_headers_all poh
- ,po_vendors pv
- ,po_vendor_sites_all pvs
- WHERE poh.vendor_id = pv.vendor_id
- AND poh.vendor_site_id = pvs.vendor_site_id
- AND nvl(pv.enabled_flag,'Y') = 'Y'
点下一步,一直到完成。
更改PoHeaderVO的属性
右键PoHeaderVO,选择Edit PoHeaderVO->Attributes->Viewline
更改Type为Boolean
三、新建VO:PoLineVO
选择包test.oracle.apps.cux.details.server,右键选择New View Object
设置 Package:test.oracle.apps.cux.details.server
Name:PoLineVO
选择下一步,到Step5 SQL Statement,输入SQL。
- SELECT pol.po_header_id
- ,pol.po_line_id
- ,pol.line_num
- ,pol.item_id
- ,msib.segment1 item_code
- ,pol.item_description
- FROM po_lines_all pol
- ,mtl_system_items_b msib
- WHERE pol.item_id = msib.inventory_item_id
- AND pol.org_id = msib.organization_id
- AND nvl(msib.enabled_flag,'Y') = 'Y'
下一步,一直到完成。
四、新建View Link:PoHeaderToLineLink
选择包test.oracle.apps.cux.details.server,右键选择New View Link
设置 Package:test.oracle.apps.cux.details.server
Name:PoHeaderToLineLink
点下一步。
选择Cardinality:0..1 to *
选择Select Source Attribute:PoHeaderVO.PoHeaderId
选择Select Destination Attribute:PolineVO.poHeaderId
点Add
下一步到Step 4:View Link Properties
保证Source和Destination的In View Object复选框被选中
点完成。
五、将VO添加到AM中
选中DetailAM,右键Edit DetailAM(或双击)
选对PoHeaderVO添加到AM下,然后把PoLineVO via PoHeaderToLineLink添加到AM下
确定。
六、新建Page:DetailPG
选择test.oracle.apps.cux.details
点右键,New->Web Tier->OA Components->Page
输入 Name:DetailPG
Package:test.oracle.apps.cux.details.webui
点完成。
修改PageLayout
ID:PageLayoutRN
AM Definition:test.oracle.apps.cux.details.server.DetailAM
Window Title:主从表测试
Title:主从表测试
新建一个RN:QueryRN
选择PageLayoutRN,点右键,New->Region
更改以下信息
ID:QueryRN
Region Style:query
Construction Mode:autoCustomizationCriteria
Include Advanced Panel:True
用向导新建一个表格
右键点击QueryRN,New->Region Using Wizard...
Application Module:test.oracle.apps.cux.details.server.DetailAM
Available View Usage:PoHeaderVO1
下一步。
Region ID:ResultTable
Region Style:table
下一步。
选中PoheaderId,PoNumber,VendorName,VendorSiteCode,Viewline到右边。
下一步,修改表格信息。
完成。
可以看到,结构图如下
修改ITEM的Search Allowed全部为True。
更改ResultTable属性
Detail View Attribute:Viewline
Width:100%
添加查询条件
选择QueryRN,右键选New->simpleSearchPanel
系统会自动创建一个Header和一个Region
修改Header属性
ID:SimpleSearchHdr
TEXT:订单查询
修改Region属性
ID:SearchComponentLayout
然后在Region下面新建一个messageTextInput
修改ITEM的属性
ID:PoHeaderID
Search Allowed:True
Maximum Length:40
Prompt:订单ID
Length:20
添加查询的对应关系
选择QueryRN,右键New->simpleSearchMappings
更改属性
ID:PoHeaderMap
Search Item:PoHeaderId
Results Item:PoHeaderId
完成后,结构图如下:
现在可以运行看一下效果了...
选择ResultTable,右键New->details
系统会创建一个header域
用向导创建表格
选择detailHdr,右键New->Region Using Wizard...
Application Module:test.oracle.apps.cux.details.server.DetailAM
Available View Usage:PolineVO1
下一步:Region Properties
Region ID:LineTable
Region Style:table
选中LineNum,ItemCode,ItemDescription到右边
下一步,修改表格属性
完成。
更改表格属性,修改search_allowed全部为True
更改LineTable
View Link Instance:PoHeaderToLineLink1
Width:90%
选择ResultTable,点右键New->MultipleSelection
修改multipleSelection1的属性值
ID:SelectFlag
View Instance:PoHeaderVO1
View Attribute:Selectflag
到此为止,我们就完成了Master-Details的全部设置,运行后,你就可以收获成功的喜悦了。。
注:
当运行时,系统报如下错误时:
oracle.apps.fnd.framework.OAException: Detail View Attribute Name is not set for the table even though a detail named child has been specified. Please specify a Boolean or String ("Y" or "N") view attribute for this table property.
请检查:
主块的Table属性中,Detail View Attribute字段是否有类型为Boolean的值
属性