Anfang des InhaltsbereichsVorgehensweisen Controller detail.do für die Detailanzeige anlegen Dokument im Navigationsbaum lokalisieren

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.StrukturlinkDatenmodell 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.

Diese Grafik wird im zugehörigen Text erklärt

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

Ende des Inhaltsbereichs