cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Its Possible set handler with Dinamic object

0 Kudos
145

how to define set handle, with a dinamic object "Type REF Object"?

CLASS cl_report DEFINITION.
  PUBLIC SECTION.
    METHODS: constructor,
             select,
             display,
             coluna_clicada.
  PRIVATE SECTION.
    TYPES: BEGIN OF ty_data,
            valor TYPE i,
            link_click TYPE char30,
          END OF ty_data.
    DATA: lt_data TYPE TABLE OF ty_data.
    DATA: o_control TYPE REF TO object.
    "FIELD-SYMBOLS: <fs_control> TYPE REF TO object.
ENDCLASS.                    "cl_report DEFINITION

CLASS cl_control DEFINITION.
  PUBLIC SECTION.
    METHODS: constructor,
      init,
      handler FOR EVENT link_click OF cl_salv_events_table,
      teste_act.
    DATA: lv_is_ref TYPE c LENGTH 1.

  PRIVATE SECTION.
    DATA: o_report TYPE REF TO cl_report.

ENDCLASS.                    "cl_control DEFINITION

CLASS cl_report IMPLEMENTATION.
  METHOD constructor.
    DATA: lv_ref_control TYPE string,
          lv_typ_control TYPE string.

    FIELD-SYMBOLS <fs_object_control> TYPE REF TO cl_control.
    DATA: o_object TYPE REF TO data.

    CONCATENATE '(' sy-repid ')O_CNTR' INTO lv_ref_control.
    ASSIGN (lv_ref_control) TO <fs_object_control>.

*    CONCATENATE `\PROGRAM=` sy-repid `\CLASS=` 'CL_CONTROL' INTO lv_typ_control.
*    GET REFERENCE OF (lv_ref_control) INTO o_control.
    o_control = <fs_object_control>.
  ENDMETHOD.                    "constructor

  METHOD select.
*    SELECT *
*      FROM mara
*      INTO TABLE me->lt_mara.
*    me->lt_mara
    DATA: ls_mara TYPE ty_data.

    ls_mara-valor = 1.
    ls_mara-link_click = 'Clique aqui'.
    APPEND ls_mara TO lt_data.
  ENDMETHOD.                    "select


  METHOD display.
    DATA: lo_alv TYPE REF TO cl_salv_table.
    TRY.
        cl_salv_table=>factory(
          IMPORTING
            r_salv_table = lo_alv
          CHANGING
            t_table      = me->lt_data ).

      CATCH cx_salv_msg.
    ENDTRY.

    IF lo_alv IS BOUND.
*     DEFININ EVENTS
      DATA: o_events TYPE REF TO cl_salv_events_table.

      DATA: o_columns TYPE REF TO cl_salv_columns,
            o_column  TYPE REF TO cl_salv_column_table.
      DATA: lv_ref_control TYPE string.
      FIELD-SYMBOLS <fs_object_control> TYPE REF TO cl_control.

      o_events = lo_alv->get_event( ).

      o_columns = lo_alv->get_columns( ).
      o_column ?= o_columns->get_column( 'LINK_CLICK' ).
      o_column->set_cell_type( if_salv_c_cell_type=>hotspot ).

      CONCATENATE '(' sy-repid ')O_CNTR' INTO lv_ref_control.
      ASSIGN (lv_ref_control) TO <fs_object_control>.
*      ASSIGN ('me->O_CONTROL') to <fs_object_control>..
*      IF <fs_object_control> is ASSIGNED.
*      SET HANDLER <fs_object_control>->handler FOR o_events.
*      SET HANDLER O_CONTROL->HANDLER FOR o_events.
*        SET HANDLER: o_object->('HANDLER') FOR o_events.
        SET HANDLER <fs_object_control>->HANDLER for o_events.
*        CALL METHOD o_object->('HANDLER') for o_events.
*        SET HANDLER O_CONTROL->('handler') FOR ALL INSTANCES.
*        call method O_CONTROL->('TESTE_ACT').
*      ENDIF.

*      FIELD-SYMBOLS <fs_object_control> TYPE REF TO object.


      lo_alv->display( ).
    ENDIF.
  ENDMETHOD.                    "display

  METHOD coluna_clicada.
    BREAK-POINT.
  ENDMETHOD.                    "coluna_clicada

ENDCLASS.                    "cl_report IMPLEMENTATION

CLASS cl_control IMPLEMENTATION.
  METHOD constructor.
    CREATE OBJECT o_report.
  ENDMETHOD.                    "constructor

  METHOD init.
    o_report->select( ).
    o_report->display( ).
  ENDMETHOD.                    "init

  METHOD handler.
    BREAK-POINT.
    o_report->coluna_clicada( ).
  ENDMETHOD.                    "handler

  METHOD teste_act.
    BREAK-POINT.
  ENDMETHOD.                    "teste_act

ENDCLASS.                    "cl_control IMPLEMENTATION

INITIALIZATION.
  DATA: o_cntr TYPE REF TO cl_control.
  CREATE OBJECT o_cntr.
  o_cntr->lv_is_ref = 'X'.
  o_cntr->init( ).

Accepted Solutions (0)

Answers (0)