2017-07-17 4 views
1

Ich arbeite mit ADF-Master-Detail-Konzept.Wie ADF-Master-Detail für drei Ebenen Struktur funktioniert

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

So

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. 

Sobald ich von Kopfseite zur Detailseite navigieren und nach jeder Einfügung oder Aktualisierung zu tun, wird die Tabelle aktualisiert wird und wird Details der ersten Zeile der Tabelle holen.

Ich habe versucht, zwei Ansätze:

ersten, die Bindung des Kopf VO erhalten und stellen Sie die RowKey von setCurrentRowWithKeyValue mit Wert Kopf H_ID.

Da h_id nur für Details (d_id) gefunden wird, funktioniert dies.

Aber von Detail, wenn ich zu Subdetail-Seite navigiere, funktioniert das obige Konzept nicht. Das Unterdetail wird nicht für die aktuelle Detailzeile abgerufen. Es wird nur für die erste Zeile abgerufen.

Ich nahm an, dass hier subdetail sowohl Details (d_id) und Header (h_id) erfordert. Aber ich weiß nicht, wie man beide Werte im rowKey-Attribut zusammenfasst.

Ein weiterer Ansatz, den ich versuchte, den Schlüssel des currentRow in VO zu erhalten und es programmatisch

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)); 

gesetzt Aber dieses Konzept auch auf Kopf- und Detailebene arbeiten. Es funktioniert nicht für Detail- und Sub-Detail-Level.

Ich bekomme Nullzeiger Ausnahme bei getCurrentRow(). GetKey().

Bitte schlagen Sie mir vor, wie ich das erreichen kann.

Antwort

1

Ich habe Verständnis für die Master - Detail - Beziehung in ADF. Grundsätzlich funktioniert es mit dem setCurrentRowKey-Konzept. Wann immer wir eine Master-Detail-Beziehung erstellen, wird auch eine View-Verknüpfung und eine Assoziation mit ihr erstellt. Dieser Ansichtslink und diese Verknüpfung zeigen auf die Primär - Fremdschlüsselbeziehung der jeweiligen Eltern - Kind - Tabelle.

Immer, wenn es sich um ein 3-Ebenen-Master-Detail-Subdetail-Konzept handelt, müssen alle 3 Zeilen-Keys programmgesteuert abgerufen werden.

So ist die Lösung, die für mich gearbeitet ist:

//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 Level-Details Um sowohl Master- und Detail muss festgelegt werden, dann nur Sie in der Lage sind SubDetail Ebene Details zu erhalten, sonst wird es Nullpointer werfen.

Verwandte Themen