Show TOC

Context-Knoten und Datenbindung für das DataGrid erzeugenLocate this document in the navigation structure

Das DataGrid verwendet einen neuen Ansatz der Verarbeitung von Daten. Deshalb wird ein neuer Typ von Context-Knoten benötigt, in dem die Daten abgelegt werden können. Es handelt sich um einen zweidimensionalen Context-Knoten. Dieser Typ wird nicht von der ABAP-Workbench unterstützt. Deshalb müssen Sie diesen Context-Knoten dynamisch während der Laufzeit erzeugen und an die jeweilige Eigenschaft binden.

Implementieren Sie das Erzeugen der Context-Knoten und das Binden an die Eigenschaften in der Hook-Methode WDDOMODIFYVIEW.

Das folgende Coding zeigt ein Beispiel für die Implementierung:

method WDDOMODIFYVIEW .
  data l_data_grid type ref to cl_wd_data_grid.
  data l_segment type ref to cl_wd_data_grid_segment.
  data lt_segments type cl_wd_data_grid_segment=>tt_data_grid_segment.
  data l_cell       type ref to cl_wd_data_grid_cell.
  data l_cells      type cl_wd_data_grid_cell=>tt_data_grid_cell.

  if first_time = abap_true.
    wd_assist->fill_data( ).
    l_data_grid ?= view->get_element( 'DATA_GRID' ).
    lt_segments = l_data_grid->get_segments( ).
    loop at lt_segments into l_segment.
      l_segment->bind_data_source( wd_assist->create_node(  segment_name  = l_segment->get_id( )
                                                            root_node     = wd_context ) ).
      wd_assist->bind_node_data( l_segment ).
      " Bind value of cells
      l_cells = l_segment->get_templates( ).
      loop at l_cells into l_cell.
        l_cell->bind_value( l_segment->bound_data_source( ) && '.' && 'VALUE' ).
        l_cell->bind_image_source( l_segment->bound_data_source( ) && '.' && 'ICON_SOURCE' ).
      endloop.
    endloop.
  endif.
endmethod.
Im obigen Beispiel werden die folgenden Schritte ausgeführt:
  • Für jedes DataGridSegment des DataGrid wird ein neuer Knoten angelegt (Methode CREATE_NODE).
  • Der Knoten wird an die Eigenschaft dataSource des DataGridSegment gebunden (Methode BIND_NODE_DATA).
  • Ein Template für die DataGridCell wird als standardmäßiger Zelleditor angelegt.
  • Zwei Attribute des Context-Knotens für die Eigenschaft dataSource werden an das UI-Element gebunden.
In der Assistanceklasse werden die folgenden Schritte ausgeführt:
  1. Datenstruktur für den Context-Knoten definieren.
      types:
        begin of TS_DATA_GRID ,
          wd_tkey_x   type i,
          wd_tkey_y   type i,
          value       type string,
          icon_source type string,
          state       type WDUI_C_TABLE_HIERACHICAL_STATE,
          level       type i,
      end of ts_data_grid .
      types:
        tt_data_grid type standard table of ts_data_grid
           with non-unique default key
           with non-unique sorted key wd_tkey_2d components wd_tkey_x wd_tkey_y .
    
  2. Laufzeit Service Instanz erzeugen.
        data l_data            type        ts_data_grid.
        data lo_structure_rtti type ref to cl_abap_structdescr.
        lo_structure_rtti ?= cl_abap_typedescr=>describe_by_data( p_data = l_data ).
    
  3. Standardwerte der Attribute als Platzhalter für die Datenpunkte definieren.
    data lt_attributes     type        wdr_context_attr_info_map.
        data ls_attributes     like line of lt_attributes.
        ls_attributes-name          = 'VALUE'.
        ls_attributes-default_value = lv_segment_id.
        insert ls_attributes into table lt_attributes.
        ls_attributes-name          = 'ICON_SOURCE'.
        ls_attributes-default_value = `/sap/public/bc/ur/nw5/themes/sap_corbu/common/libs/Icon/Failure.gif`.
        insert ls_attributes into table lt_attributes.
    
  4. Den zweidimensionalen Context-Knoten als Kindknoten des Root-Knotens anlegen. Dies wird durch den Parameter IS_2D_NODE der Methode ADD_NEW_CHILD_NODE definiert.
        data l_node_info       type ref to if_wd_context_node_info.
        data l_node            type ref to if_wd_context_node.
        data l_node_2d         type ref to if_wd_context_node_2d.
        l_node_info = root_node->get_node_info( ).
        l_node_info = l_node_info->add_new_child_node(
            name                         = segment_name
            is_initialize_lead_selection = abap_false
            static_element_rtti          = lo_structure_rtti
            attributes                   = lt_attributes
            is_2d_node                   = abap_true
        ).
    
        l_node     = root_node->get_child_node( segment_name ).
        l_node_2d ?= l_node.
    

Die Daten, mit denen der Context-Knoten befüllt wird, müssen die folgenden Voraussetzungen erfüllen:

  1. Enthält Element WD_TKEY_X vom Typ I
  2. Enthält Element WD_TKEY_Y vom Typ I
  3. Enthält Key der Components WD_TKEY_X und WD_TKEY_Y mit dem Indexnamen WD_TKEY_2D
Zweidimensionale Context-Knoten besitzen die folgenden Einschränkungen:
  • Lead-Selektion wird nicht unterstützt
  • Knoten können nicht geschachtelt werden
  • Knoten können nicht gemappt werden
  • Knoten können nur dynamisch zur Laufzeit und nicht zur Design-Zeit erzeugt werden
  • Operationen für Context-Elemente mit Interger-Index sind nicht möglich (in diesem Fall wird eine Ausnahme vom Typ cx_wd_context geworfen)
  • Knotenattribute können nicht auf final gesetzt werden