REPORT zini_prg_plantilla.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ PLANTILLA DE PROGRAMACION OOP
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Pa'lante
CLASS zini_cl_DATA DEFINITION DEFERRED.
CLASS zini_cl_EVENTS DEFINITION DEFERRED.
CLASS zini_cl_MAIN DEFINITION DEFERRED.
CLASS zini_cl_PARAMS DEFINITION DEFERRED.
CLASS zini_cl_DYNPRO DEFINITION DEFERRED.
CLASS zini_cl_bridge DEFINITION DEFERRED.
CLASS ZINI_cl_ALV DEFINITION DEFERRED.
CLASS ZINI_cl_ALV_event DEFINITION DEFERRED.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ DEFINICION PARAMETROS : Importa los parámetros de un report
CLASS zini_cl_bridge DEFINITION FINAL .
PUBLIC SECTION.
TYPES: BEGIN OF ty_family,
my_bridge TYPE REF TO zini_cl_bridge,
my_data TYPE REF TO zini_cl_data,
my_events TYPE REF TO zini_cl_events,
my_main TYPE REF TO zini_cl_main,
my_dynpro TYPE REF TO zini_cl_dynpro,
my_alv type REF TO zini_cl_alv,
END OF ty_family.
DATA: my_family TYPE ty_family.
METHODS: constructor,
sync_family.
ENDCLASS.
CLASS zini_cl_params DEFINITION FINAL.
PUBLIC SECTION.
CONSTANTS: c_version TYPE string VALUE '01.03'.
*--[ 01.00 - BASE de la plantilla
*--[ 01.01 - Anyadido BRIDGE de comunicaciones para gobernarlos a todos
*--[ 01.02 - Anyadido clase de eventos ALV de ejemplo
*--[ 01.03 - Anyadido creacion de ALVs
TYPES: BEGIN OF ty_params,
name(8),
kind TYPE rsscr_kind, "S / P
length TYPE i, "<--- hay que / 2
dtyp(4),
objeto TYPE REF TO data,
END OF ty_params.
DATA: t_tab TYPE STANDARD TABLE OF ty_params.
METHODS:
constructor IMPORTING p_report TYPE string,
load_params,
get_param IMPORTING p_name TYPE string
EXPORTING p_valor_s TYPE ANY TABLE
p_valor_p TYPE any,
set_param IMPORTING p_name TYPE string
p_valor_s TYPE ANY TABLE OPTIONAL
p_valor_p TYPE any OPTIONAL.
PRIVATE SECTION.
DATA: l_REPORT TYPE rsvar-report,
t_selctab TYPE STANDARD TABLE OF rsscr,
l_tab LIKE LINE OF t_tab.
ENDCLASS.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ DEFINICION DATA
CLASS zini_cl_DATA DEFINITION FINAL.
PUBLIC SECTION.
DATA: my_params TYPE REF TO zini_cl_params,
*--[ Controles Generales
g_error TYPE sysubrc,
g_test TYPE xfeld,
*--[ Controles de pantallas
g_okcode TYPE sy-ucomm,
g_save TYPE xfeld.
METHODS constructor.
ENDCLASS.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ DEFINICION : MAIN
CLASS zini_cl_main DEFINITION FINAL.
PUBLIC SECTION.
DATA: my_family TYPE zini_cl_bridge=>ty_family.
METHODS: constructor,
data_load,
data_work,
data_check,
data_list.
PRIVATE SECTION.
METHODS:
sync_family.
ENDCLASS.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ DEFINICION : EVENTOS
CLASS zini_cl_events DEFINITION FINAL.
PUBLIC SECTION.
DATA: my_family TYPE zini_cl_bridge=>ty_family.
METHODS: constructor IMPORTING p_data TYPE REF TO zini_cl_DATA,
eve_initialization,
eve_start_of_selection,
eve_end_of_selection.
ENDCLASS.
CLASS zini_cl_dynpro DEFINITION FINAL.
PUBLIC SECTION.
DATA: my_family TYPE zini_cl_bridge=>ty_family.
METHODS: popup_to_save RETURNING VALUE(p_salir_sin_grabar) TYPE xfeld,
pbo_xxxx,
pai_xxxx,
PAI_XXXXe. "<-- AT EXIT-COMMAND
ENDCLASS.
CLASS ZINI_cl_ALV_event DEFINITION FINAL.
PUBLIC SECTION .
DATA: my_family TYPE zini_cl_bridge=>ty_family.
METHODS:
handle_data_changed
FOR EVENT data_changed OF cl_gui_alv_grid
IMPORTING er_data_changed "Type Ref To CL_ALV_CHANGED_DATA_PROTOCOL
e_onf4 "Type CHAR01
e_onf4_before "Type CHAR01
e_onf4_after "Type CHAR01
e_ucomm, "Type SY-UCOMM
handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object "Type Ref To CL_ALV_EVENT_TOOLBAR_SET
e_interactive, "Type CHAR01
handle_menu_button
FOR EVENT menu_button OF cl_gui_alv_grid
IMPORTING e_object "Type Ref To CL_CTMENU
e_ucomm, "Type SY-UCOMM,
handle_user_command FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm, "type sy-ucomm,
handle_hotspot_click
FOR EVENT hotspot_click OF cl_gui_alv_grid
IMPORTING e_row_id "Type LVC_S_ROW
e_column_id "Type LVC_S_COL
es_row_no, "Type LVC_S_ROID
handle_context_menu
FOR EVENT context_menu_request OF cl_gui_alv_grid
IMPORTING e_object.
ENDCLASS.
CLASS zini_cl_alv DEFINITION.
PUBLIC SECTION.
TYPES:
BEGIN OF ty_alv,
id TYPE i,
name TYPE c LENGTH 50,
grid TYPE REF TO cl_gui_alv_grid,
layout TYPE lvc_s_layo,
variant TYPE disvariant,
t_fcat TYPE lvc_t_fcat,
t_sort TYPE lvc_t_sort,
toolbar TYPE ui_functions,
filtros TYPE lvc_t_filt,
event TYPE REF TO zini_cl_alv_event,
END OF ty_alv.
DATA: t_alv TYPE STANDARD TABLE OF ty_alv,
G_alv TYPE ty_alv.
DATA: my_family TYPE zini_cl_bridge=>ty_family.
METHODS:
constructor,
get_alv IMPORTING i_name TYPE string OPTIONAL
i_ID TYPE i OPTIONAL
RETURNING VALUE(r_alv) TYPE ty_alv,
set_alv IMPORTING i_ALV TYPE ty_alv,
set_events IMPORTING I_data_changed TYPE xfeld OPTIONAL
i_toolbar TYPE xfeld OPTIONAL
i_menu TYPE xfeld OPTIONAL
i_user_command TYPE xfeld OPTIONAL
i_hotspot TYPE xfeld OPTIONAL
i_context_menu TYPE xfeld OPTIONAL,
create IMPORTING i_name TYPE string OPTIONAL
i_parent TYPE REF TO CL_GUI_CONTAINER
RETURNING VALUE(r_alv) TYPE ty_alv,
set_fieldcatalog_ddic IMPORTING i_St_name TYPE string
RETURNING VALUE(t_fcat) TYPE lvc_t_fcat,
set_fieldcatalog_itab
CHANGING t_table TYPE table
RETURNING VALUE(t_fcat) TYPE lvc_t_fcat,
set_display IMPORTING i_save TYPE char1 OPTIONAL
i_id TYPE i OPTIONAL
i_name TYPE string OPTIONAL
CHANGING t_table TYPE table.
PRIVATE SECTION.
METHODS:
alv_ini. "<-- Incializamos el ALV
ENDCLASS.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ IMPLEMENTACIONES
CLASS zini_cl_alv IMPLEMENTATION.
METHOD set_events.
CHECK g_alv IS NOT INITIAL.
CHECK g_alv-grid IS NOT INITIAL.
g_alv-event = NEW zini_cl_alv_event( ).
g_alv-event->my_family = me->my_family.
IF I_data_changed = abap_true.
SET HANDLER g_alv-event->handle_data_changed FOR g_alv-grid.
g_alv-grid->set_ready_for_input( 1 ).
g_alv-grid->register_edit_event( cl_gui_alv_grid=>mc_evt_enter ).
g_alv-grid->register_edit_event( cl_gui_alv_grid=>mc_evt_modified ).
ENDIF.
IF i_toolbar = abap_true.
SET HANDLER g_alv-event->handle_toolbar FOR g_alv-grid.
g_alv-grid->set_toolbar_interactive( ).
ENDIF.
IF i_menu = abap_true.
SET HANDLER g_alv-event->handle_menu_button FOR g_alv-grid.
g_alv-grid->set_toolbar_interactive( ).
ENDIF.
IF i_user_command = abap_true.
SET HANDLER g_alv-event->handle_user_command FOR g_alv-grid.
g_alv-grid->set_toolbar_interactive( ).
ENDIF.
IF i_hotspot = abap_true.
SET HANDLER g_alv-event->handle_hotspot_click FOR g_alv-grid.
ENDIF.
IF i_context_menu = abap_true.
SET HANDLER g_alv-event->handle_context_menu FOR g_alv-grid.
ENDIF.
t_alv[ id = g_alv-id ] = g_alv.
ENDMETHOD.
METHOD set_alv.
TRY.
t_ALV[ id = i_ALV-id ] = i_ALV.
g_alv = i_alv. "<-- Por defecto
CATCH cx_root.
ENDTRY.
ENDMETHOD.
METHOD create.
check i_parent is not INITIAL.
CLEAR g_alv.
alv_ini( ).
g_alv-id = lines( t_alv ) + 1.
g_alv-name = COND #( WHEN i_name IS SUPPLIED THEN i_name ELSE g_alv-id ).
g_alv-grid = NEW cl_gui_alv_grid( i_parent = i_parent ).
APPEND g_alv TO t_alv.
r_alv = g_alv.
ENDMETHOD.
METHOD get_alv.
CLEAR r_ALV.
TRY.
IF i_name IS SUPPLIED.
r_alv = t_alv[ name = to_upper( i_name ) ].
ELSEIF i_ID IS SUPPLIED.
r_alv = t_alv[ id = i_id ].
ENDIF.
g_alv = r_alv. "<-- Metemos el global
CATCH cx_root.
CLEAR r_ALV.
ENDTRY.
ENDMETHOD.
METHOD set_display.
DATA(l_save) = CONV char01( '' ).
IF i_save IS SUPPLIED.
l_save = to_upper( i_save ).
ENDIF.
*I_SAVE = blank " sAVE layout option will not be there .
*I_SAVE = 'X' " Global layout only
*I_SAVE = 'A' " BOTH User specific and global
*I_SAVE = 'U' " only user specific only
IF l_save CO 'XAU '.
ELSE.
CLEAR l_save.
ENDIF.
IF i_name IS SUPPLIED OR i_id IS SUPPLIED.
g_alv = get_alv( EXPORTING i_id = i_id i_name = to_upper( i_name ) ).
ENDIF.
G_alv-grid->set_table_for_first_display( "<-- Displayamos el por defecto
EXPORTING
i_buffer_active = abap_false
i_bypassing_buffer = abap_true
is_variant = g_alv-variant
is_layout = g_alv-layout
i_save = l_save
it_toolbar_excluding = g_alv-toolbar
CHANGING
it_fieldcatalog = g_alv-t_fcat
it_sort = g_alv-t_sort
it_filter = g_alv-filtros
it_outtab = t_table ).
ENDMETHOD.
METHOD set_fieldcatalog_itab.
cl_salv_table=>factory( IMPORTING r_salv_table = DATA(l_alv) CHANGING t_table = t_table ).
t_fcat = cl_salv_controller_metadata=>get_lvc_fieldcatalog(
r_columns = l_alv->get_columns( )
r_aggregations = l_alv->get_aggregations( ) ).
ENDMETHOD.
METHOD set_fieldcatalog_ddic.
DATA(i_name) = CONV dd02l-tabname( to_upper( i_st_name ) ).
CHECK i_name IS NOT INITIAL.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_buffer_active = abap_false
i_structure_name = i_NAME
i_client_never_display = 'X'
i_bypassing_buffer = abap_true
CHANGING
ct_fieldcat = t_fcat
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
ENDMETHOD.
METHOD constructor.
ENDMETHOD.
METHOD alv_ini.
CLEAR g_ALV.
me->G_alv-layout-zebra = abap_true.
me->G_alv-layout-sel_mode = 'A'.
me->G_alv-layout-cwidth_opt = abap_false.
me->G_alv-variant-report = sy-repid.
me->G_alv-variant-handle = '1'.
ENDMETHOD.
ENDCLASS.
CLASS ZINI_cl_ALV_event IMPLEMENTATION.
METHOD handle_context_menu.
* IF node_key = 'Root'.
* menu->add_function(
* EXPORTING
* fcode = 'APAQ'
* text = 'Añadir Paquete'
* ftype = abap_false ).
*
* ELSE.
* menu->add_function(
* EXPORTING
* fcode = 'MDEL'
* text = 'Borrar'
* ftype = abap_false ).
* endif.
ENDMETHOD.
METHOD handle_hotspot_click.
* CASE e_column_id.
* WHEN 'NOMBRE_CAMPO'.
* endcase.
ENDMETHOD.
METHOD handle_menu_button.
* e_object->add_function( fcode = di-menu-function
* icon = di-menu-icon
* text = di-menu-text ).
ENDMETHOD.
METHOD handle_toolbar.
* e_object->mt_toolbar = VALUE #( BASE e_object->mt_toolbar
* ( butn_type = 0
* function = 'COPY'
* icon = icon_system_copy
* text = ''
* quickinfo = 'Copiar Seleccionados'
* disabled = abap_false )
* ).
ENDMETHOD.
METHOD handle_user_command.
* CASE e_ucomm.
* WHEN 'XXXX'.
* endcase.
ENDMETHOD.
METHOD handle_data_changed.
* LOOP AT er_data_changed->MT_deleted_rows INTO DATA(l_row).
* ENDLOOP.
*
* LOOP AT er_data_changed->mt_inserted_rows INTO DATA(l_ins).
* ENDLOOP.
*
* LOOP AT er_data_changed->mt_good_cells INTO DATA(ls_good).
*
* CHECK ls_good-fieldname CP 'XXXX'.
*
* DATA(l_campo) = ls_good-fieldname.
* CALL METHOD er_data_changed->modify_cell
* EXPORTING
* i_row_id = ls_good-row_id
* i_fieldname = CONV #( l_campo )
* i_value = sy-uname.
*
* ENDLOOP.
ENDMETHOD.
ENDCLASS.
CLASS zini_cl_dynpro IMPLEMENTATION.
METHOD pbo_xxxx.
CASE sy-dynnr.
WHEN '0100'.
WHEN '0200'.
WHEN '0300'.
ENDCASE.
ENDMETHOD.
METHOD pai_xxxx.
CASE sy-dynnr.
WHEN '0100'.
WHEN '0200'.
WHEN '0300'.
ENDCASE.
ENDMETHOD.
METHOD PAI_XXXXe.
CASE sy-dynnr.
WHEN '0100'.
WHEN '0200'.
WHEN '0300'.
ENDCASE.
ENDMETHOD.
METHOD popup_to_save.
CLEAR p_salir_sin_grabar.
IF my_family-my_data->G_test = abap_true.
p_salir_sin_grabar = abap_true.
EXIT.
ENDIF.
DATA: l_ans(1).
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
titlebar = TEXT-z01 "<-- ¡Advertencia!
* DIAGNOSE_OBJECT = ' '
text_question = TEXT-z02 "¿Desea salir sin grabar?
text_button_1 = TEXT-z03 "Sí
text_button_2 = TEXT-z04 "No
default_button = '2'
display_cancel_button = abap_false
start_column = 50
iv_quickinfo_button_1 = TEXT-z05 "<-- Salir sin grabar
iv_quickinfo_button_2 = TEXT-z06 "<-- Cancelar acción
IMPORTING
answer = l_ans
EXCEPTIONS
text_not_found = 1
OTHERS = 2.
IF sy-subrc EQ 0.
IF l_ans = '1'.
*--[ Bye Bye Bye
p_salir_sin_grabar = abap_true.
ENDIF.
ENDIF.
ENDMETHOD.
ENDCLASS.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ IMPLEMETACION : PARAMETROS
CLASS zini_cl_params IMPLEMENTATION.
METHOD set_param.
FIELD-SYMBOLS: <fft> TYPE table, <ff> TYPE any.
CHECK p_name IS NOT INITIAL.
TRY.
DATA(l_tipo) = t_tab[ name = to_upper( p_name ) ]-kind.
DATA(l_new) = t_tab[ name = to_upper( p_name ) ]-objeto.
CASE l_tipo.
WHEN 'S'. ASSIGN l_new->* TO <fft>. <fft> = p_valor_s.
WHEN 'P'. ASSIGN l_new->* TO <ff>. <ff> = p_valor_p.
ENDCASE.
CATCH cx_root.
CLEAR sy-subrc.
ENDTRY.
ENDMETHOD.
METHOD get_param.
FIELD-SYMBOLS: <fft> TYPE table, <ff> TYPE any.
CHECK p_name IS NOT INITIAL.
TRY.
DATA(l_tipo) = t_tab[ name = to_upper( p_name ) ]-kind.
DATA(l_new) = t_tab[ name = to_upper( p_name ) ]-objeto.
CASE l_tipo.
WHEN 'S'. ASSIGN l_new->* TO <fft>. p_valor_s = <fft>.
WHEN 'P'. ASSIGN l_new->* TO <ff>. p_valor_p = <ff>.
ENDCASE.
CATCH cx_root.
CLEAR sy-subrc.
ENDTRY.
ENDMETHOD.
METHOD constructor.
l_report = p_report.
load_params( ).
ENDMETHOD.
METHOD load_params.
REFRESH: t_tab, t_selctab.
PERFORM load_sscr IN PROGRAM rsdbrunt TABLES t_selctab
USING l_REPORT
CHANGING sy-subrc.
LOOP AT t_selctab INTO DATA(l_f) WHERE kind CA 'SP'.
MOVE-CORRESPONDING l_f TO l_tab.
l_tab-length = l_tab-length DIV 2.
CASE l_tab-kind.
WHEN 'P'.
CREATE DATA l_tab-objeto TYPE (l_f-type) LENGTH l_tab-length.
WHEN 'S'.
DATA:
gr_structdescr TYPE REF TO cl_abap_structdescr,
gr_tabledescr TYPE REF TO cl_abap_tabledescr,
gr_datadescr TYPE REF TO cl_abap_datadescr,
* gr_typedescr TYPE REF TO cl_abap_typedescr,
gt_components TYPE abap_component_tab,
gw_component TYPE LINE OF abap_component_tab,
gr_wa TYPE REF TO data,
gr_tab TYPE REF TO data.
FIELD-SYMBOLS: <fs_wa> TYPE any.
FIELD-SYMBOLS: <fs_tab> TYPE table.
MOVE 'SIGN' TO gw_component-name.
REFRESH gt_components.
gw_component-type ?= cl_abap_elemdescr=>get_c( p_length = 1 ).
INSERT gw_component INTO TABLE gt_components.
MOVE 'OPTION' TO gw_component-name.
gw_component-type ?= cl_abap_elemdescr=>get_c( p_length = 2 ).
INSERT gw_component INTO TABLE gt_components.
MOVE 'LOW' TO gw_component-name.
gw_component-type ?= cl_abap_elemdescr=>get_c( p_length = l_tab-length ).
INSERT gw_component INTO TABLE gt_components.
MOVE 'HIGH' TO gw_component-name.
gw_component-type ?= cl_abap_elemdescr=>get_c( p_length = l_tab-length ).
INSERT gw_component INTO TABLE gt_components.
* get structure descriptor -> GR_STRUCTDESCR
gr_structdescr ?= cl_abap_structdescr=>create( gt_components ).
* create work area of structure GR_STRUCTDESCR -> GR_WA
CREATE DATA gr_wa TYPE HANDLE gr_structdescr.
ASSIGN gr_wa->* TO <fs_wa>.
gr_datadescr ?= gr_structdescr.
gr_tabledescr ?= cl_abap_tabledescr=>create( gr_datadescr ).
* Create dynmaic internal table
CREATE DATA l_tab-objeto TYPE HANDLE gr_tabledescr.
ENDCASE.
APPEND l_tab TO t_tab.
AT LAST.
*--[ Cargamos los registros
FIELD-SYMBOLS: <f_so> TYPE ANY TABLE,
<f_pa> TYPE any.
LOOP AT t_tab INTO l_tab.
CASE l_tab-kind .
WHEN 'S'.
DATA(l_name) = |{ l_tab-name }[]|.
ASSIGN (l_name) TO <f_so>.
set_param( EXPORTING p_name = CONV #( l_tab-name ) p_valor_s = <f_so>[] ).
WHEN 'P'.
ASSIGN (l_tab-name) TO <f_pa>.
set_param( EXPORTING p_name = CONV #( l_tab-name ) p_valor_p = <f_pa> ).
ENDCASE.
ENDLOOP.
ENDAT.
ENDLOOP.
ENDMETHOD.
ENDCLASS.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ IMPLEMETACION : data
CLASS zini_cl_data IMPLEMENTATION. "<-- Definición de los DATOS
METHOD constructor.
my_params = NEW zini_cl_params( CONV #( sy-repid ) ).
* l_param->get_param( EXPORTING p_name = 'P_01' IMPORTING p_valor_p = p_norel ).
* l_param->get_param( EXPORTING p_name = 'S_fecha' IMPORTING p_valor_s = ff ).
ENDMETHOD.
ENDCLASS.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ IMPLEMETACION : EVENTOS
CLASS zini_cl_events IMPLEMENTATION.
METHOD constructor.
my_family-my_data = p_data.
ENDMETHOD.
METHOD eve_initialization.
ENDMETHOD.
METHOD eve_start_of_selection.
my_family-my_data->my_params->load_params( ). " Rrecargamos
my_family-my_main->data_load( ).
ENDMETHOD.
METHOD eve_end_of_selection.
my_family-my_main->data_list( ).
ENDMETHOD.
ENDCLASS.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ IMPLEMETACION : MAIN
CLASS zini_cl_main IMPLEMENTATION.
METHOD sync_family.
*--[ Sincronizamos toda la familia
MOVE-CORRESPONDING my_family-my_bridge->my_family TO: my_family,
my_family-my_bridge->my_family-my_events->my_family,
my_family-my_bridge->my_family-my_dynpro->my_family.
ENDMETHOD.
METHOD constructor.
*--[ Creamos los objetos
my_family-my_bridge = NEW zini_cl_bridge( ).
my_family-my_bridge->my_family-my_data = NEW zini_cl_data( ).
my_family-my_bridge->my_family-my_events = NEW zini_cl_events( my_family-my_data ).
my_family-my_bridge->my_family-my_main = me.
my_family-my_bridge->my_family-my_dynpro = NEW zini_cl_dynpro( ).
my_family-my_bridge->my_family-my_alv = new zini_cl_alv( ).
my_family-my_bridge->sync_family( ). "<-- Sincronizamos
ENDMETHOD.
METHOD data_load. ENDMETHOD.
METHOD data_list. ENDMETHOD.
METHOD data_work. ENDMETHOD.
METHOD data_check. ENDMETHOD.
ENDCLASS.
CLASS zini_cl_bridge IMPLEMENTATION.
METHOD constructor.
my_family-my_bridge = me.
ENDMETHOD.
METHOD sync_family.
*--[ Sincronizamos toda la familia
MOVE-CORRESPONDING my_family-my_bridge->my_family TO: my_family-my_bridge->my_family-my_MAIN->my_family,
my_family-my_bridge->my_family-my_events->my_family,
my_family-my_bridge->my_family-my_dynpro->my_family,
my_family-my_bridge->my_family-my_ALV->my_family.
ENDMETHOD.
ENDCLASS.
INITIALIZATION.
BREAK-POINT.
DATA(my_main) = NEW zini_cl_main( ).
my_main->my_family-my_events->eve_initialization( ).
START-OF-SELECTION.
my_main->my_family-my_events->eve_start_of_selection( ).
END-OF-SELECTION.
my_main->my_family-my_events->eve_end_of_selection( ).