Additional Blogs by Members
cancel
Showing results for 
Search instead for 
Did you mean: 
former_member188685
Active Contributor
0 Kudos

<body><p> </p><pre>!https://wiki.sdn.sap.com/wiki/download/attachments/42149/sdn_TE08meetclubhouse_v2.jpg|height=80|alt=...!</pre><p>This Blog explains how to show a Hierarchy Report in BSP using HTMLB  Table View and Tableview Iterator.</p><p>I explained with simple example using SFLIGHT as Header and SBOOK as item tables. With the Help of Table view and Tableview Iterator created the ALV hierarchy Report, which is having similar look and feel of ALV hierarchy report.</p><p>Steps to create the Hierarchy Tree</p><p>1. For getting the Hierarchy look and Feel, I created a common structure which can allow SFLIGHT data and SBOOK data.</p><p>Go to SE11 , Create the Type Group with Name ZTREE.</p><p><textarea cols="73" rows="10">TYPE-POOL ztree .

*-Unique fields for Header and Item

TYPES: BEGIN OF ztree_flight_book,

         carr type sflight-carrid,

         conn type sflight-connid,

         fldt type sflight-fldate,

         carrid(10),

         connid(10),

         fldate(10),

         price(10),

         currency(10),

         planetype(10),

         seatsmax(15),

         seatsocc(10),

         hier(1),         "Hierarchy Indicator

       END OF ztree_flight_book.

TYPES: ztree_t_flight TYPE STANDARD TABLE OF ztree_flight_book .

</textarea></p><p>2. Go to SE80 , and create a BSP application using MVC approach and mark the Appilcation as Stateful.</p><p>3. Uplaod the Images Expand and Collapse and create Mime Objects. </p><p>  !http://img213.imageshack.us/img213/729/98794129vk4.gif|height=20|alt=image|align=middle|width=19|src...! </p><p>  !http://img98.imageshack.us/img98/8994/15666080ly9.gif|height=20|alt=collapse|width=19|src=http://img...!</p><p>4.Create a Controller "main.do", Now create the Controller class ZLC_HEIR_CONT Redefine the method DO_REQUEST .</p><p>Add the TYPE GRPUP to the controller class.</p><p>Add the Attributes Mentioned in the screen shot for Data population.</p><p>!http://www.freeimagehosting.net/uploads/557d3a88dd.jpg|height=1|alt=Class Attributes|align=baseline|width=1|src=http://www.freeimagehosting.net/uploads/557d3a88dd.jpg|border=0!!http://www.freeimagehosting.net/upl... Attributes|align=middle|width=1|src=http://www.freeimagehosting.net/uploads/557d3a88dd.jpg|border=0!!http://www.freeimagehosting.net/upl... attributes|align=middle|width=1|src=http://www.freeimagehosting.net/uploads/557d3a88dd.jpg|border=0!!https://weblogs.sdn.sap.com/weblogs... Attributes|width=629|src=https://weblogs.sdn.sap.com/weblogs/images/251897213/newpictureql2.png|border=0!</p><p>Add the Interface IF_HTMLB_TABLEVIEW_ITERATOR to the controller class</p><p>Add the Following methods in the controller class.</p><p>!https://weblogs.sdn.sap.com/weblogs/images/251897213/newpicture1ft8.png|height=67|alt=Methods|width=...!</p><p>GET_FLIGHT_BOOK_DATA will populate the Flight details and Booking details</p><p><textarea cols="73" rows="20">METHOD get_flight_book_data.

  DATA: wa_flight TYPE sflight.

  DATA: wa_book type sbook.

  DATA: wa_fl TYPE ztree_flight_book.

  SELECT * FROM sflight

   INTO TABLE flight_tab

   UP TO 10 ROWS.

  IF sy-subrc EQ 0.

    SELECT * FROM sbook

     INTO TABLE book_tab

     FOR ALL ENTRIES IN flight_tab

     WHERE carrid EQ flight_tab-carrid AND

           connid EQ flight_tab-connid AND

           fldate EQ flight_tab-fldate.

  ENDIF.

  LOOP AT flight_tab INTO wa_flight.

*- For Unique Keys

    wa_fl-carr = wa_flight-carrid.

    wa_fl-conn = wa_flight-connid.

    wa_fl-fldt = wa_flight-fldate.

*-Display the Header information

    wa_fl-carrid = wa_flight-carrid.

    wa_fl-connid = wa_flight-connid.

    wa_fl-fldate = wa_flight-fldate.

    wa_fl-price  = wa_flight-price.

    wa_fl-currency = wa_flight-currency.

    wa_fl-planetype = wa_flight-planetype.

    wa_fl-seatsmax = wa_flight-seatsmax.

    wa_fl-seatsocc = wa_flight-seatsocc.

    wa_fl-hier  = 'C'.

    APPEND wa_fl TO it_flight.

    CLEAR wa_fl.

  ENDLOOP.

ENDMETHOD.

</textarea></p><p>EXPAND_COLLAPSE method is used to Collpase or expand the Corresponding Hierarchy Items. This method takes the Importing parameter as ROW number of the Hierarchy node.</p><p>ROW Importing Type I</p><p><textarea cols="73" rows="20">METHOD expand_collapse.

  DATA: w_flight TYPE ztree_flight_book,

        wa_fl LIKE LINE OF it_flight,

        w_index type sy-tabix,

        wa_book TYPE sbook.

  w_index = row + 1.

  READ TABLE it_flight INTO w_flight INDEX row.

*-Read the record of the selected Node To exapnd or collapse

  IF sy-subrc EQ 0.

    IF w_flight-hier = 'C'.

      LOOP AT book_tab INTO wa_book WHERE carrid = w_flight-carr AND

                                         connid = w_flight-conn AND

                                         fldate = w_flight-fldt.

        wa_fl-carr = wa_book-carrid.

        wa_fl-conn = wa_book-connid.

        wa_fl-fldt = wa_book-fldate.

        wa_fl-carrid = wa_book-bookid.

        wa_fl-connid = wa_book-customid.

        wa_fl-fldate = wa_book-custtype.

        wa_fl-price  = wa_book-smoker.

        wa_fl-currency = wa_book-class.

        wa_fl-planetype = wa_book-order_date.

        wa_fl-seatsmax = wa_book-passname.

        wa_fl-seatsocc = wa_book-passbirth.

        wa_fl-hier = ' '.

*-      Collect all the Information

        INSERT wa_fl INTO it_flight INDEX w_index.

      ENDLOOP.

      w_flight-hier = 'E'.

      MODIFY it_flight FROM w_flight INDEX row TRANSPORTING hier.

    ELSE.

*-    when Action is Collapse Delete the entries from Table

      DELETE it_flight WHERE carr = w_flight-carr AND

                             conn = w_flight-conn AND

                             fldt = w_flight-fldt AND

                             hier = ''.

*-    Modify the Node to Become expandable

      w_flight-hier = 'C'.

      MODIFY it_flight FROM w_flight INDEX row TRANSPORTING hier.

    ENDIF.

  ENDIF.

ENDMETHOD.

</textarea> </p><p>GET_COLUMN_VALUE is used to get the content of the Table Row data.</p><p>You can get the code of this method and prameters from the standard Iterator class</p><p>CL_HTMLB_CLIENT_ITERATOR<br /><textarea cols="73" rows="10">METHOD get_column_value .

*-To get the Column values which is used in the Interator

  FIELD-SYMBOLS: <row> TYPE ANY, <col> TYPE ANY, <cur> TYPE ANY.

  ASSIGN row_ref->* TO <row>.

  ASSIGN COMPONENT column_name OF STRUCTURE <row> TO <col>.

  DATA tempchar(240) TYPE c.

  IF currency IS NOT INITIAL.

    ASSIGN COMPONENT currency OF STRUCTURE <row> TO <cur>.

    WRITE <col> CURRENCY <cur> TO tempchar.

    MOVE tempchar TO column_value.

    CONCATENATE column_value ` ` <cur> INTO column_value.

  ELSE.

    WRITE <col> TO tempchar.

    MOVE tempchar TO column_value.

  ENDIF.

  CONDENSE column_value.

ENDMETHOD.

</textarea></p><p> DO_REQUEST method logic. By default Display the Header nodes , IF there is any Table event occur then capture the Record node index , based on the Index Call the method EXPAND_COLLAPSE</p><p><textarea cols="73" rows="10">METHOD do_request.

  DATA: main TYPE REF TO if_bsp_page.

  DATA:

      lo_tableview TYPE REF TO cl_htmlb_tableview,

      lo_tv_event  TYPE REF TO cl_htmlb_event_tableview.

  DATA: tv_event    TYPE REF TO cl_htmlb_event_tableview.

  DATA: event TYPE REF TO if_htmlb_data.

  DATA: o_event    TYPE REF TO cl_htmlb_event.

  dispatch_input( ).

*-Identify the Selected Node

  CALL METHOD cl_hrrcf_iterator=>get_tv_attr(

                EXPORTING

                  p_tv_id               = 'flights'

                  p_component_id        = me->component_id

                  po_request            = me->request

                IMPORTING

                  po_tv_event    = tv_event ).

*-Check any Event Triggered or not

  event = cl_htmlb_manager=>get_event_ex( request ).

  o_event = cl_htmlb_manager=>get_event( request ).

  IF o_event IS NOT INITIAL.

    IF  event->event_name = 'tableView' AND

        event->event_type = 'cellClick' AND

        tv_event->server_event = 'MycellClick'.

*-    Expand or collapse the nodes

      IF tv_event->row_index NE 0.

        CALL METHOD expand_collapse

          EXPORTING

            row = tv_event->row_index.

      ENDIF.

    ENDIF.

  ELSE.

*-  Populate the Default data

    get_flight_book_data( ).

  ENDIF.

*-Create and Calling the View

  main = me->create_view(

        view_name     = 'main.htm'

         ).

  me->call_view( view_instance = main   ).

ENDMETHOD.

</textarea></p><p>Important method Which Table View Iterator RENDER_CELL_START, In this method compare the HIER field of the structure and Accordingly the Data will be displayed as Header or Item Details. Based on the Hier field value, Correspoding Image will be displayed using the p_replacement_bee of the Iterator.</p><p><textarea cols="73" rows="10">METHOD if_htmlb_tableview_iterator~render_cell_start.

  DATA  wa_flight TYPE ztree_flight_book.

  FIELD-SYMBOLS: <fs> TYPE ztree_flight_book.

  DATA: tmp TYPE string,

        tmptext TYPE string.

  DATA cell TYPE REF TO cl_phtmlb_hiercell.

  DATA text TYPE REF TO cl_htmlb_textview.

  DATA:wa_html TYPE REF TO cl_bsp_bee_html.

  CLEAR p_style.

  CLEAR p_class.

  ASSIGN  p_row_data_ref->* TO <fs>.

  CREATE OBJECT cell.

  CREATE OBJECT text.

     text->text = get_column_value( column_name = p_column_key ).

      cell->content = text.

  cell->ispositionedabsolute = ''.

  cell->positiontop = ''.

  cell->positionleft = ''.

  cell->headercellids = ''.

  CLEAR wa_flight.

  READ TABLE it_flight INTO wa_flight INDEX p_row_index.

  CASE p_column_key.

    WHEN 'CARRID'.

      CREATE OBJECT wa_html.

      IF wa_flight-hier = 'C'.

        tmptext = wa_flight-carrid.

        wa_html->add( html = `!TopPlus.gif|width=25% |src=TopPlus.gif|mce_src=TopPlus.gif!` ).

        wa_html->add( html =  ` ` ).

        wa_html->add( html = `<font color="blue">` ).

        wa_html->add( html =  tmptext  ).

        wa_html->add( html = `</font>` ).

        p_replacement_bee = wa_html.

        p_style = 'celldesign:GROUP_LEVEL1'.

      ELSEIF wa_flight-hier = 'E'.

        tmptext = wa_flight-carrid.

       wa_html->add( html = `!TopMinus.gif|width=25% |src=TopMinus.gif|mce_src=TopMinus.gif!` ).

        wa_html->add( html =  ` ` ).

        wa_html->add( html = `<font color="blue">` ).

        wa_html->add( html =  tmptext  ).

        wa_html->add( html = `</font>` ).

        p_replacement_bee = wa_html.

        p_style = 'celldesign:GROUP_LEVEL1'.

      ELSEIF wa_flight-hier = ' '.

        p_style = 'celldesign:CRITICALVALUE_LIGHT'.

        cell->level = 2.

        cell->status = 'LEAF'.

        p_ishiercell = abap_true.

        p_replacement_bee = cell.

      ENDIF.

    WHEN OTHERS.

      IF wa_flight-hier = 'C' OR wa_flight-hier = 'E' .

        p_style = 'celldesign:GROUP_LEVEL1'.

      ELSE.

        p_style = 'celldesign:CRITICALVALUE_LIGHT'.

      ENDIF.

  ENDCASE.

ENDMETHOD.

</textarea></p><p>5. Design the Layout</p><p>Create the View "main.htm", Now in the attibutes part specify the controller as ZLC_HEIR_CONT which you created in Step 4 , By default it will be CL_BSP_CONTROLLER. Go to Layout and Design the layout to display the Table data using the Tableview Tag of HTMLB.Specify the Iterator as controller.</p><p>Define the Column headings in such a way that it should display the heading in two line , one for heade and one for Item like the display of ALV hierarchy report.</p><p><textarea cols="73" rows="10"><%@page language="abap" %>

<%@extension name="htmlb" prefix="htmlb" %>

<%@extension name="xhtmlb" prefix="xhtmlb" %>

<htmlb:content design           = "design2003"

               controlRendering = "SAP"

               themeRoot        = "sap_standard" >

  <htmlb:page title="Flight Details " >

    <htmlb:form id     = "myFormId"

                method = "post" >

      <htmlb:gridLayout columnSize  = "1"

                        rowSize     = "1"

                        height      = "82%"

                        cellSpacing = "1"

                        cellPadding = "4" >

        <htmlb:gridLayoutCell columnIndex         = "1"

                              rowIndex            = "1"

                              width               = "100%"

                              style               = "WHITE"

                              horizontalAlignment = "CENTER"

                              verticalAlignment   = "TOP" >

          <xhtmlb:overflowContainer mode   = "SCROLL"

                                    width  = "800px"

                                    height = "100%" >

            <htmlb:tableView id               = "flights"

                             table            = "<%= controller->it_flight %>"

                             headerText       = "Flight Details"

                             headerVisible    = "True"

                             hasLeadSelection = "FALSE"

                             footerVisible    = "FALSE"

                             visibleFirstRow  = "1"

                             onRowSelection   = "onRowSelection"

                             iterator         = "<%= controller %>"

                             selectedRowIndex = "<%= controller->row %>"

                             width            = "100%"

                             design           = "ALTERNATING" >

              <htmlb:tableViewColumn columnName  = "CARRID"

                                     width       = "100%"

                                     onCellClick = "MycellClick"

               title = "<b><font color='blue'>Airline Code</font><br><font color='orange'>Booking number</font></b>" >

              </htmlb:tableViewColumn>

              <htmlb:tableViewColumn columnName = "CONNID"

               title = "<b><font color='blue'>Flight Connection</font><br><font color='orange'>Customer Number</font></b>" >

              </htmlb:tableViewColumn>

              <htmlb:tableViewColumn columnName = "FLDATE"

               title = "<b><font color='blue'>Flight date</font><br><font color='orange'>Customer type</font></b>" >

              </htmlb:tableViewColumn>

              <htmlb:tableViewColumn columnName = "Price"

                                     width      = "100%"

               title = "<b><font color='blue'>Price</font><br><font color='orange'>Smoker</font></b>" >

              </htmlb:tableViewColumn>

              <htmlb:tableViewColumn columnName = "CURRENCY"

               title = "<b><font color='blue'>Currency</font><br><font color='orange'>Flight Clas</font></b>" >

              </htmlb:tableViewColumn>

              <htmlb:tableViewColumn columnName = "PLANETYPE"

               title = "<b><font color='blue'>Aircraft Type</font><br><font color='orange'>Booking Date</font></b>" >

              </htmlb:tableViewColumn>

              <htmlb:tableViewColumn columnName = "SEATSMAX"

               title = "<b><font color='blue'>Maximun Capacity</font><br><font color='orange'>Name of the Passenger</font></b>" >

              </htmlb:tableViewColumn>

              <htmlb:tableViewColumn columnName = "SEATSOCC"

               title = "<b><font color='blue'>Occupied seats</font><br><font color='orange'>Date of Birth</font></b>" >

              </htmlb:tableViewColumn>

            </htmlb:tableView>

          </xhtmlb:overflowContainer>

        </htmlb:gridLayoutCell>

      </htmlb:gridLayout>

    </htmlb:form>

  </htmlb:page>

</htmlb:content>

</textarea></p><p>6. Now Activate the application and Test the application. Default output will be displayed  with expandable Icon.</p><p> !https://weblogs.sdn.sap.com/weblogs/images/251897213/outputxc6.png|height=400|alt=|width=600|src=htt...!</p><p>After the display click on Expand Button of Flight node and you will see the corresponding Booking details as shown below. When you click on the Collapsed icon all the Details will be collapsed and display the similar output as shown above.</p><p>!https://weblogs.sdn.sap.com/weblogs/images/251897213/expandedmw4.png|height=500|alt=Expanded|width=7...!</body>

8 Comments