REPORT zini_prg_generator LINE-SIZE 1023.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Gestión de versiones
*--[
*--[ 20240305 01.00 First release
*--[ 20240306 01.01 Se copia la pantalla de uno estandar
*--[
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Constantes y Diccionario
CONSTANTS:
c_vers TYPE c LENGTH 006 VALUE 'v01.01',
c_copyleft TYPE c LENGTH 200 VALUE 'CC BY-SA 4.0 | Alex Bergonzini 2024 | http://www.bergonzini.com',
*--[ Constantes de bloques de plantillas
C_beg TYPE c LENGTH 9 VALUE '**-->BEG_', "<-- Inicio de bloques
c_end TYPE c LENGTH 9 VALUE '**<--END_', "<-- Final de bloques
c_eof TYPE c LENGTH 9 VALUE '**<--EOF', "<-- Fín del Loader
*--[ Variables para sustituir en el código
c_var_prefix TYPE c LENGTH 15 VALUE '#PREFIX#',
c_var_sufix TYPE c LENGTH 15 VALUE '#SUFIX#',
c_var_minisufix TYPE c LENGTH 15 VALUE '#MINISUFIX#',
c_var_tail TYPE c LENGTH 15 VALUE '#TAIL#',
*--[ Constantes auxiliares de Control
c_zip TYPE c LENGTH 8 VALUE 'A E I O U _ ',
c_separator TYPE c LENGTH 1 VALUE '|',
c_com TYPE c LENGTH 5 VALUE '*--[ ',
c_prg TYPE c LENGTH 5 VALUE '_PRG_',
c_prgtxt TYPE c LENGTH 10 VALUE 'Programa:',
c_NO_trash TYPE c LENGTH 100 VALUE '1234567890QWERTYUIOPASDFGHJKLZXCVBNM_',
*--[ Constantes del main program
c_includes TYPE c LENGTH 50 VALUE 'TOP|SCR|CLS|EVE|FRM',
c_toppings TYPE c LENGTH 50 VALUE 'ALV|MSG|BI|SF',
c_i_source_000 TYPE c LENGTH 72 VALUE 'Report #PREFIX#_PRG_#SUFIX# Line-Size 1023.',
c_i_source_top TYPE c LENGTH 72 VALUE 'Include #PREFIX#_I_#MINISUFIX#_#TAIL#. " Data Definition',
c_i_source_scr TYPE c LENGTH 72 VALUE 'Include #PREFIX#_I_#MINISUFIX#_#TAIL#. " Screen Definition',
c_i_source_cls TYPE c LENGTH 72 VALUE 'Include #PREFIX#_I_#MINISUFIX#_#TAIL#. " Class Definition',
c_i_source_EVE TYPE c LENGTH 72 VALUE 'Include #PREFIX#_I_#MINISUFIX#_#TAIL#. " Events Definition',
c_i_source_FRM TYPE c LENGTH 72 VALUE 'Include #PREFIX#_I_#MINISUFIX#_#TAIL#. " Forms Definition'.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Variables
TYPES: source_line TYPE c LENGTH 200,
ty_tt_source_line TYPE TABLE OF source_line.
DATA: t_src TYPE STANDARD TABLE OF source_line,
t_src_00 TYPE STANDARD TABLE OF source_line,
l_src LIKE LINE OF t_src,
g_name TYPE c LENGTH 30,
g_error TYPE i,
g_mini_sufix TYPE c LENGTH 30.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Pantalla
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(10) t_PRGTXT.
PARAMETERS: p_prefix TYPE c LENGTH 10 OBLIGATORY DEFAULT 'ZGVA_XX'.
SELECTION-SCREEN COMMENT 23(5) t_prg.
PARAMETERS: p_sufix TYPE c LENGTH 20 OBLIGATORY DEFAULT 'my_programa'.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME.
*--[ Si se añaden nuevas rutinas, hay que añadirla a los c_toppings
PARAMETERS: p_alv AS CHECKBOX DEFAULT ' ',
p_msg AS CHECKBOX DEFAULT ' ',
p_bi AS CHECKBOX DEFAULT ' ',
p_sf AS CHECKBOX DEFAULT ' '.
SELECTION-SCREEN SKIP 1.
PARAMETERS: p_test AS CHECKBOX DEFAULT abap_true,
p_dele AS CHECKBOX DEFAULT ' '. "READ ALERT!! RED ALERT!
SELECTION-SCREEN END OF BLOCK b01.
INITIALIZATION.
PERFORM eve_initialization.
START-OF-SELECTION.
PERFORM data_work.
END-OF-SELECTION.
PERFORM data_list.
FORM eve_initialization.
t_PRGTXT = c_prgtxt.
t_prg = c_prg.
READ REPORT sy-repid INTO t_src_00.
LOOP AT t_src_00 INTO DATA(l_src_00).
DATA(l_tabix) = sy-tabix.
IF l_src_00 = c_eof.
DELETE t_src_00 INDEX 1.
EXIT.
ENDIF.
DELETE t_src_00 INDEX 1.
ENDLOOP.
ENDFORM.
FORM data_work.
PERFORM data_check.
PERFORM data_delete_trash.
PERFORM data_work_core.
PERFORM data_work_includes.
ENDFORM.
FORM data_delete_trash.
TYPES: BEGIN OF ty_alv,
ini TYPE i,
end TYPE i,
END OF ty_alv.
DATA: t_alv TYPE STANDARD TABLE OF ty_alv,
l_alv LIKE LINE OF t_alv.
CHECK g_error IS INITIAL.
SPLIT c_toppings AT c_separator INTO TABLE DATA(t_tab).
LOOP AT t_tab INTO DATA(l_tab).
DATA(p_param) = |p_{ l_tab }|.
ASSIGN (p_param) TO FIELD-SYMBOL(<p_param>).
CHECK <p_param> IS INITIAL. "<-- Buscamos no marcados para borrar.
DATA(l_beg_alv) = |{ c_beg }{ l_tab }|.
DATA(l_end_alv) = |{ c_end }{ l_tab }|.
LOOP AT t_src_00 INTO DATA(l_src).
IF l_src = l_beg_alv.
l_alv-ini = sy-tabix.
ENDIF.
IF l_src = l_end_alv.
l_alv-end = sy-tabix.
APPEND l_alv TO t_alv.
CLEAR: l_alv-end, l_alv-ini.
ENDIF.
ENDLOOP.
SORT t_alv BY ini DESCENDING.
LOOP AT t_alv INTO DATA(m_alv).
DELETE t_src_00 FROM m_alv-ini TO m_alv-end.
ENDLOOP.
REFRESH t_alv.
ENDLOOP.
ENDFORM.
FORM data_list.
CASE g_error.
WHEN 1. MESSAGE s398(00) WITH 'Nombre de pograma desmasiado largo' DISPLAY LIKE 'E'.
WHEN 2. MESSAGE s398(00) WITH 'Nombre de includes desmasiado largo' DISPLAY LIKE 'E'.
WHEN 3. MESSAGE s398(00) WITH 'Report ya existente' DISPLAY LIKE 'E'.
WHEN 4. MESSAGE s398(00) WITH 'Include ya existente' DISPLAY LIKE 'E'.
WHEN 99. MESSAGE s398(00) WITH 'Abortado' DISPLAY LIKE 'E'.
ENDCASE.
ENDFORM.
FORM data_check.
DATA: l_name(30),
l_ans(1).
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Advertencia
IF p_dele = abap_true.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
titlebar = '¡ Advertencia !'
* DIAGNOSE_OBJECT =
text_question = 'Flag de borrado marcado. ¿Quiere borrar programas ya existentes?'
text_button_1 = 'Sí'
* ICON_BUTTON_1 = ' '
text_button_2 = 'No'
* ICON_BUTTON_2 = ' '
* DEFAULT_BUTTON = '1'
* DISPLAY_CANCEL_BUTTON = 'X'
* USERDEFINED_F1_HELP = ' '
* START_COLUMN = 25
* START_ROW = 6
* POPUP_TYPE =
* IV_QUICKINFO_BUTTON_1 = ' '
* IV_QUICKINFO_BUTTON_2 = ' '
IMPORTING
answer = l_ans
* TABLES
* PARAMETER =
EXCEPTIONS
text_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0 OR l_ans NE '1'.
g_error = 99.
CLEAR p_dele.
EXIT.
ENDIF.
ENDIF.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Sanitize
PERFORM data_sanitize CHANGING p_prefix.
PERFORM data_sanitize CHANGING p_SUFIX.
g_mini_sufix = p_sufix.
TRANSLATE g_mini_sufix USING c_zip.
CONDENSE p_sufix NO-GAPS.
CONDENSE p_prefix NO-GAPS.
CONDENSE g_mini_sufix NO-GAPS.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Verificamos longitudes
DATA(l_str_prg) = |{ p_prefix }_PRG_{ p_sufix }|.
DATA(l_str_inc) = |{ p_prefix }_I_XXX_{ g_mini_sufix }|.
IF strlen( l_str_prg ) > 30. g_error = 1. ENDIF.
IF strlen( l_str_inc ) > 30. g_error = 2. ENDIF.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Verificamos la existencia de los main + report
l_name = |{ p_prefix }_PRG_{ p_sufix }|.
READ REPORT l_name INTO t_src.
IF sy-subrc EQ 0. IF p_dele = abap_true. DELETE REPORT l_name. ELSE. g_error = 3. ENDIF. ENDIF.
SPLIT c_includes AT c_separator INTO TABLE DATA(t_tab).
LOOP AT t_tab INTO DATA(l_Data).
CHECK g_error IS INITIAL.
l_name = |{ p_prefix }_I_{ g_mini_sufix }_{ l_data }|.
READ REPORT l_name INTO t_src.
IF sy-subrc EQ 0. IF p_dele = abap_true. DELETE REPORT l_name. ELSE. g_error = 3. ENDIF. ENDIF.
ENDLOOP.
ENDFORM.
FORM data_sanitize CHANGING p_var.
p_var = to_upper( p_var ).
DO strlen( p_var ) TIMES.
DATA(l_num) = sy-index - 1.
CHECK p_var+l_num(1) NA c_NO_trash.
p_var+l_num(1) = abap_false.
ENDDO.
CONDENSE p_var NO-GAPS.
ENDFORM.
FORM data_replace.
CHECK g_error IS INITIAL.
LOOP AT t_src ASSIGNING FIELD-SYMBOL(<f>).
REPLACE ALL OCCURRENCES OF c_var_prefix IN <f> WITH p_prefix.
REPLACE ALL OCCURRENCES OF c_var_sufix IN <f> WITH p_sufix.
REPLACE ALL OCCURRENCES OF c_var_minisufix IN <f> WITH g_mini_sufix.
ENDLOOP.
ENDFORM.
FORM data_work_core.
CHECK g_error IS INITIAL.
g_name = |{ p_prefix }_PRG_{ p_sufix }|.
REFRESH t_src.
t_src = VALUE #( ( c_i_source_000 ) ( ' ' ) ).
SPLIT c_includes AT c_separator INTO TABLE DATA(t_tab).
LOOP AT t_tab INTO DATA(l_tab).
l_tab = to_upper( l_tab ).
DATA(l_var) = |c_i_source_{ l_tab }|.
ASSIGN (l_var) TO FIELD-SYMBOL(<f>).
l_src = <f>.
REPLACE c_var_tail IN l_src WITH l_tab.
APPEND l_src TO t_src.
ENDLOOP.
PERFORM data_replace.
PERFORM data_save using '1'.
perform copy_screen.
perform copy_status.
ENDFORM.
FORM data_save using p_type.
CHECK g_error IS INITIAL.
CHECK g_name IS NOT INITIAL.
CHECK lines( t_src ) > 0.
IF p_test IS INITIAL.
INSERT REPORT g_name FROM t_src PROGRAM TYPE p_type.
ELSE.
LOOP AT t_src INTO l_src.
AT FIRST.
WRITE: / c_com, g_name.
ENDAT.
IF l_src CO ' ' OR l_Src IS INITIAL. l_src = '*'. ENDIF.
WRITE: / l_src.
ENDLOOP.
ENDIF.
ENDFORM.
FORM data_work_includes.
CHECK g_error IS INITIAL.
SPLIT c_includes AT c_separator INTO TABLE DATA(t_tab).
LOOP AT t_tab INTO DATA(l_Data).
REFRESH t_src.
g_name = |{ p_prefix }_I_{ g_mini_sufix }_{ l_data }|.
DATA(l_beg) = |{ c_beg }{ l_data }|.
DATA(l_end) = |{ c_end }{ l_data }|.
LOOP AT t_src_00 ASSIGNING FIELD-SYMBOL(<l_linea>).
IF <l_linea> = l_beg. DATA(l_tabix_beg) = sy-tabix + 1. ENDIF.
IF <l_linea> = l_end. DATA(l_tabix_end) = sy-tabix - 1. ENDIF.
IF l_tabix_beg IS NOT INITIAL AND
l_tabix_end IS NOT INITIAL.
APPEND LINES OF t_src_00 FROM l_tabix_beg TO l_tabix_end TO t_src.
LOOP AT t_src ASSIGNING FIELD-SYMBOL(<l_src_new>).
IF <l_src_new>+0(1) = '*'.
SHIFT <l_src_new> LEFT.
ENDIF.
ENDLOOP.
PERFORM data_save using 'I'.
CLEAR: l_tabix_end, l_tabix_beg.
EXIT.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDFORM.
form copy_status.
data: rcode(5),
p_origen(40),
p_destino(40),
s_origen(20),
s_destino(20).
p_origen = 'BCALV_DND_01'.
s_origen = 'MAIN'.
p_destino = g_name.
perform copy_status_diff_progs_new in PROGRAM SAPLSMPE
using abap_true p_origen p_destino s_origen s_origen
changing rcode.
endform.
form copy_screen.
DATA: BEGIN OF dynname,
prog LIKE d020s-prog,
dnum LIKE d020s-dnum,
END OF dynname.
DATA: h TYPE d020s. "Header
DATA: f TYPE STANDARD TABLE OF d021s.
DATA: e TYPE dyn_flowlist WITH HEADER LINE. "Ablauflogik
DATA: m TYPE d023s OCCURS 0 WITH HEADER LINE. "Dynpro-Parameter
check p_test is INITIAL.
check g_error is INITIAL.
dynname-prog = 'BCALV_DND_01'. "<-- Copiamos de uno estándar
dynname-dnum = '0100'.
IMPORT DYNPRO h f e m ID dynname.
delete f from 1 to 2.
*--[ Generamos un Custom Control
f = VALUE #( BASE F ( FNAM = 'CC_ALV_01'
DIDX = CONV #( '0028' )
FLG2 = CONV #( '30' )
FILL = CONV #( 'U' )
FMB1 = CONV #( '30' )
LENG = CONV #( 'E7' )
LINE = CONV #( '01' )
COLN = CONV #( '02' )
AUTH = CONV #( '101' )
AGLT = CONV #( '14' )
ADEZ = CONV #( '73' ) ) ).
h-PROG = dynname-prog = g_name. "<- Programa de destino
* h-DNUM = dynname-dnum = '0100'. "<-- Por si hay que cambiar la pantalla
EXPORT DYNPRO h f e m ID dynname.
endform.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ FIN DEL ABAP, Inicio del Templeate.
**<--EOF
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Source TOP
**-->BEG_TOP
** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
**--[ Data Definition
*data: g_okcode type sy-ucomm,
* g_error type i.
**-->BEG_ALV
*CONSTANTS: c_st_alv_01 TYPE dd02l-tabname VALUE '{NOMBRE_DE_LA_ESTRUCTURA}'.
*
*DATA: cc_01 TYPE REF TO cl_gui_custom_container,
* cm_01 TYPE scrfname VALUE 'CC_ALV_01',
*
* gs_layout TYPE lvc_s_layo,
* gs_variant TYPE disvariant,
* gt_toolbar TYPE ui_functions,
* t_rows TYPE lvc_t_row,
* grid_01 TYPE REF TO cl_gui_alv_grid,
* t_fcat_01 type lvc_t_fcat,
* t_tab_01 TYPE STANDARD TABLE OF {TABLA_DEL_ALV}.
**<--END_ALV
**<--END_TOP
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Clase Definicion
**-->BEG_CLS
**-->BEG_ALV
*CLASS lcl_event_receiver_01 DEFINITION.
* PUBLIC SECTION.
* CLASS-METHODS:
* handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
* IMPORTING e_object e_interactive,
* handle_menu_button FOR EVENT menu_button OF cl_gui_alv_grid
* IMPORTING e_object e_ucomm,
* handle_user_command FOR EVENT user_command OF cl_gui_alv_grid
* IMPORTING e_ucomm,
* handle_hotspot_click FOR EVENT hotspot_click OF cl_gui_alv_grid
* IMPORTING e_row_id e_column_id.
*
*
* PRIVATE SECTION.
*ENDCLASS.
*
*CLASS lcl_event_receiver_01 IMPLEMENTATION.
* METHOD handle_toolbar.
* DATA: ls_toolbar TYPE stb_button.
*
** CLEAR ls_toolbar.
** MOVE 'BOT1' TO ls_toolbar-function. "#EC NOTEXT
** MOVE 0 TO ls_toolbar-butn_type.
** MOVE icon_financing TO ls_toolbar-icon.
** MOVE 'XXXXXXX' TO ls_toolbar-quickinfo.
** MOVE 'XXXXXXX' TO ls_toolbar-text.
** MOVE ' ' TO ls_toolbar-disabled. "#EC NOTEXT
** APPEND ls_toolbar TO e_object->mt_toolbar.
*
* ENDMETHOD.
*
* METHOD handle_menu_button.
* " perform soome operations
* CASE e_ucomm.
* WHEN 'DETAIL_MENU'.
** IF NOT <test>.
** CALL METHOD e_object->add_function
** EXPORTING
** fcode = 'XXXX'
** text = text-002.
** ENDIF.
* ENDCASE.
* ENDMETHOD.
*
* METHOD handle_user_command.
* REFRESH t_rows.
* grid_01->get_selected_rows( IMPORTING et_index_rows = t_rows ).
* grid_01->check_changed_data( ).
*
** CASE e_ucomm.
** WHEN 'BOT1'. PERFORM ...
** ENDCASE.
* ENDMETHOD.
*
* METHOD handle_hotspot_click.
*
** READ TABLE t_tab_01 ASSIGNING FIELD-SYMBOL(<ls_s>) INDEX e_row_id.
* CHECK sy-subrc = 0.
*
** CASE e_column_id.
**
** WHEN 'XXXXX'. ....
** ENDCASE.
*
* ENDMETHOD.
*
*ENDCLASS.
*
* DATA: lcl_01 TYPE REF TO lcl_event_receiver_01.
**<--END_ALV
**-->BEG_MSG
*CLASS zcl_msg DEFINITION.
*
* PUBLIC SECTION.
*
* TYPES: BEGIN OF ty_msg,
* text TYPE char100sm,
* msgid TYPE symsgid,
* msgty TYPE symsgty,
* msgno TYPE symsgno,
* msgv1 TYPE symsgv,
* msgv2 TYPE symsgv,
* msgv3 TYPE symsgv,
* msgv4 TYPE symsgv,
* END OF ty_msg.
*
* DATA: t_msg TYPE STANDARD TABLE OF ty_msg.
*
* METHODS: msg_add_sys IMPORTING iv_msgid TYPE symsgid
* iv_msgno TYPE symsgno
* iv_msgty TYPE symsgty
* iv_msgv1 TYPE symsgv OPTIONAL
* iv_msgv2 TYPE symsgv OPTIONAL
* iv_msgv3 TYPE symsgv OPTIONAL
* iv_msgv4 TYPE symsgv OPTIONAL,
* msg_add_txt IMPORTING iv_text TYPE string
* iv_msgty TYPE symsgty OPTIONAL,
* msg_display IMPORTING iv_popup TYPE boolean,
* msg_refresh,
* msg_check_error RETURNING VALUE(rv_result) TYPE boolean.
*
*ENDCLASS. "ZCL_MSG DEFINITION
*
*CLASS zcl_msg IMPLEMENTATION.
*
* METHOD msg_check_error.
* DATA: l_msg TYPE ty_msg.
*
* READ TABLE t_msg WITH KEY msgty = 'E' TRANSPORTING NO FIELDS.
* IF sy-subrc = 0.
* rv_result = 'X'.
* ELSE.
* rv_result = ' '.
* ENDIF.
* ENDMETHOD. "msg_check_error
*
* METHOD msg_refresh.
* REFRESH t_msg.
* ENDMETHOD. "msg_refresh
*
* METHOD msg_display.
* TYPE-POOLS esp1.
* DATA: lt_message_tab TYPE esp1_message_tab_type,
* ls_message_tab TYPE LINE OF esp1_message_tab_type,
* l_msg TYPE ty_msg,
* l_lineno TYPE mesg-zeile.
* CHECK t_msg[] IS NOT INITIAL.
* l_lineno = lines( t_msg ).
* IF iv_popup = 'X' OR l_lineno > 1.
* LOOP AT t_msg INTO l_msg.
* IF l_msg-msgid IS INITIAL.
**--[ Si es s�lo texto lo maquillamos
* l_msg-msgid = '00'.
* l_msg-msgno = '398'.
* ENDIF.
* MOVE-CORRESPONDING l_msg TO ls_message_tab.
* l_lineno = l_lineno + 1.
* ls_message_tab-lineno = l_lineno.
* INSERT ls_message_tab INTO TABLE lt_message_tab.
* ENDLOOP.
* CALL FUNCTION 'C14Z_MESSAGES_SHOW_AS_POPUP'
* TABLES
* i_message_tab = lt_message_tab.
* ELSEIF iv_popup IS INITIAL OR l_lineno = 1.
* READ TABLE t_msg INTO l_msg INDEX 1.
* IF l_msg-msgid IS INITIAL.
**--[ Si es s�Olo texto lo maquillamos
* l_msg-msgid = '00'.
* l_msg-msgno = '398'.
* ENDIF.
* MESSAGE ID l_msg-msgid TYPE l_msg-msgty NUMBER l_msg-msgno WITH l_msg-msgv1 l_msg-msgv2 l_msg-msgv3 l_msg-msgv4.
* ENDIF.
* ENDMETHOD. "msg_display
*
* METHOD msg_add_txt.
**--[ S�lo metemos texto sin importar c�digo
* DATA: l_msg TYPE ty_msg,
* l_string TYPE string.
*
* l_msg-msgv1 = l_string = l_msg-text = iv_text.
* l_msg-msgty = iv_msgty.
* if l_msg-msgty is INITIAL.
* l_msg-msgty = 'E'.
* endif.
* SHIFT l_string LEFT BY 50 PLACES.
* l_msg-msgv2 = l_string.
* INSERT l_msg INTO TABLE t_msg.
* ENDMETHOD. "msg_add_txt
*
* METHOD msg_add_sys.
**--[ Metemos todo el mensaje completo
* DATA: l_msg TYPE ty_msg.
* l_msg-msgid = iv_msgid .
* l_msg-msgno = iv_msgno .
* l_msg-msgty = iv_msgty .
* l_msg-msgv1 = iv_msgv1 .
* l_msg-msgv2 = iv_msgv2 .
* l_msg-msgv3 = iv_msgv3 .
* l_msg-msgv4 = iv_msgv4 .
* MESSAGE ID iv_msgid TYPE l_msg-msgty
* NUMBER l_msg-msgno
* INTO l_msg-text
* WITH l_msg-msgv1
* l_msg-msgv2.
* INSERT l_msg INTO TABLE t_msg.
*
* ENDMETHOD. "MSG_ADD
*
*ENDCLASS. "ZCL_MSG IMPLEMENTATION
*
*DATA: obj_msg TYPE REF TO zcl_msg.
**<--END_MSG
**<--END_CLS
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Source Eventos
**-->BEG_EVE
*at SELECTION-SCREEN OUTPUT.
* perform eve_selection_screen_output.
*
*INITIALIZATION.
* perform eve_initialization.
*
*START-OF-SELECTION.
* perform eve_start_of_selection.
*
*end-of-selection.
* perform eve_end_of_selection.
**<--END_EVE
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Source Screen
**-->BEG_SCR
*SELECTION-SCREEN begin of BLOCK b01 WITH FRAME. "Title TEXT-T01
*
**Select-OPTIONS: s_... for ....,
** s_... for .....
*
*PARAMETERS: p_test AS CHECKBOX DEFAULT ' '.
*
*SELECTION-SCREEN end of BLOCK b01.
**-->BEG_ALV
*MODULE pbo_100 OUTPUT.
* PERFORM pbo_0100.
*ENDMODULE.
*
*MODULE pai_100 INPUT.
* PERFORM pai_0100.
*ENDMODULE.
**<--END_ALV
**<--END_SCR
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Source Procedimientos
**-->BEG_FRM
**-->BEG_ALV
** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
**--[ Rutinas ALV
*FORM pbo_0100.
* SET PF-STATUS 'MAIN'.
* SET TITLEBAR 'TIT01' WITH TEXT-t01.
*
* IF cc_01 IS INITIAL.
*
* cc_01 = NEW cl_gui_custom_container( container_name = cm_01 ).
* grid_01 = NEW cl_gui_alv_grid( i_parent = cc_01 ).
*
* gs_layout-stylefname = 'CELLSTYLES'.
*
* gs_layout-cwidth_opt = 'X'.
* gs_layout-zebra = abap_true.
* gs_variant-report = sy-tcode. " o sy-repid.
*
* perform alv_get_catalog USING c_st_alv_01 CHANGING t_fcat_01.
* perform alv_set_events using grid_01.
*
* grid_01->set_table_for_first_display(
* EXPORTING
* i_SAVE = 'A'
* is_variant = gs_variant
* is_layout = gs_layout
* it_toolbar_excluding = gt_toolbar
* CHANGING
* it_fieldcatalog = t_fcat_01
* it_outtab = t_tab_01 ).
*
* grid_01->set_ready_for_input( i_ready_for_input = '1' ).
* grid_01->register_edit_event( i_event_id = cl_gui_alv_grid=>mc_evt_modified ).
* grid_01->register_edit_event( i_event_id = cl_gui_alv_grid=>mc_evt_enter ).
* endif.
*
*endform.
*
*form alv_set_events USING p_grid_01 TYPE REF TO cl_gui_alv_grid.
* CREATE OBJECT lcl_01.
* SET HANDLER lcl_01->handle_toolbar FOR p_grid_01.
* SET HANDLER lcl_01->handle_user_command FOR p_grid_01.
* SET HANDLER lcl_01->handle_hotspot_click FOR p_grid_01.
*endform.
*
*form alv_get_catalog using p_structure type DD02L-TABNAME
* CHANGING p_fcat type lvc_t_fcat.
*
* CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
* EXPORTING
* i_structure_name = p_structure
* i_buffer_active = abap_false
* i_bypassing_buffer = abap_true
* CHANGING
* ct_fieldcat = p_fcat[]
* EXCEPTIONS
* inconsistent_interface = 1
* program_error = 2
* OTHERS = 3.
*
** LOOP AT t_fcat_01 ASSIGNING FIELD-SYMBOL(<f>).
** CASE <f>-fieldname.
** WHEN 'XXXX'.
** <f>-scrtext_s =
** <f>-scrtext_m =
** <f>-coltext =
** <f>-scrtext_l = TEXT-c01.
** endcase.
** endloop.
*
*endform.
*
*FORM pai_0100.
* DATA(l_okcode) = g_okcode.
* CLEAR g_okcode.
*
* REFRESH t_rows.
* grid_01->get_selected_rows( IMPORTING et_index_rows = t_rows ).
* grid_01->check_changed_data( ).
* CASE l_okcode.
** WHEN 'BOTON01'. PERFORM ...
** WHEN 'BOTON02'. PERFORM ...
* WHEN 'BACK'. PERFORM exit_program.
* WHEN 'SAVE'. PERFORM data_save.
* ENDCASE.
*ENDFORM.
*
*FORM exit_program.
* cc_01->free( ).
* FREE: cc_01.
* CLEAR: cc_01, grid_01.
* LEAVE TO SCREEN 0.
*endform.
*
*form data_save.
**--[ Nothing To Do
*endform.
**<--END_ALV
** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
**--[ Rutinas de Control
*form eve_selection_screen_output.
**--[ Nothing To Do
*endform.
*
*form eve_initialization.
**--[ Nothing To Do
**-->BEG_MSG
* obj_msg = new zcl_msg( ). "Creamos objeto de mensajes
**<--END_MSG
*endform.
*
*form eve_start_of_selection.
* perform data_check.
* perform data_load.
*endform.
*
*form eve_end_of_selection.
* perform Data_list.
* perform data_errors.
*endform.
*
*form data_list.
**--[ Nothing To Do
**-->BEG_ALV
* call screen '0100'.
**<--END_ALV
*endform.
*
*form data_errors.
**--[ Nothing To Do
*endform.
*
*form data_check.
**--[ Nothing To Do
*endform.
*
*form data_load.
**--[ Nothing To Do
*endform.
**-->BEG_BI
*form SAMPLE_call_transaction.
*
*data: t_BDCDATA type STANDARD TABLE OF BDCDATA,
* st_options type CTU_PARAMS,
* t_messages type STANDARD TABLE OF BDCMSGCOLL.
*
* ST_options-DISMODE = 'A'.
*
* t_BDCDATA = VALUE #( ( PROGRAM = ''
* DYNPRO = ''
* DYNBEGIN = ''
* FNAM = ''
* FVAL = '' )
* ).
* call transaction 'XXXX' USING t_BDCDATA OPTIONS FROM ST_options MESSAGES INTO T_MESSAGES.
*
*
*endform.
**<--END_BI
**-->BEG_SF
*FORM sample_smartform using p_formulario type tdsfname.
* DATA: lv_smf_funcion TYPE rs38l_fnam,
* ls_control_parameters TYPE ssfctrlop,
* ls_output_options TYPE ssfcompop,
* ls_job_output_info TYPE ssfcrescl,
* ls_document_output_info TYPE ssfcrespd,
* ls_job_output_options TYPE ssfcresop,
* gt_pdf_table TYPE rcl_bag_tline,
* gv_pdf_fsize TYPE i.
*
* CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
* EXPORTING
* formname = p_formulario
* IMPORTING
* fm_name = lv_smf_funcion
* EXCEPTIONS
* no_form = 1
* no_function_module = 2
* OTHERS = 3.
* IF sy-subrc EQ 0.
**--[ Borrado de buffer de textos estándar
* CALL FUNCTION 'INIT_LOAD_TEXT_BUFFER'
* EXPORTING
* excl_name = 'HELLO' "<- Para que no lo encuentre
* EXCEPTIONS
* not_found = 1
* OTHERS = 2.
*
* ls_control_parameters-preview = abap_true.
* ls_control_parameters-no_dialog = abap_true.
* ls_control_parameters-langu = sy-langu.
* ls_control_parameters-getotf = abap_true.
*
* ls_output_options-tddest = 'LOCL'.
* ls_output_options-tdnoprint = abap_true.
*
* CALL FUNCTION lv_smf_funcion
* EXPORTING
* control_parameters = ls_control_parameters
* output_options = ls_output_options
* user_settings = space
** (... parametros de SF ...)
* IMPORTING
* document_output_info = ls_document_output_info
* job_output_info = ls_job_output_info
* job_output_options = ls_job_output_options
* EXCEPTIONS
* formatting_error = 1
* internal_error = 2
* send_error = 3
* user_canceled = 4
* OTHERS = 5.
* IF sy-subrc EQ 0.
*
* CALL FUNCTION 'CONVERT_OTF'
* EXPORTING
* format = 'PDF'
* IMPORTING
* bin_filesize = gv_pdf_fsize
* TABLES
* otf = ls_job_output_info-otfdata[]
* lines = gt_pdf_table " --> Aquí estará el PDF
* EXCEPTIONS
* err_max_linewidth = 1
* err_format = 2
* err_conv_not_possible = 3
* OTHERS = 4.
*
* ENDIF.
*
* ENDIF.
*ENDFORM.
**<--END_SF
**<--END_FRM