on 2024 Aug 28 4:28 PM
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( ).
Request clarification before answering.
User | Count |
---|---|
41 | |
15 | |
10 | |
9 | |
6 | |
5 | |
5 | |
5 | |
5 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.