0

我正在使用 ADF 主细节概念。

 Header form (master page)
 Detail form (Detail page of Header (master page))
 SubDetail form (Detail page of Detail (master page))

所以:

 Header page has h_id as primary key.
 Detail page has d_id(Detail) and h_id(Header) as primary key.
 SubDetail page has s_id (subDetail),d_id(Detail) and h_id(Header) as a primary key.

一旦我从标题页面导航到详细信息页面并在执行任何插入或更新后,表格将被刷新并获取表格第一行的详细信息。

我尝试了两种方法:

第一个,获取header VO的绑定,并设置setCurrentRowWithKeyValue带有headerh_id值的rowkey:

    BindingContainer parent_binding =getBindingsContOfOtherPage("view_headerPageDef");
    OperationBinding opt =parent_binding.getOperationBinding("setCurrentRowWithKeyValue");
    opt.getParamsMap().put("rowKey",h_Id);
    opt.execute();

由于它h_id仅查找详细信息(d_id),因此这将起作用。

但是从细节来看,当我导航到子细节页面时,上述概念不起作用。它没有获取当前详细信息行的子详细信息。它仅获取第一行。

我假设,这里的子细节需要细节(d_id)和标题(h_id)。但我不知道如何将两个值放在 rowKey 属性中。

我尝试的另一种方法是获取 VO 中 currentRow 的键并以编程方式设置它:

    BindingContainer bindings = getBindings();
    BindingContainer parent_binding =getBindingsContOfOtherPage("view_DetailPageDef");
    DCIteratorBinding child_dciter = (DCIteratorBinding)bindings.get("SubDetail_VO2Iterator");
    DCIteratorBinding parent_dciter = (DCIteratorBinding)parent_binding.get("detail_VO2Iterator");
    Key DetailKey=dciter1.getCurrentRow().getKey();
    Key parentKey=parent_dciter.getCurrentRow().getKey();
    parent_dciter.setCurrentRowWithKey(parentKey.toStringFormat(true));
    dciter1.setCurrentRowWithKey(DetailKey.toStringFormat(true));

但是这个概念也适用于标题和细节级别。它不适用于详细信息和子详细信息级别。

我在getCurrentRow().getKey().

我怎样才能做到这一点?

4

1 回答 1

0

我已经了解了 ADF 中的主从关系。基本上它适用于 setCurrentRowKey 概念。无论何时,我们都会创建主从关系,它也会创建视图链接并与之关联。这个视图链接和关联将指向各自父子表的主外键关系。

每当我们处理 3 级主 - 细节 - 子细节概念时,我们需要以编程方式获取所有 3 个行键。

所以对我有用的解决方案是:

//Current Page Binding Object (SubDetail)
BindingContainer subdetail_binding = getBindings();
//Detail Page Binding Object (Detail)
BindingContainer detail_binding =getBindingsContOfOtherPage("view_DetailPageDef");
//Master Page Binding Object (Master)
BindingContainer master_binding =getBindingsContOfOtherPage("view_MasterPageDef");
//Subdetail VO Iterator
DCIteratorBinding subdetail_dciter = (DCIteratorBinding)subdetail_binding.get("SubDetail_VO2Iterator");
//Detail VO Iterator
 DCIteratorBinding detail_dciter = (DCIteratorBinding)parent_binding.get("detail_VO2Iterator");
//Master VO Iterator
 DCIteratorBinding master_dciter = (DCIteratorBinding)master_binding.get("master_VO2Iterator");  

//get Row Key of all 3 level Iterators  

Key MasterKey=master_dciter.getCurrentRow().getKey();
Key DetailKey=detail_dciter.getCurrentRow().getKey();
Key SubDetailKey=subdetail_dciter.getCurrentRow().getKey();

//set Master Page Row Key
master_dciter.setCurrentRowWithKey(MasterKey.toStringFormat(true));
//set Detail Page Row Key
detail_dciter.setCurrentRowWithKey(DetailKey.toStringFormat(true));
//set SubDetail Page Row Key
subdetail_dciter.setCurrentRowWithKey(SubDetailKey.toStringFormat(true));

要获取 SubDetail 级别的详细信息,必须同时设置 Master 和 Detail,然后才能获取 SubDetail 级别的详细信息,否则会抛出 NullPointerException。

于 2017-07-23T05:27:16.720 回答