2017-07-17 3 views
1

私はADFマスターディテールのコンセプトを扱っています。3レベル構造の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. 

Iは、詳細ページにヘッダページから移動し、任意の挿入または更新を行った後に、テーブルが更新され、テーブルの最初の行の内容をフェッチするいったん。

I 2つのアプローチを試みた:ヘッダVOの結合を取得し、ヘッダh_id値とsetCurrentRowWithKeyValueののrowKeyを設定し、

最初のものを。

詳細(d_id)のh_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()でNull Pointer Exceptionが発生しています。

私はこれをどのように達成できるか教えてください。

答えて

1

私は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レベルの詳細を取得することができ、マスターとディテールの両方を設定する必要がありますSubDetailレベルの詳細情報を取得するには、それ以外の場合は、NullPointerExceptionがスローされます。

関連する問題