
Controller detail.do für die Detailanzeige anlegen 
Verwendung
Diese Controller-Klasse ist für die Ermittlung der Detaildaten zu dem angeklickten Buch aus der Ergebnisliste zuständig. Außerdem soll, wenn der Button Order this book gedrückt wird, die Seite
corder.htm ausgegeben werden.Vorgehensweise
Nennen Sie die Controller-Klasse etwa
CL_MVC_TUT_DETAIL und überschrieben Sie die Methoden DO_REQUEST und DO_HANDLE_EVENT. Tragen Sie anschließend die zusätzlich benötigten Attribute zu der Klasse ein.Methode DO_REQUEST
Überschrieben Sie diese Methode wie folgt.
|
method DO_REQUEST . data: detail_view type ref to if_bsp_page. data: main_controller type ref to cl_bsp_controller2. data: result_controller type ref to CL_TUT_MVC_RESULT_CO. data: cata_id TYPE bsindex. data: s_bookdata type BSBOOKdata. * get reference to result_controller main_controller ?= m_parent. if main_controller is bound. result_controller ?= main_controller->get_controller( controller_id = 'result' ). if result_controller is bound. cata_id = result_controller->cata_id. endif. endif. clear s_bookdata. if cata_id is not initial. * if books found and one selected, retrieve book details and display CALL METHOD cl_book_shop=>get_item EXPORTING cat_id = cata_id IMPORTING bookdata = s_bookdata EXCEPTIONS empty_input = 2. detail_view = create_view( view_name = 'detail.htm' ). detail_view->set_attribute( name = 's_bookdata' value = s_bookdata ). call_view( detail_view ). else. detail_view = create_view( view_name = 'about.htm' ). call_view( detail_view ). endif. endmethod. |
Wie schon beim
Controller result.do für die Ergebnisliste müssen Sie sich zunächst von einem anderen Controller, in diesem Fall von result.do, die Information beschaffen, von welchem Buch die Detailinformation durch Anklicken angefordert wurde.Anschließend verwenden Sie wieder die bekannte Methode der Klasse
S_BOOK_SHOP (vgl.
Datenmodell für die Bookshop-Tutorials), um zu der gegebenen Katalog-ID die Detaildaten zu ermitteln.
Beim Aufruf der View gibt es hier folgende Besonderheit.
Wenn kein Buch gefunden wurde (d.h. die Katalog-ID ist leer), zu dem Detaildaten ermittelt wurden, sollen nicht eventuell alte Detailangaben von einer früheren Suche angezeigt werden. Deshalb wird in diesem Falle der View
about.htm (Infos zum Bookshop) aufgerufen.Nur wenn ein Buch angeklickt wurde, ist die Katalog-ID gesetzt. Zu dieser werden dann die Detaildaten ermittelt, welche dann dem zugehörigen View detail.htm übergeben werden.
Methode DO_HANDLE_EVENT
Überschreiben Sie diese Methode, um auf Drücken des Buttons Order this book zu reagieren.
|
method DO_HANDLE_EVENT . if htmlb_event is bound and htmlb_event->server_event = 'order'. navigation->goto_page( 'corder.htm' ). endif. endmethod. |
Bei der Seite
corder.htm handelt es sich nicht um einen View, spondern um eine gewöhnliche BSP mit Ablauflogik. Es wird mit navigation->goto_page ein Redirect zu der Seite gemacht.Zusätzliche Attribute der Controller-Klasse
Legen Sie folgende zusätzliche Attribute in der Controller-Klasse
CL_MVC_TUT_DETAIL an:|
Attribut |
Art |
Sichtbarkeit |
Bezugstyp |
Beschreibung |
|
CATA_ID |
Instance Attribute |
Public |
BSINDEX |
Bookshop Index |
|
S_BOOKDATA |
Instance Attribute |
Public |
BSBOOKDATA |
Struktur für die Übergabe aller relevanten Daten eines Buchs |
Ergebnis
Sie haben den Controller für die Ermittlung der Detaildaten implementiert.

Legen Sie nun die beiden möglichen Views, die aufgerufen werden können, an.
View detail.htm für die Detailanzeige anlegen View about.htm für die Detailanzeige anlegen