ABAPSTEMP 05

  1. REPORT zini_prg_plantilla.
  2.  
  3.  
  4. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  5. *--[ PLANTILLA DE PROGRAMACION OOP
  6. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  7. *--[ Pa'lante
  8. CLASS zini_cl_DATA      DEFINITION DEFERRED.
  9. CLASS zini_cl_EVENTS    DEFINITION DEFERRED.
  10. CLASS zini_cl_MAIN      DEFINITION DEFERRED.
  11. CLASS zini_cl_PARAMS    DEFINITION DEFERRED.
  12. CLASS zini_cl_DYNPRO    DEFINITION DEFERRED.
  13. CLASS zini_cl_bridge    DEFINITION DEFERRED.
  14. CLASS ZINI_cl_ALV       DEFINITION DEFERRED.
  15. CLASS ZINI_cl_ALV_event DEFINITION DEFERRED.
  16.  
  17.  
  18. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  19. *--[ DEFINICION PARAMETROS : Importa los parámetros de un report
  20.  
  21. CLASS zini_cl_bridge DEFINITION FINAL .
  22.   PUBLIC SECTION.
  23.     TYPES: BEGIN OF ty_family,
  24.              my_bridge TYPE REF TO zini_cl_bridge,
  25.              my_data   TYPE REF TO zini_cl_data,
  26.              my_events TYPE REF TO zini_cl_events,
  27.              my_main   TYPE REF TO zini_cl_main,
  28.              my_dynpro TYPE REF TO zini_cl_dynpro,
  29.              my_alv    type REF TO zini_cl_alv,
  30.            END OF ty_family.
  31.     DATA: my_family TYPE ty_family.
  32.  
  33.     METHODS: constructor,
  34.       sync_family.
  35. ENDCLASS.
  36.  
  37. CLASS zini_cl_params DEFINITION FINAL.
  38.  
  39.   PUBLIC SECTION.
  40.  
  41.     CONSTANTS: c_version TYPE string VALUE '01.03'.
  42. *--[ 01.00 - BASE de la plantilla
  43. *--[ 01.01 - Anyadido BRIDGE de comunicaciones para gobernarlos a todos
  44. *--[ 01.02 - Anyadido clase de eventos ALV de ejemplo
  45. *--[ 01.03 - Anyadido creacion de ALVs
  46.  
  47.     TYPES: BEGIN OF ty_params,
  48.              name(8),
  49.              kind    TYPE rsscr_kind, "S / P
  50.              length  TYPE i, "<--- hay que / 2
  51.              dtyp(4),
  52.              objeto  TYPE REF TO data,
  53.            END OF ty_params.
  54.  
  55.     DATA: t_tab     TYPE STANDARD TABLE OF ty_params.
  56.  
  57.     METHODS:
  58.       constructor IMPORTING p_report TYPE string,
  59.       load_params,
  60.       get_param IMPORTING p_name    TYPE string
  61.                 EXPORTING p_valor_s TYPE ANY TABLE
  62.                           p_valor_p TYPE any,
  63.       set_param IMPORTING p_name    TYPE string
  64.                           p_valor_s TYPE ANY TABLE OPTIONAL
  65.                           p_valor_p TYPE any OPTIONAL.
  66.  
  67.   PRIVATE SECTION.
  68.  
  69.     DATA: l_REPORT  TYPE  rsvar-report,
  70.           t_selctab TYPE STANDARD TABLE OF rsscr,
  71.  
  72.           l_tab     LIKE LINE OF t_tab.
  73.  
  74. ENDCLASS.
  75.  
  76. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  77. *--[ DEFINICION DATA
  78. CLASS zini_cl_DATA DEFINITION FINAL.
  79.  
  80.   PUBLIC SECTION.
  81.  
  82.     DATA: my_params TYPE REF TO zini_cl_params,
  83.  
  84. *--[ Controles Generales
  85.           g_error   TYPE sysubrc,
  86.           g_test    TYPE xfeld,
  87.  
  88. *--[ Controles de pantallas
  89.           g_okcode  TYPE sy-ucomm,
  90.           g_save    TYPE xfeld.
  91.  
  92.     METHODS constructor.
  93.  
  94. ENDCLASS.
  95.  
  96.  
  97. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  98. *--[ DEFINICION : MAIN
  99. CLASS zini_cl_main DEFINITION FINAL.
  100.   PUBLIC SECTION.
  101.     DATA: my_family TYPE zini_cl_bridge=>ty_family.
  102.  
  103.     METHODS: constructor,
  104.       data_load,
  105.       data_work,
  106.       data_check,
  107.       data_list.
  108.  
  109.   PRIVATE SECTION.
  110.  
  111.     METHODS:
  112.       sync_family.
  113.  
  114. ENDCLASS.
  115.  
  116. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  117. *--[ DEFINICION : EVENTOS
  118. CLASS zini_cl_events DEFINITION FINAL.
  119.   PUBLIC SECTION.
  120.  
  121.     DATA: my_family TYPE zini_cl_bridge=>ty_family.
  122.  
  123.     METHODS: constructor IMPORTING p_data TYPE REF TO zini_cl_DATA,
  124.  
  125.       eve_initialization,
  126.       eve_start_of_selection,
  127.       eve_end_of_selection.
  128.  
  129. ENDCLASS.
  130.  
  131. CLASS zini_cl_dynpro DEFINITION FINAL.
  132.  
  133.   PUBLIC SECTION.
  134.     DATA: my_family TYPE zini_cl_bridge=>ty_family.
  135.  
  136.     METHODS: popup_to_save RETURNING VALUE(p_salir_sin_grabar) TYPE xfeld,
  137.       pbo_xxxx,
  138.       pai_xxxx,
  139.       PAI_XXXXe. "<-- AT EXIT-COMMAND
  140.  
  141. ENDCLASS.
  142.  
  143.  
  144. CLASS ZINI_cl_ALV_event DEFINITION FINAL.
  145.   PUBLIC SECTION .
  146.  
  147.     DATA: my_family TYPE zini_cl_bridge=>ty_family.
  148.  
  149.     METHODS:
  150.  
  151.       handle_data_changed
  152.         FOR EVENT data_changed OF cl_gui_alv_grid
  153.         IMPORTING er_data_changed "Type Ref To  CL_ALV_CHANGED_DATA_PROTOCOL
  154.                   e_onf4  "Type CHAR01
  155.                   e_onf4_before "Type   CHAR01
  156.                   e_onf4_after  "Type CHAR01
  157.                   e_ucomm,  "Type SY-UCOMM
  158.  
  159.       handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
  160.         IMPORTING e_object      "Type Ref To  CL_ALV_EVENT_TOOLBAR_SET
  161.                   e_interactive,  "Type CHAR01
  162.  
  163.       handle_menu_button
  164.         FOR EVENT menu_button OF cl_gui_alv_grid
  165.         IMPORTING e_object  "Type Ref To  CL_CTMENU
  166.                   e_ucomm,  "Type SY-UCOMM,
  167.  
  168.       handle_user_command FOR EVENT user_command OF cl_gui_alv_grid
  169.         IMPORTING e_ucomm,  "type sy-ucomm,
  170.  
  171.       handle_hotspot_click
  172.         FOR EVENT hotspot_click OF cl_gui_alv_grid
  173.         IMPORTING e_row_id    "Type LVC_S_ROW
  174.                   e_column_id   "Type   LVC_S_COL
  175.                   es_row_no,    "Type LVC_S_ROID
  176.  
  177.       handle_context_menu
  178.         FOR EVENT context_menu_request OF cl_gui_alv_grid
  179.         IMPORTING e_object.
  180.  
  181. ENDCLASS.
  182.  
  183. CLASS zini_cl_alv DEFINITION.
  184.  
  185.   PUBLIC SECTION.
  186.  
  187.     TYPES:
  188.       BEGIN OF ty_alv,
  189.         id      TYPE i,
  190.         name    TYPE c LENGTH 50,
  191.         grid    TYPE REF TO cl_gui_alv_grid,
  192.         layout  TYPE lvc_s_layo,
  193.         variant TYPE disvariant,
  194.         t_fcat  TYPE lvc_t_fcat,
  195.         t_sort  TYPE lvc_t_sort,
  196.         toolbar TYPE  ui_functions,
  197.         filtros TYPE lvc_t_filt,
  198.         event   TYPE REF TO zini_cl_alv_event,
  199.       END OF ty_alv.
  200.  
  201.     DATA: t_alv TYPE STANDARD TABLE OF ty_alv,
  202.           G_alv TYPE ty_alv.
  203.  
  204.     DATA: my_family TYPE zini_cl_bridge=>ty_family.
  205.  
  206.     METHODS:
  207.       constructor,
  208.       get_alv IMPORTING i_name       TYPE string OPTIONAL
  209.                         i_ID         TYPE i OPTIONAL
  210.               RETURNING VALUE(r_alv) TYPE ty_alv,
  211.  
  212.       set_alv IMPORTING i_ALV TYPE ty_alv,
  213.  
  214.       set_events IMPORTING I_data_changed TYPE xfeld OPTIONAL
  215.                            i_toolbar      TYPE xfeld OPTIONAL
  216.                            i_menu         TYPE xfeld OPTIONAL
  217.                            i_user_command TYPE xfeld OPTIONAL
  218.                            i_hotspot      TYPE xfeld OPTIONAL
  219.                            i_context_menu TYPE xfeld OPTIONAL,
  220.  
  221.       create IMPORTING i_name       TYPE string OPTIONAL
  222.                        i_parent     TYPE REF TO CL_GUI_CONTAINER
  223.              RETURNING VALUE(r_alv) TYPE ty_alv,
  224.       set_fieldcatalog_ddic IMPORTING i_St_name     TYPE string
  225.                             RETURNING VALUE(t_fcat) TYPE lvc_t_fcat,
  226.  
  227.       set_fieldcatalog_itab
  228.         CHANGING  t_table       TYPE table
  229.         RETURNING VALUE(t_fcat) TYPE lvc_t_fcat,
  230.  
  231.       set_display IMPORTING i_save  TYPE char1 OPTIONAL
  232.                             i_id    TYPE i OPTIONAL
  233.                             i_name  TYPE string OPTIONAL
  234.                   CHANGING  t_table TYPE table.
  235.  
  236.   PRIVATE SECTION.
  237.     METHODS:
  238.       alv_ini. "<-- Incializamos el ALV
  239.  
  240. ENDCLASS.
  241.  
  242. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  243. *--[ IMPLEMENTACIONES
  244.  
  245. CLASS zini_cl_alv IMPLEMENTATION.
  246.  
  247.   METHOD set_events.
  248.     CHECK g_alv IS NOT INITIAL.
  249.  
  250.     CHECK g_alv-grid IS NOT INITIAL.
  251.  
  252.     g_alv-event = NEW zini_cl_alv_event( ).
  253.     g_alv-event->my_family = me->my_family.
  254.  
  255.     IF I_data_changed = abap_true.
  256.       SET HANDLER g_alv-event->handle_data_changed  FOR g_alv-grid.
  257.       g_alv-grid->set_ready_for_input( 1 ).
  258.       g_alv-grid->register_edit_event( cl_gui_alv_grid=>mc_evt_enter ).
  259.       g_alv-grid->register_edit_event( cl_gui_alv_grid=>mc_evt_modified ).
  260.     ENDIF.
  261.  
  262.     IF i_toolbar = abap_true.
  263.       SET HANDLER g_alv-event->handle_toolbar FOR g_alv-grid.
  264.       g_alv-grid->set_toolbar_interactive( ).
  265.     ENDIF.
  266.  
  267.     IF i_menu = abap_true.
  268.       SET HANDLER g_alv-event->handle_menu_button FOR g_alv-grid.
  269.       g_alv-grid->set_toolbar_interactive( ).
  270.     ENDIF.
  271.  
  272.     IF i_user_command = abap_true.
  273.       SET HANDLER g_alv-event->handle_user_command FOR g_alv-grid.
  274.       g_alv-grid->set_toolbar_interactive( ).
  275.     ENDIF.
  276.  
  277.     IF i_hotspot = abap_true.
  278.       SET HANDLER g_alv-event->handle_hotspot_click FOR g_alv-grid.
  279.     ENDIF.
  280.  
  281.     IF i_context_menu = abap_true.
  282.       SET HANDLER g_alv-event->handle_context_menu FOR g_alv-grid.
  283.     ENDIF.
  284.  
  285.     t_alv[ id = g_alv-id ] = g_alv.
  286.  
  287.   ENDMETHOD.
  288.  
  289.   METHOD set_alv.
  290.     TRY.
  291.         t_ALV[ id = i_ALV-id ] = i_ALV.
  292.         g_alv = i_alv. "<-- Por defecto
  293.       CATCH cx_root.
  294.     ENDTRY.
  295.   ENDMETHOD.
  296.  
  297.   METHOD create.
  298.     check i_parent is not INITIAL.
  299.  
  300.     CLEAR g_alv.
  301.     alv_ini( ).
  302.     g_alv-id = lines( t_alv ) + 1.
  303.     g_alv-name = COND #( WHEN i_name IS SUPPLIED THEN i_name ELSE g_alv-id ).
  304.     g_alv-grid = NEW cl_gui_alv_grid( i_parent = i_parent ).
  305.     APPEND g_alv TO t_alv.
  306.     r_alv = g_alv.
  307.   ENDMETHOD.
  308.  
  309.   METHOD get_alv.
  310.     CLEAR r_ALV.
  311.     TRY.
  312.         IF i_name IS SUPPLIED.
  313.           r_alv = t_alv[ name = to_upper( i_name ) ].
  314.         ELSEIF i_ID IS SUPPLIED.
  315.           r_alv = t_alv[ id = i_id ].
  316.         ENDIF.
  317.         g_alv = r_alv. "<-- Metemos el global
  318.       CATCH cx_root.
  319.         CLEAR r_ALV.
  320.     ENDTRY.
  321.   ENDMETHOD.
  322.  
  323.   METHOD set_display.
  324.  
  325.     DATA(l_save) = CONV char01( '' ).
  326.  
  327.     IF i_save IS SUPPLIED.
  328.       l_save = to_upper( i_save ).
  329.     ENDIF.
  330. *I_SAVE = blank " sAVE layout option will not be there .
  331. *I_SAVE = 'X'  " Global layout only
  332. *I_SAVE = 'A'  " BOTH User specific and global
  333. *I_SAVE = 'U'  " only user specific only
  334.  
  335.     IF l_save CO 'XAU '.
  336.     ELSE.
  337.       CLEAR l_save.
  338.     ENDIF.
  339.  
  340.     IF i_name IS SUPPLIED OR i_id IS SUPPLIED.
  341.       g_alv = get_alv( EXPORTING i_id = i_id i_name = to_upper( i_name ) ).
  342.     ENDIF.
  343.  
  344.     G_alv-grid->set_table_for_first_display(  "<-- Displayamos el por defecto
  345.     EXPORTING
  346.       i_buffer_active      = abap_false
  347.       i_bypassing_buffer   = abap_true
  348.       is_variant           = g_alv-variant
  349.       is_layout            = g_alv-layout
  350.       i_save               = l_save
  351.       it_toolbar_excluding = g_alv-toolbar
  352.     CHANGING
  353.       it_fieldcatalog      = g_alv-t_fcat
  354.       it_sort              = g_alv-t_sort
  355.       it_filter            = g_alv-filtros
  356.       it_outtab            = t_table ).
  357.   ENDMETHOD.
  358.  
  359.   METHOD set_fieldcatalog_itab.
  360.     cl_salv_table=>factory( IMPORTING r_salv_table = DATA(l_alv) CHANGING t_table = t_table ).
  361.     t_fcat = cl_salv_controller_metadata=>get_lvc_fieldcatalog(
  362.                      r_columns      = l_alv->get_columns( )
  363.                      r_aggregations = l_alv->get_aggregations( ) ).
  364.   ENDMETHOD.
  365.  
  366.   METHOD set_fieldcatalog_ddic.
  367.     DATA(i_name) = CONV dd02l-tabname( to_upper( i_st_name ) ).
  368.     CHECK i_name IS NOT INITIAL.
  369.  
  370.     CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
  371.       EXPORTING
  372.         i_buffer_active        = abap_false
  373.         i_structure_name       = i_NAME
  374.         i_client_never_display = 'X'
  375.         i_bypassing_buffer     = abap_true
  376.       CHANGING
  377.         ct_fieldcat            = t_fcat
  378.       EXCEPTIONS
  379.         inconsistent_interface = 1
  380.         program_error          = 2
  381.         OTHERS                 = 3.
  382.   ENDMETHOD.
  383.  
  384.   METHOD constructor.
  385.  
  386.   ENDMETHOD.
  387.  
  388.   METHOD alv_ini.
  389.     CLEAR g_ALV.
  390.     me->G_alv-layout-zebra      = abap_true.
  391.     me->G_alv-layout-sel_mode   = 'A'.
  392.     me->G_alv-layout-cwidth_opt = abap_false.
  393.     me->G_alv-variant-report    = sy-repid.
  394.     me->G_alv-variant-handle    = '1'.
  395.   ENDMETHOD.
  396.  
  397. ENDCLASS.
  398.  
  399. CLASS ZINI_cl_ALV_event IMPLEMENTATION.
  400.   METHOD handle_context_menu.
  401. *    IF node_key = 'Root'.
  402. *      menu->add_function(
  403. *        EXPORTING
  404. *          fcode = 'APAQ'
  405. *          text  = 'A&#241;adir Paquete'
  406. *          ftype = abap_false ).
  407. *
  408. *    ELSE.
  409. *      menu->add_function(
  410. *        EXPORTING
  411. *          fcode = 'MDEL'
  412. *          text  = 'Borrar'
  413. *          ftype = abap_false ).
  414. *    endif.
  415.   ENDMETHOD.
  416.  
  417.   METHOD handle_hotspot_click.
  418. *    CASE e_column_id.
  419. *      WHEN 'NOMBRE_CAMPO'.
  420. *    endcase.
  421.   ENDMETHOD.
  422.  
  423.   METHOD handle_menu_button.
  424. *    e_object->add_function( fcode = di-menu-function
  425. *                            icon = di-menu-icon
  426. *                            text = di-menu-text ).
  427.   ENDMETHOD.
  428.  
  429.  
  430.   METHOD handle_toolbar.
  431. *    e_object->mt_toolbar = VALUE #( BASE e_object->mt_toolbar
  432. *                                ( butn_type = 0
  433. *                                  function = 'COPY'
  434. *                                  icon = icon_system_copy
  435. *                                  text = ''
  436. *                                  quickinfo = 'Copiar Seleccionados'
  437. *                                  disabled  = abap_false )
  438. *                                  ).
  439.   ENDMETHOD.
  440.  
  441.   METHOD handle_user_command.
  442. *     CASE e_ucomm.
  443. *       WHEN 'XXXX'.
  444. *     endcase.
  445.   ENDMETHOD.
  446.  
  447.   METHOD handle_data_changed.
  448. *    LOOP AT er_data_changed->MT_deleted_rows INTO DATA(l_row).
  449. *    ENDLOOP.
  450. *
  451. *    LOOP AT er_data_changed->mt_inserted_rows INTO DATA(l_ins).
  452. *    ENDLOOP.
  453. *
  454. *    LOOP AT er_data_changed->mt_good_cells INTO DATA(ls_good).
  455. *
  456. *      CHECK ls_good-fieldname CP 'XXXX'.
  457. *
  458. *      DATA(l_campo) = ls_good-fieldname.
  459. *      CALL METHOD er_data_changed->modify_cell
  460. *        EXPORTING
  461. *          i_row_id    = ls_good-row_id
  462. *          i_fieldname = CONV #( l_campo )
  463. *          i_value     = sy-uname.
  464. *
  465. *    ENDLOOP.
  466.   ENDMETHOD.
  467. ENDCLASS.
  468.  
  469. CLASS zini_cl_dynpro IMPLEMENTATION.
  470.  
  471.   METHOD pbo_xxxx.
  472.     CASE sy-dynnr.
  473.       WHEN '0100'.
  474.       WHEN '0200'.
  475.       WHEN '0300'.
  476.     ENDCASE.
  477.   ENDMETHOD.
  478.  
  479.   METHOD pai_xxxx.
  480.     CASE sy-dynnr.
  481.       WHEN '0100'.
  482.       WHEN '0200'.
  483.       WHEN '0300'.
  484.     ENDCASE.
  485.   ENDMETHOD.
  486.  
  487.   METHOD PAI_XXXXe.
  488.     CASE sy-dynnr.
  489.       WHEN '0100'.
  490.       WHEN '0200'.
  491.       WHEN '0300'.
  492.     ENDCASE.
  493.   ENDMETHOD.
  494.  
  495.   METHOD popup_to_save.
  496.     CLEAR p_salir_sin_grabar.
  497.  
  498.     IF my_family-my_data->G_test = abap_true.
  499.       p_salir_sin_grabar = abap_true.
  500.       EXIT.
  501.     ENDIF.
  502.  
  503.     DATA: l_ans(1).
  504.     CALL FUNCTION 'POPUP_TO_CONFIRM'
  505.       EXPORTING
  506.         titlebar              = TEXT-z01 "<-- &#161;Advertencia!
  507. *       DIAGNOSE_OBJECT       = ' '
  508.         text_question         = TEXT-z02 "&#191;Desea salir sin grabar?
  509.         text_button_1         = TEXT-z03 "Sí
  510.         text_button_2         = TEXT-z04 "No
  511.         default_button        = '2'
  512.         display_cancel_button = abap_false
  513.         start_column          = 50
  514.         iv_quickinfo_button_1 = TEXT-z05 "<-- Salir sin grabar
  515.         iv_quickinfo_button_2 = TEXT-z06 "<-- Cancelar acción
  516.       IMPORTING
  517.         answer                = l_ans
  518.       EXCEPTIONS
  519.         text_not_found        = 1
  520.         OTHERS                = 2.
  521.     IF sy-subrc EQ 0.
  522.       IF l_ans = '1'.
  523. *--[ Bye Bye Bye
  524.         p_salir_sin_grabar = abap_true.
  525.       ENDIF.
  526.     ENDIF.
  527.  
  528.   ENDMETHOD.
  529.  
  530. ENDCLASS.
  531.  
  532. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  533. *--[ IMPLEMETACION : PARAMETROS
  534. CLASS zini_cl_params IMPLEMENTATION.
  535.  
  536.   METHOD set_param.
  537.     FIELD-SYMBOLS: <fft> TYPE table, <ff>  TYPE any.
  538.     CHECK p_name IS NOT INITIAL.
  539.     TRY.
  540.         DATA(l_tipo) = t_tab[ name = to_upper( p_name ) ]-kind.
  541.         DATA(l_new) = t_tab[ name = to_upper( p_name ) ]-objeto.
  542.         CASE l_tipo.
  543.           WHEN 'S'. ASSIGN l_new->* TO <fft>. <fft> = p_valor_s.
  544.           WHEN 'P'. ASSIGN l_new->* TO <ff>.  <ff> = p_valor_p.
  545.         ENDCASE.
  546.       CATCH cx_root.
  547.         CLEAR sy-subrc.
  548.     ENDTRY.
  549.  
  550.   ENDMETHOD.
  551.  
  552.   METHOD get_param.
  553.  
  554.     FIELD-SYMBOLS: <fft> TYPE table, <ff>  TYPE any.
  555.  
  556.     CHECK p_name IS NOT INITIAL.
  557.     TRY.
  558.         DATA(l_tipo) = t_tab[ name = to_upper( p_name ) ]-kind.
  559.         DATA(l_new)  = t_tab[ name = to_upper( p_name ) ]-objeto.
  560.         CASE l_tipo.
  561.           WHEN 'S'. ASSIGN l_new->* TO <fft>. p_valor_s = <fft>.
  562.           WHEN 'P'. ASSIGN l_new->* TO <ff>.  p_valor_p = <ff>.
  563.         ENDCASE.
  564.       CATCH cx_root.
  565.         CLEAR sy-subrc.
  566.     ENDTRY.
  567.   ENDMETHOD.
  568.  
  569.   METHOD constructor.
  570.     l_report = p_report.
  571.     load_params( ).
  572.   ENDMETHOD.
  573.  
  574.   METHOD load_params.
  575.     REFRESH: t_tab, t_selctab.
  576.     PERFORM load_sscr IN PROGRAM rsdbrunt TABLES      t_selctab
  577.                                 USING       l_REPORT
  578.                                 CHANGING   sy-subrc.
  579.  
  580.     LOOP AT t_selctab INTO DATA(l_f) WHERE kind CA 'SP'.
  581.       MOVE-CORRESPONDING l_f TO l_tab.
  582.       l_tab-length = l_tab-length  DIV 2.
  583.  
  584.       CASE l_tab-kind.
  585.         WHEN 'P'.
  586.           CREATE DATA l_tab-objeto TYPE (l_f-type) LENGTH l_tab-length.
  587.         WHEN 'S'.
  588.  
  589.           DATA:
  590.             gr_structdescr TYPE REF TO cl_abap_structdescr,
  591.             gr_tabledescr  TYPE REF TO cl_abap_tabledescr,
  592.             gr_datadescr   TYPE REF TO cl_abap_datadescr,
  593. *            gr_typedescr   TYPE REF TO cl_abap_typedescr,
  594.             gt_components  TYPE abap_component_tab,
  595.             gw_component   TYPE LINE OF abap_component_tab,
  596.             gr_wa          TYPE REF TO data,
  597.             gr_tab         TYPE REF TO data.
  598.  
  599.           FIELD-SYMBOLS: <fs_wa> TYPE any.
  600.           FIELD-SYMBOLS: <fs_tab> TYPE table.
  601.  
  602.           MOVE 'SIGN' TO gw_component-name.
  603.  
  604.           REFRESH gt_components.
  605.           gw_component-type ?= cl_abap_elemdescr=>get_c( p_length = 1 ).
  606.           INSERT gw_component INTO TABLE gt_components.
  607.  
  608.           MOVE 'OPTION' TO gw_component-name.
  609.           gw_component-type ?= cl_abap_elemdescr=>get_c( p_length = 2 ).
  610.           INSERT gw_component INTO TABLE gt_components.
  611.  
  612.           MOVE 'LOW' TO gw_component-name.
  613.           gw_component-type ?= cl_abap_elemdescr=>get_c( p_length = l_tab-length ).
  614.           INSERT gw_component INTO TABLE gt_components.
  615.  
  616.           MOVE 'HIGH' TO gw_component-name.
  617.           gw_component-type ?= cl_abap_elemdescr=>get_c( p_length = l_tab-length ).
  618.           INSERT gw_component INTO TABLE gt_components.
  619.  
  620. * get structure descriptor -> GR_STRUCTDESCR
  621.           gr_structdescr ?= cl_abap_structdescr=>create( gt_components ).
  622.  
  623. * create work area of structure GR_STRUCTDESCR -> GR_WA
  624.           CREATE DATA gr_wa TYPE HANDLE gr_structdescr.
  625.           ASSIGN gr_wa->* TO <fs_wa>.
  626.  
  627.           gr_datadescr  ?= gr_structdescr.
  628.           gr_tabledescr ?= cl_abap_tabledescr=>create( gr_datadescr ).
  629.  
  630. * Create dynmaic internal table
  631.           CREATE DATA l_tab-objeto TYPE HANDLE gr_tabledescr.
  632.  
  633.       ENDCASE.
  634.  
  635.       APPEND l_tab TO t_tab.
  636.       AT LAST.
  637. *--[ Cargamos los registros
  638.         FIELD-SYMBOLS: <f_so> TYPE ANY TABLE,
  639.                        <f_pa> TYPE any.
  640.         LOOP AT t_tab INTO l_tab.
  641.           CASE l_tab-kind .
  642.             WHEN 'S'.
  643.               DATA(l_name) = |{ l_tab-name }[]|.
  644.               ASSIGN (l_name) TO <f_so>.
  645.               set_param( EXPORTING p_name = CONV #( l_tab-name ) p_valor_s = <f_so>[] ).
  646.             WHEN 'P'.
  647.               ASSIGN (l_tab-name) TO <f_pa>.
  648.               set_param( EXPORTING p_name = CONV #( l_tab-name ) p_valor_p = <f_pa> ).
  649.           ENDCASE.
  650.         ENDLOOP.
  651.       ENDAT.
  652.     ENDLOOP.
  653.   ENDMETHOD.
  654.  
  655. ENDCLASS.
  656.  
  657. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  658. *--[ IMPLEMETACION : data
  659. CLASS zini_cl_data IMPLEMENTATION. "<-- Definición de los DATOS
  660.  
  661.   METHOD constructor.
  662.     my_params = NEW zini_cl_params( CONV #( sy-repid ) ).
  663. *  l_param->get_param( EXPORTING p_name = 'P_01' IMPORTING p_valor_p = p_norel ).
  664. *  l_param->get_param( EXPORTING p_name = 'S_fecha' IMPORTING p_valor_s = ff ).
  665.   ENDMETHOD.
  666.  
  667. ENDCLASS.
  668.  
  669. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  670. *--[ IMPLEMETACION : EVENTOS
  671. CLASS zini_cl_events IMPLEMENTATION.
  672.   METHOD constructor.
  673.     my_family-my_data = p_data.
  674.   ENDMETHOD.
  675.  
  676.   METHOD eve_initialization.
  677.   ENDMETHOD.
  678.  
  679.   METHOD eve_start_of_selection.
  680.     my_family-my_data->my_params->load_params( ). " Rrecargamos
  681.     my_family-my_main->data_load( ).
  682.   ENDMETHOD.
  683.  
  684.   METHOD eve_end_of_selection.
  685.     my_family-my_main->data_list( ).
  686.   ENDMETHOD.
  687. ENDCLASS.
  688.  
  689. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  690. *--[ IMPLEMETACION : MAIN
  691. CLASS zini_cl_main IMPLEMENTATION.
  692.  
  693.   METHOD sync_family.
  694. *--[ Sincronizamos toda la familia
  695.     MOVE-CORRESPONDING my_family-my_bridge->my_family TO: my_family,
  696.                                                           my_family-my_bridge->my_family-my_events->my_family,
  697.                                                           my_family-my_bridge->my_family-my_dynpro->my_family.
  698.  
  699.   ENDMETHOD.
  700.  
  701.   METHOD constructor.
  702. *--[ Creamos los objetos
  703.     my_family-my_bridge = NEW zini_cl_bridge( ).
  704.     my_family-my_bridge->my_family-my_data = NEW zini_cl_data( ).
  705.     my_family-my_bridge->my_family-my_events = NEW zini_cl_events( my_family-my_data ).
  706.     my_family-my_bridge->my_family-my_main = me.
  707.     my_family-my_bridge->my_family-my_dynpro = NEW zini_cl_dynpro( ).
  708.     my_family-my_bridge->my_family-my_alv    = new zini_cl_alv( ).
  709.  
  710.     my_family-my_bridge->sync_family( ). "<-- Sincronizamos
  711.   ENDMETHOD.
  712.  
  713.   METHOD data_load.   ENDMETHOD.
  714.   METHOD data_list.   ENDMETHOD.
  715.   METHOD data_work.   ENDMETHOD.
  716.   METHOD data_check.  ENDMETHOD.
  717.  
  718. ENDCLASS.
  719.  
  720. CLASS zini_cl_bridge IMPLEMENTATION.
  721.   METHOD constructor.
  722.     my_family-my_bridge = me.
  723.   ENDMETHOD.
  724.  
  725.   METHOD sync_family.
  726. *--[ Sincronizamos toda la familia
  727.     MOVE-CORRESPONDING my_family-my_bridge->my_family TO: my_family-my_bridge->my_family-my_MAIN->my_family,
  728.                                                           my_family-my_bridge->my_family-my_events->my_family,
  729.                                                           my_family-my_bridge->my_family-my_dynpro->my_family,
  730.                                                           my_family-my_bridge->my_family-my_ALV->my_family.
  731.   ENDMETHOD.
  732. ENDCLASS.
  733.  
  734.  
  735. INITIALIZATION.
  736.   BREAK-POINT.
  737.   DATA(my_main) = NEW zini_cl_main( ).
  738.   my_main->my_family-my_events->eve_initialization( ).
  739.  
  740. START-OF-SELECTION.
  741.   my_main->my_family-my_events->eve_start_of_selection( ).
  742.  
  743. END-OF-SELECTION.
  744.   my_main->my_family-my_events->eve_end_of_selection( ).