Académique Documents
Professionnel Documents
Culture Documents
com
REPORT z_ampliaciones_block_alv LINE-SIZE 255
NO STANDARD PAGE HEADING.
TYPE-POOLS:
icon,
rsfs,
rsds,
slis. "Tipos de datos para listas genéricas.
TABLES:
d010inc, "Tabla de utilización para Includes ABAP
dd03l, "Campos de tabla
modact, "Modificaciones de la CMOD
modsap, "Ampliaciones SAP
sxs_inter, "Exit: Pág.definición: Interfaces
sscrfields, "Campos en las imágenes de selección
tddir, "Exits de campo activos para elementos de datos
tddirs, "Exits de campos en determinados dynpros
tftit, "Texto breve de un módulo de funciones
trdirt, "Textos t?tulo p.programas en TRDIR
tstc, "Códigos de transacción SAP
tstct. "Textos de códigos de transacción
*----------------------------------------------------------------------*
* CONSTANTS
*----------------------------------------------------------------------*
CONSTANTS:
c_sust(22) TYPE c VALUE 'SUBSTITUTION',
c_user_exit(22) TYPE c VALUE 'USEREXIT',
c_badi(22) TYPE c VALUE 'BADI',
c_handler(30) TYPE c VALUE 'CL_EXITHANDLER=>GET_INSTANCE',
c_method(22) TYPE c VALUE 'CALL METHOD',
c_type_ref(22) TYPE c VALUE 'TYPE REF TO',
c_perform(22) TYPE c VALUE 'PERFORM',
c_form(22) TYPE c VALUE 'FORM',
c_endform(22) TYPE c VALUE 'ENDFORM',
c_bte(22) TYPE c VALUE 'OPEN_FI_PERFORM',
c_bte1(22) TYPE c VALUE 'OUTBOUND_CALL',
c_enhance(22) TYPE c VALUE 'CALL CUSTOMER-FUNCTION',
c_funcao_1(13) TYPE c VALUE 'CALLFUNCTION''',
c_funcao_2(13) TYPE c VALUE 'CALL FUNCTION',
c_enh(11) TYPE c VALUE 'ENHANCEMENT',
c_enh1(17) TYPE c VALUE 'ENHANCEMENT-POINT',
c_enh2(19) TYPE c VALUE 'ENHANCEMENT-SECTION',
c_endenh(14) TYPE c VALUE 'ENDENHANCEMENT',
c_endenh1(23) TYPE c VALUE 'END-ENHANCEMENT-SECTION',
c_include(07) TYPE c VALUE 'INCLUDE',
c_submit(06) TYPE c VALUE 'SUBMIT',
c_struct(11) TYPE c VALUE ' STRUCTURE ',
c_comentario TYPE c VALUE '*',
c_ponto TYPE c VALUE '.',
c_aspa TYPE c VALUE '''',
c_igual(3) TYPE c VALUE ' = ',
c_x TYPE c VALUE 'X'.
CONSTANTS:
c_ue(4) TYPE c VALUE 'EXIT',
c_b(4) TYPE c VALUE 'BADI',
c_bt(4) TYPE c VALUE 'BTE',
c_st(4) TYPE c VALUE 'SUST',
c_fdex(4) TYPE c VALUE 'FDEX',
c_enht(4) TYPE c VALUE 'ENH',
c_operation(4) TYPE c VALUE 'SHOW',
c_type(4) TYPE c VALUE 'PROG',
* Textos
c_text_01 TYPE slis_fieldcat_alv-reptext_ddic VALUE 'Programa',
c_text_02 TYPE slis_fieldcat_alv-reptext_ddic VALUE 'Nivel',
c_text_03 TYPE slis_fieldcat_alv-reptext_ddic VALUE 'Linea',
c_text_04 TYPE slis_fieldcat_alv-reptext_ddic VALUE 'Código fuente',
c_text_05 TYPE slis_fieldcat_alv-reptext_ddic VALUE 'Tipo',
c_text_06 TYPE string VALUE 'Breakpoint',
c_text_07 TYPE slis_fieldcat_alv-reptext_ddic VALUE 'STOP',
c_text_08 TYPE string VALUE 'Marcar todo',
c_text_09 TYPE string VALUE 'Desmarcar todo',
c_text_e01 TYPE slis_fieldcat_alv-reptext_ddic VALUE
'Debe ingresar programa o transacción',
c_text_e02 TYPE slis_fieldcat_alv-reptext_ddic VALUE
'Debe ingresar solo programa o transacción',
c_text_e03 TYPE slis_fieldcat_alv-reptext_ddic VALUE
'Debe seleccionar un tipo de mejora'.
CONSTANTS:
c_std_definition(3) TYPE c VALUE 'SAP',
c_std_implmnt(3) TYPE c VALUE 'KUN'.
*----------------------------------------------------------------------*
* TABLAS INTERNAS
*----------------------------------------------------------------------*
TYPES: BEGIN OF x_tadir,
obj_name TYPE sobj_name,
devclass TYPE devclass,
END OF x_tadir.
DATA:
ti_tadir TYPE STANDARD TABLE OF x_tadir WITH HEADER LINE,
ti_jtab TYPE STANDARD TABLE OF x_slog WITH HEADER LINE.
*----------------------------------------------------------------------*
* VARIABLE GLOBALES
*----------------------------------------------------------------------*
DATA:
functxt TYPE smp_dyntxt,
w_tini LIKE sy-timlo,
vg_caracter TYPE c,
vg_palavra(50) TYPE c,
vg_inicial LIKE sy-index,
vg_conta_aspa TYPE n,
vg_pname LIKE tfdir-pname,
vg_texto(50) TYPE c,
vg_contador LIKE sy-tfill,
vg_nivel(2) TYPE n,
vg_ini_contagem TYPE c, " INDICA QUE DEBE SER INICIADO EL CONTADOR
vg_conta_espaco TYPE n. " TOTAL DE ESPACIOS ( MÁXIMO 2 )
*----------------------------------------------------------------------*
* DEFINICION DE Estructuras y tablas para ALV (FM).
*----------------------------------------------------------------------*
DATA:
wa_cat TYPE slis_fieldcat_alv, " WA catálogo
ti_cat TYPE slis_t_fieldcat_alv, " TI catálogo
wa_layout TYPE slis_layout_alv, " WA opciones lista
ti_header TYPE slis_t_listheader, " TI cabecera lista
wa_header TYPE slis_listheader, " WA cabecera lista
wa_events TYPE slis_alv_event, " WA eventos lista
ti_events TYPE slis_t_event, " TI eventos lista
wa_sort TYPE slis_sortinfo_alv, " WA sort
ti_sort TYPE slis_t_sortinfo_alv, " TI sort
wa_print TYPE slis_print_alv. " WA print
*----------------------------------------------------------------------*
* PARAMETROS
*----------------------------------------------------------------------*
*- DATOS OBLIGATORIOS.
SELECTION-SCREEN BEGIN OF BLOCK bl01 WITH FRAME TITLE tit1 .
*- DATOS OPCIONALES.
SELECTION-SCREEN BEGIN OF BLOCK bl03 WITH FRAME TITLE tit3.
SELECTION-SCREEN: ULINE.
*-----------------------------------------------------------------------
* DEFINICIÓN DE MACROS
*-----------------------------------------------------------------------
DEFINE icon_create.
* Creo para el botón indicado, el icono y los textos correspondientes.
END-OF-DEFINITION. "icon_create
*-----------------------------------------------------------------------
* INICIALIZACIÓN DE VARIABLES
*-----------------------------------------------------------------------
INITIALIZATION.
PERFORM def_text_parameter.
PERFORM def_botones.
CLEAR ti_gb31t.
REFRESH ti_gb31t.
* Obtengo Validación/Sustitución/Eventos/Texto.
SELECT *
INTO TABLE ti_gb31t
FROM gb31t
WHERE spras EQ sy-langu.
*-----------------------------------------------------------------------
* AT SELECTION-SCREEN
*-----------------------------------------------------------------------
AT SELECTION-SCREEN.
CASE sscrfields-ucomm.
WHEN 'FC01'.
MOVE 'X' TO : p_ue, p_badi, p_bte, p_sust, p_val, p_fdex, p_enh.
WHEN 'FC02'.
CLEAR: p_ue, p_badi, p_bte, p_sust, p_val, p_fdex, p_enh.
WHEN 'FC03'.
PERFORM breakpoint.
WHEN 'EXT'.
PERFORM visualizar_ampliacion.
WHEN 'EXT1'.
PERFORM visualizar_proyecto.
WHEN 'EXT2'.
PERFORM visualizar_fm_exit.
WHEN 'BADI'.
PERFORM visualizar_interface.
WHEN 'OBB'.
CALL TRANSACTION 'OBBH'.
WHEN 'OB28'.
CALL TRANSACTION 'OB28'.
WHEN 'SUST' OR 'VAL'.
PERFORM visualizar_programa.
WHEN 'FDEX'.
SUBMIT rsmodprf AND RETURN.
WHEN 'BTE1'.
CALL TRANSACTION 'FIBF'.
WHEN 'BTE2'.
PERFORM cargar_bte USING 'E'.
WHEN 'BTE3'.
PERFORM cargar_bte USING 'P'.
WHEN 'SENH'.
SUBMIT sapmsenh VIA SELECTION-SCREEN
AND RETURN.
WHEN 'CIMP'.
PERFORM visualizar_imp_enh.
WHEN 'ALL'.
MOVE 'X' TO : p_incl, p_func, p_submit.
WHEN 'DAL'.
CLEAR: p_incl, p_func, p_submit.
WHEN OTHERS.
* Do Nothing !!.
ENDCASE.
PERFORM repid_f4.
*----------------------------------------------------------------------*
* INICIO
*----------------------------------------------------------------------*
START-OF-SELECTION.
GET TIME FIELD w_tini.
*- INICIALIZA TABLA.
PERFORM inicializa_tabela.
*----------------------------------------------------------------------*
* FIN
*----------------------------------------------------------------------*
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form BUSCA_USER_EXIT_BADI_BTE
*&---------------------------------------------------------------------*
* Busca EXIT's, BADI's y BTE en el código fuente.
*----------------------------------------------------------------------*
FORM busca_user_exit_badi_bte.
IF p_ue EQ 'X'.
PERFORM buscar_exit.
PERFORM busca_enhancements.
ENDIF.
IF p_badi EQ 'X'.
PERFORM buscar_badi.
ENDIF.
IF p_bte EQ 'X'.
PERFORM buscar_bte.
ENDIF.
IF p_enh EQ 'X'.
PERFORM buscar_punto_ampliacion.
ENDIF.
ENDLOOP.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Form BUSCA_ENHANCEMENTS
*&---------------------------------------------------------------------*
* Busca las llamadas a los USER-EXIT.
*----------------------------------------------------------------------*
FORM busca_enhancements.
*&---------------------------------------------------------------------*
*& Form EXIBE_USER_EXIT
*&---------------------------------------------------------------------*
* Muestra los datos.
*----------------------------------------------------------------------*
FORM exibe_user_exit.
PERFORM armar_alv.
PERFORM mostrar_listado.
*&---------------------------------------------------------------------*
*& Form PROCURA_INCLUDE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM procura_include.
CLEAR vg_palavra.
IF sy-subrc IS INITIAL.
EXIT.
ENDIF.
ENDIF.
ENDFORM. " PROCURA_INCLUDE
*&---------------------------------------------------------------------*
*& Form PROCURA_FUNCAO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM procura_funcao.
CLEAR: vg_conta_aspa,
vg_palavra.
ENDIF.
ENDIF.
*&---------------------------------------------------------------------*
*& Form VERIFICA_INCLUDE_FUNCAO_SUBMIT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM verifica_include_funcao_submit.
LOOP AT ti_includes.
ADD 1 TO vg_contador.
DESCRIBE TABLE ti_includes.
PERFORM evitar_time_out USING sy-tfill.
MOVE ti_includes-nivel TO vg_nivel.
ADD 1 TO vg_nivel.
LOOP AT ti_programa.
ENDLOOP.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Form EVITAR_TIME_OUT
*&---------------------------------------------------------------------*
* Evito el TIME OUT visualizando un mensaje
*----------------------------------------------------------------------*
FORM evitar_time_out USING p_tfill LIKE sy-tfill.
DATA:
vl_total(10) TYPE n,
vl_atual(10) TYPE n,
l_tout LIKE sy-timlo,
l_time(10) TYPE c.
MOVE:
p_tfill TO vl_total,
vg_contador TO vl_atual.
*&---------------------------------------------------------------------*
*& Form PROCURA_SUBMIT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM procura_submit.
*&---------------------------------------------------------------------*
*& Form CONSISTI_PARAMETROS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM consisti_parametros.
IF p_nivel IS INITIAL.
MOVE 1 TO p_nivel.
ENDIF.
*&---------------------------------------------------------------------*
*& Form INICIALIZA_TABELA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM inicializa_tabela.
DATA:
e_tstc TYPE tstc,
l_tcode TYPE sy-tcode.
REFRESH ti_includes.
*- BUSCO EL PROGRAMA.
READ REPORT ti_includes-nome INTO ti_programa.
IF sy-subrc EQ 0.
REFRESH ti_programa.
ELSE.
*- EL PROGRAMA NO EXISTE.
MESSAGE s893(pz) WITH 'El programa' p_prog 'no existe.'.
STOP.
ENDIF.
SELECT SINGLE *
FROM tstc
WHERE tcode EQ p_tcode.
IF sy-subrc EQ 0.
SELECT SINGLE *
INTO e_tstc
FROM tstc
WHERE tcode EQ l_tcode.
IF sy-subrc EQ 0.
MOVE: e_tstc-pgmna TO ti_includes-nome,
'0' TO ti_includes-nivel.
APPEND ti_includes.
ELSE.
*- LA TRANSACCIÓN NO EXISTE.
MESSAGE s893(pz) WITH 'La transacción' p_tcode 'no existe.'.
ENDIF.
ENDIF.
ELSE.
*- LA TRANSACCIÓN NO EXISTE.
MESSAGE s893(pz) WITH 'La transacción' p_tcode 'no existe.'.
STOP.
ENDIF.
ENDIF.
*&---------------------------------------------------------------------*
*& Form armar_alv
*&---------------------------------------------------------------------*
* Armo el ALV.
*----------------------------------------------------------------------*
FORM armar_alv .
DATA:
l_repid TYPE sy-repid.
PERFORM construir_catalogo_uexit.
PERFORM definir_layout USING 'TI_FINAL'
CHANGING wa_layout.
PERFORM construir_eventos USING 'TOP_OF_PAGE_UEXIT'.
PERFORM sort TABLES ti_sort
USING 'TI_FINAL'.
ENDIF.
ENDIF.
ENDIF.
PERFORM construir_catalogo_enhobj.
PERFORM definir_layout USING 'TI_ENHOBJ'
CHANGING wa_layout.
PERFORM construir_eventos USING 'TOP_OF_PAGE_ENHOBJ'.
PERFORM sort TABLES ti_sort
USING 'TI_ENHOBJ'.
ENDIF.
ENDIF.
ENDIF.
*&---------------------------------------------------------------------*
*& Form construir_catalogo_EXIT
*&---------------------------------------------------------------------*
* Construir catalogo de campos para ALV
*----------------------------------------------------------------------*
FORM construir_catalogo_exit .
DATA:
l_repid LIKE sy-repid.
REFRESH: ti_cat.
l_repid = sy-repid.
'SEL' 'X' 'X' 'X' ' ' ' ' 'X' 'X' ' ' ' ' ' ',
'PROGRAMA' 'X' ' ' 'X' ' ' ' ' ' ' ' ' ' ' ' ' c_text_01,
'TIPO' 'X' ' ' ' ' 'X' ' ' ' ' ' ' ' ' ' ' c_text_05,
'NIVEL' 'X' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' c_text_02,
'BREAK' 'X' ' ' ' ' 'X' ' ' ' ' ' ' ' ' ' ' c_text_07,
'LINEA' 'X' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' c_text_03,
'CF' ' ' ' ' ' ' 'X' ' ' ' ' ' ' ' ' ' ' c_text_04.
*&---------------------------------------------------------------------*
*& Form asignar_campo_a_catalogo
*&---------------------------------------------------------------------*
* Asignar campo al catalogo ALV
*----------------------------------------------------------------------*
FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_cat
USING p_fieldname LIKE wa_cat-fieldname
p_key LIKE wa_cat-key
p_col_pos TYPE c
p_fix_column LIKE wa_cat-fix_column
p_hotspot LIKE wa_cat-hotspot
p_do_sum LIKE wa_cat-do_sum
p_input LIKE wa_cat-input
p_checkbox LIKE wa_cat-checkbox
p_no_out LIKE wa_cat-no_out
p_icon LIKE wa_cat-icon
p_reptext_ddic LIKE wa_cat-reptext_ddic.
CHECK sy-subrc EQ 0.
IF p_col_pos EQ 'X'.
* Inicializo el conteo para ordenar las columnas.
l_col_pos = 1.
ELSE.
ADD 1 TO l_col_pos.
ENDIF.
wa_cat-fieldname = p_fieldname.
wa_cat-key = p_key.
wa_cat-col_pos = l_col_pos.
wa_cat-fix_column = p_fix_column.
wa_cat-hotspot = p_hotspot.
wa_cat-do_sum = p_do_sum.
wa_cat-edit = wa_cat-input = p_input.
wa_cat-checkbox = p_checkbox.
wa_cat-no_out = p_no_out.
wa_cat-icon = p_icon.
CLEAR p_layout.
IF p_table NE 'TI_CIMP'.
* Marco el campo para la selección.
p_layout-box_fieldname = 'SEL'.
p_layout-box_tabname = p_table.
ENDIF.
p_layout-zebra = 'X'.
p_layout-colwidth_optimize = 'X'.
p_layout-no_vline = ' '.
p_layout-no_colhead = ' '.
p_layout-lights_condense = 'X'.
p_layout-detail_popup = 'X'.
p_layout-detail_initial_lines = 'X'.
p_layout-flexible_key = ' '.
p_layout-key_hotspot = ' '.
p_layout-confirmation_prompt = 'X'.
*&---------------------------------------------------------------------*
*& Form construir_eventos
*&---------------------------------------------------------------------*
* Asignar eventos soportados
*----------------------------------------------------------------------*
FORM construir_eventos USING p_form LIKE wa_events-form.
DATA:
l_type(1) TYPE n.
REFRESH: ti_events.
CLEAR: wa_events.
*&---------------------------------------------------------------------*
*& Form top_of_page
*&---------------------------------------------------------------------*
* Mostrar cabecera de página
*----------------------------------------------------------------------
FORM top_of_page.
DATA:
l_tfill_inc(20) TYPE c,
l_tfill_cant(20) TYPE c.
ENDFORM. "top_of_page
*&---------------------------------------------------------------------*
*& Form TOP_OF_PAGE_UEXIT
*&---------------------------------------------------------------------*
* Mostrar cabecera de página
*----------------------------------------------------------------------
FORM top_of_page_uexit.
DATA:
l_tfill_inc(20) TYPE c,
l_tfill_cant(20) TYPE c.
ENDFORM. "TOP_OF_PAGE_UEXIT
*&---------------------------------------------------------------------*
*& Form TOP_OF_PAGE_FDEX
*&---------------------------------------------------------------------*
* Mostrar cabecera de página
*----------------------------------------------------------------------
FORM top_of_page_fdex.
DATA:
l_tfill_inc(20) TYPE c,
l_tfill_cant(20) TYPE c.
ENDFORM. "TOP_OF_PAGE_FDEX
*&---------------------------------------------------------------------*
*& Form TOP_OF_PAGE_BADI
*&---------------------------------------------------------------------*
* Mostrar cabecera de página
*----------------------------------------------------------------------
FORM top_of_page_badi.
DATA:
l_tfill_inc(20) TYPE c,
l_tfill_cant(20) TYPE c.
ENDFORM. "TOP_OF_PAGE_BADI
*&---------------------------------------------------------------------*
*& Form TOP_OF_PAGE_BTE
*&---------------------------------------------------------------------*
* Mostrar cabecera de página
*----------------------------------------------------------------------
FORM top_of_page_bte.
DATA:
l_tfill_inc(20) TYPE c,
l_tfill_cant(20) TYPE c.
ENDFORM. "TOP_OF_PAGE_BTE
*&---------------------------------------------------------------------*
*& Form TOP_OF_PAGE_ENH
*&---------------------------------------------------------------------*
* Mostrar cabecera de página
*----------------------------------------------------------------------
FORM top_of_page_enh.
DATA:
l_tfill_inc(20) TYPE c,
l_tfill_cant(20) TYPE c.
ENDFORM. "TOP_OF_PAGE_ENH
*&---------------------------------------------------------------------*
*& Form sort
*&---------------------------------------------------------------------*
* Creo el sort del ALV (FM).
*----------------------------------------------------------------------*
* -->PT_sort Tabla
* -->P_tabname Nombre de la tabla
*----------------------------------------------------------------------*
FORM sort TABLES pt_sort
USING p_tabname TYPE any.
CASE p_tabname.
WHEN 'TI_SUST'.
wa_sort-fieldname = 'SUBSTID'.
wa_sort-tabname = p_tabname.
wa_sort-up = 'X'.
wa_sort-comp = 'X'.
APPEND wa_sort TO pt_sort.
CLEAR: pt_sort, wa_sort.
wa_sort-fieldname = 'SUBSEQNR'.
wa_sort-tabname = p_tabname.
wa_sort-up = 'X'.
wa_sort-comp = 'X'.
APPEND wa_sort TO pt_sort.
wa_sort-fieldname = 'CONSEQNR'.
wa_sort-tabname = p_tabname.
wa_sort-up = 'X'.
wa_sort-comp = 'X'.
APPEND wa_sort TO pt_sort.
WHEN 'TI_VAL'.
wa_sort-fieldname = 'VALID'.
wa_sort-tabname = p_tabname.
wa_sort-up = 'X'.
wa_sort-comp = 'X'.
APPEND wa_sort TO pt_sort.
wa_sort-fieldname = 'VALSEQNR'.
wa_sort-tabname = p_tabname.
wa_sort-up = 'X'.
wa_sort-comp = 'X'.
APPEND wa_sort TO pt_sort.
WHEN 'TI_ENHOBJ'.
wa_sort-fieldname = 'ENHNAME'.
wa_sort-tabname = p_tabname.
wa_sort-up = 'X'.
wa_sort-comp = 'X'.
APPEND wa_sort TO pt_sort.
wa_sort-fieldname = 'VERSION'.
wa_sort-tabname = p_tabname.
wa_sort-up = 'X'.
wa_sort-comp = 'X'.
APPEND wa_sort TO pt_sort.
WHEN OTHERS.
IF p_tabname NE 'TI_FINAL'.
wa_sort-fieldname = 'TIPO'.
wa_sort-tabname = p_tabname.
wa_sort-up = 'X'.
wa_sort-comp = 'X'.
APPEND wa_sort TO pt_sort.
CLEAR: pt_sort, wa_sort.
IF p_tabname NE 'TI_FDEX'.
wa_sort-fieldname = 'NIVEL'.
wa_sort-tabname = p_tabname.
wa_sort-up = 'X'.
wa_sort-comp = 'X'.
APPEND wa_sort TO pt_sort.
wa_sort-fieldname = 'PROGRAMA'.
wa_sort-tabname = p_tabname.
wa_sort-up = 'X'.
wa_sort-comp = 'X'.
APPEND wa_sort TO pt_sort.
wa_sort-fieldname = 'LINEA'.
wa_sort-tabname = p_tabname.
wa_sort-up = 'X'.
wa_sort-comp = 'X'.
APPEND wa_sort TO pt_sort.
ENDIF.
ELSE.
wa_sort-fieldname = 'NAME'.
wa_sort-tabname = p_tabname.
wa_sort-up = 'X'.
wa_sort-comp = 'X'.
APPEND wa_sort TO pt_sort.
wa_sort-fieldname = 'MEMBER'.
wa_sort-tabname = p_tabname.
wa_sort-up = 'X'.
wa_sort-comp = 'X'.
APPEND wa_sort TO pt_sort.
ENDIF.
ENDCASE.
*&---------------------------------------------------------------------*
*& Form mostrar_listado
*&---------------------------------------------------------------------*
* Mostrar listado ALV
*----------------------------------------------------------------------*
FORM mostrar_listado .
wa_print-reserve_lines = 2.
*&---------------------------------------------------------------------*
*& Form user_command
*&---------------------------------------------------------------------*
* Evaluar acciones del usuario
*----------------------------------------------------------------------
FORM user_command USING ucomm LIKE sy-ucomm
sfields TYPE slis_selfield.
* Seleccion de opcion.
CASE ucomm.
* DOUBLE CLICK.
WHEN '&IC1'.
* Evaluar valor de campo seleccionado.
CHECK NOT sfields-value IS INITIAL.
CASE sfields-tabname.
WHEN 'TI_USER_EXIT'.
* USER-EXIT.
IF ti_user_exit-tipo EQ sfields-value(4).
SEARCH ti_user_exit-cf FOR c_enhance.
CHECK sy-subrc EQ 0.
PERFORM visualizar_exit USING ti_user_exit-programa
ti_user_exit-cf.
ELSEIF ti_user_exit-cf(60) EQ sfields-value.
PERFORM visualizar_linea USING ti_user_exit-programa
ti_user_exit-linea.
MOVE 'X' TO l_break.
ELSEIF ti_user_exit-break EQ sfields-value(4)
OR ti_user_exit-break+1(2) EQ sfields-value(2).
PERFORM asignar_break USING ti_user_exit-programa
ti_user_exit-linea
ti_user_exit-break.
MOVE 'X' TO l_break.
ENDIF.
WHEN 'TI_FINAL'.
* USER-EXIT Tx. CMOD.
IF ti_final-name EQ sfields-value.
CALL FUNCTION 'MOD_SAP_HEAD'
EXPORTING
mode = 'SHOM'
modname = ti_final-name
EXCEPTIONS
attr_enqueued = 1
text_enqueued = 2
OTHERS = 3.
WHEN 'TI_BADI'.
* Badi.
IF ti_badi-tipo EQ sfields-value(4).
PERFORM visualizar_badi USING ti_badi-cf.
ELSEIF ti_badi-cf(60) EQ sfields-value.
PERFORM visualizar_linea USING ti_badi-programa
ti_badi-linea.
MOVE 'X' TO l_break.
ELSEIF ti_badi-break EQ sfields-value(4)
OR ti_badi-break+1(2) EQ sfields-value(2).
PERFORM asignar_break USING ti_badi-programa
ti_badi-linea
ti_badi-break.
MOVE 'X' TO l_break.
ENDIF.
WHEN 'TI_BTE'.
* BTE.
IF ti_bte-tipo EQ sfields-value(4).
PERFORM fibf USING ti_bte-cf.
ELSEIF ti_bte-cf(60) EQ sfields-value.
PERFORM visualizar_linea USING ti_bte-programa
ti_bte-linea.
MOVE 'X' TO l_break.
ELSEIF ti_bte-break EQ sfields-value(4)
OR ti_bte-break+1(2) EQ sfields-value(2).
PERFORM asignar_break USING ti_bte-programa
ti_bte-linea
ti_bte-break.
MOVE 'X' TO l_break.
ENDIF.
WHEN 'TI_ENH'.
* Punto de ampliación.
IF ti_enh-cf(60) EQ sfields-value.
PERFORM visualizar_linea USING ti_enh-programa
ti_enh-linea.
MOVE 'X' TO l_break.
ELSEIF ti_enh-tipo EQ sfields-value(4).
PERFORM bi_se18 USING ti_enh-cf.
ENDIF.
WHEN 'TI_ENHOBJ'.
* Punto de ampliación.
IF ti_enhobj-enhname EQ sfields-value(30).
PERFORM bi_se19 USING ti_enhobj-enhname.
ENDIF.
WHEN 'TI_SUST'.
* Sustituciones.
IF ti_sust-substid EQ sfields-value(7) OR
ti_sust-subseqnr EQ sfields-value(3).
PERFORM visualizar_sust USING ti_sust-substid
ti_sust-subseqnr.
ENDIF.
WHEN 'TI_VAL'.
* Validaciones.
IF ti_val-valid EQ sfields-value(7) OR
ti_val-valseqnr EQ sfields-value(3).
PERFORM visualizar_val USING ti_val-valid
ti_val-valseqnr.
ENDIF.
WHEN 'TI_FDEX'.
* Field-exit.
IF ti_fdex-tipo EQ sfields-value.
SUBMIT rsmodprf AND RETURN.
ELSEIF ti_fdex-cf(60) EQ sfields-value.
* Visualizo el field-exit.
CALL FUNCTION 'RS_FUNCTION_SHOW'
EXPORTING
funcname = ti_fdex-cf.
WHEN 'TI_CIMP'.
* Customer implementation.
CASE sfields-fieldname.
WHEN 'ENHNAME'.
PERFORM bi_se19 USING ti_cimp-enhname.
WHEN 'ENHINCLUDE'.
PERFORM visualizar_enh_cf USING ti_cimp-enhinclude.
WHEN OTHERS.
* DO NOTHING !!!
ENDCASE.
WHEN OTHERS.
* DO NOTHING !!!
ENDCASE.
WHEN OTHERS.
* DO NOTHING !!!
ENDCASE.
ENDFORM. "user_command
*&---------------------------------------------------------------------*
*& Form visualizar_linea
*&---------------------------------------------------------------------*
* Visualizo la linea de código del programa.
*----------------------------------------------------------------------*
FORM visualizar_linea USING p_programa TYPE sy-repid
p_linea.
*&---------------------------------------------------------------------*
*& Form buscar_exit
*&---------------------------------------------------------------------*
* Buscar USER-EXIT.
*----------------------------------------------------------------------*
FORM buscar_exit .
CLEAR ti_user_exit.
*- REMUEVE ESPACIOS EN EL INÍCIO DEL STRING.
SHIFT ti_programa-cf LEFT DELETING LEADING space.
MOVE: ti_includes-nome TO ti_user_exit-programa,
c_ue TO ti_user_exit-tipo,
sy-tabix TO ti_user_exit-linea,
ti_programa-cf TO ti_user_exit-cf,
ti_includes-nivel TO ti_user_exit-nivel.
APPEND ti_user_exit.
ENDIF.
*&---------------------------------------------------------------------*
*& Form buscar_badi
*&---------------------------------------------------------------------*
* Buscar BADI.
*----------------------------------------------------------------------*
FORM buscar_badi .
DATA:
l_subrc LIKE sy-subrc.
IF l_subrc EQ 0.
CLEAR ti_badi.
*- REMUEVE ESPACIOS EN EL INICIO DEL STRING.
SHIFT ti_programa-cf LEFT DELETING LEADING space.
MOVE: ti_includes-nome TO ti_badi-programa,
c_b TO ti_badi-tipo,
sy-tabix TO ti_badi-linea,
ti_programa-cf TO ti_badi-cf,
ti_includes-nivel TO ti_badi-nivel.
APPEND ti_badi.
ENDIF.
ENDIF.
ELSE.
CHECK p_handl IS NOT INITIAL.
*- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE
*- UNA BADI.
SEARCH ti_programa-cf FOR c_handler.
*- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIÓN Y SE VERIFICA SI LA LINEA
*- NO ESTÁ COMENTADA.
IF sy-subrc EQ 0
AND ti_programa-cf+0(1) NE c_comentario.
*&---------------------------------------------------------------------*
*& Form buscar_bte
*&---------------------------------------------------------------------*
* Buscar BTE.
*----------------------------------------------------------------------*
FORM buscar_bte .
CLEAR ti_bte.
*- REMUEVE ESPACIOS EN EL INICIO DEL STRING.
SHIFT ti_programa-cf LEFT DELETING LEADING space.
MOVE: ti_includes-nome TO ti_bte-programa,
c_bt TO ti_bte-tipo,
sy-tabix TO ti_bte-linea,
ti_programa-cf TO ti_bte-cf,
ti_includes-nivel TO ti_bte-nivel.
APPEND ti_bte.
ENDIF.
CLEAR ti_bte.
*- REMUEVE ESPACIOS EN EL INICIO DEL STRING.
SHIFT ti_programa-cf LEFT DELETING LEADING space.
MOVE: ti_includes-nome TO ti_bte-programa,
c_bt TO ti_bte-tipo,
sy-tabix TO ti_bte-linea,
ti_programa-cf TO ti_bte-cf,
ti_includes-nivel TO ti_bte-nivel.
APPEND ti_bte.
ENDIF.
*&---------------------------------------------------------------------*
*& Form repid_f4
*&---------------------------------------------------------------------*
* Ejecuto el F4 para buscar programas.
*----------------------------------------------------------------------*
FORM repid_f4 .
*&---------------------------------------------------------------------*
*& Form visualizar_badi
*&---------------------------------------------------------------------*
* Visualizo las definiciones de la BADI.
*-------------------ढ़--------------------------------------------------*
FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf.
DATA:
l_answer(1),
l_inter_name LIKE sxs_inter-inter_name,
l_cf TYPE i.
REFRESH lt_cf.
CASE l_answer.
WHEN '1'.
* Visualizo la definición de la BADI.
CALL FUNCTION 'SXO_BADI_SHOW'
EXPORTING
exit_name = sxs_inter-exit_name
EXCEPTIONS
action_canceled = 1
access_failure = 2
badi_not_exixting = 3
OTHERS = 4.
WHEN '2'.
* Visualizo la implementación de la BADI.
CALL FUNCTION 'SXO_IMPL_FOR_BADI_OVER'
EXPORTING
exit_name = sxs_inter-exit_name
EXCEPTIONS
no_imps_existing = 1
badi_not_existing = 2
action_canceled = 3
OTHERS = 4.
IF sy-subrc = 1.
MESSAGE s380(enhancement) WITH sxs_inter-exit_name.
ENDIF.
WHEN OTHERS.
* Do Nothing !!
ENDCASE.
*&---------------------------------------------------------------------*
*& Form visualizar_exit
*&---------------------------------------------------------------------*
* Visualizo el USER-EXIT.
*----------------------------------------------------------------------*
* -->P_REPID Nombre del programa.
* -->P_CF Linea de código del programa.
*----------------------------------------------------------------------*
FORM visualizar_exit USING p_repid LIKE sy-repid
p_cf LIKE ti_user_exit-cf.
DATA:
l_exit LIKE rs38l-name,
l_modname LIKE modact-name,
l_standard(3) TYPE c,
l_cf TYPE i,
l_linea(500) TYPE c.
DATA: BEGIN OF lt_cf OCCURS 0,
linea(500),
END OF lt_cf.
IF sy-subrc NE 0.
* No se trata de un INCLUDE.
MOVE p_repid TO d010inc-master.
ENDIF.
REFRESH lt_cf.
* Obtengo la ampliación.
SELECT SINGLE *
FROM modsap
WHERE member EQ l_exit.
IF sy-subrc IS INITIAL.
* Se encontró el proyecto para la ampliación.
MOVE:
modact-name TO l_modname,
c_std_implmnt TO l_standard.
ELSE.
* No hay proyecto para la ampliación.
MOVE:
modsap-name TO l_modname.
ENDIF.
*&---------------------------------------------------------------------*
*& Form buscar_field_exit
*&---------------------------------------------------------------------*
* Busco los field-exit's de los campos de las DYNPRO's.
*----------------------------------------------------------------------*
FORM buscar_field_exit .
DATA:
l_prog LIKE sy-repid,
lt_d020s LIKE d020s OCCURS 0 WITH HEADER LINE,
lt_d021s LIKE d021s OCCURS 0 WITH HEADER LINE,
lt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE.
CLEAR ti_fdex.
REFRESH: lt_d020s, lt_d021s, lt_dd03l, lt_fe.
LOOP AT lt_d020s.
REFRESH lt_d021s.
IF sy-subrc IS INITIAL.
MOVE:
lt_d020s-prog TO lt_campo-repid,
lt_d020s-dnum TO lt_campo-dnum.
APPEND lt_campo.
ENDIF.
ENDLOOP.
ENDLOOP.
LOOP AT lt_dd03l.
SELECT SINGLE *
FROM tddir
WHERE de EQ lt_dd03l-rollname.
IF tddir-activ EQ 'S'.
* Selectivo en dynpros.
SELECT SINGLE *
FROM tddirs
WHERE de EQ lt_dd03l-rollname
AND prog EQ lt_d020s-prog.
* Armo la FM.
CONCATENATE 'FIELD_EXIT_' lt_dd03l-rollname INTO lt_fe-cf.
LOOP AT lt_fe.
* Cargo los field-exit's.
MOVE:
c_fdex TO ti_fdex-tipo,
lt_fe-cf TO ti_fdex-cf.
APPEND ti_fdex.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Form fibf
*&---------------------------------------------------------------------*
* Visualizo la BTE.
*----------------------------------------------------------------------*
* -->P_CF Código fuente
*----------------------------------------------------------------------*
FORM fibf USING p_cf LIKE ti_bte-cf.
DATA:
l_fdpos TYPE sy-fdpos,
l_cf TYPE i,
l_tipo TYPE c,
l_linea(500) TYPE c.
IF sy-subrc IS INITIAL.
* 'OPEN_FI_PERFORM'.
l_fdpos = sy-fdpos + 16.
ELSE.
ENDIF.
ELSE.
CALL TRANSACTION 'FIBF'.
ENDIF.
DATA:
l_repid LIKE sy-repid.
REFRESH: ti_cat.
l_repid = sy-repid.
'SEL' 'X' 'X' 'X' ' ' ' ' 'X' 'X' ' ' ' ' ' ',
'PROGRAMA' 'X' ' ' 'X' ' ' ' ' ' ' ' ' ' ' ' ' c_text_01,
'TIPO' 'X' ' ' ' ' 'X' ' ' ' ' ' ' ' ' ' ' c_text_05,
'NIVEL' 'X' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' c_text_02,
'BREAK' 'X' ' ' ' ' 'X' ' ' ' ' ' ' ' ' ' ' c_text_07,
'LINEA' 'X' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' c_text_03,
'CF' ' ' ' ' ' ' 'X' ' ' ' ' ' ' ' ' ' ' c_text_04.
*&---------------------------------------------------------------------*
*& Form construir_catalogo_bte
*&---------------------------------------------------------------------*
* Construir catalogo de campos para ALV.
*----------------------------------------------------------------------*
FORM construir_catalogo_bte .
DATA:
l_repid LIKE sy-repid.
REFRESH: ti_cat.
l_repid = sy-repid.
'SEL' 'X' 'X' 'X' ' ' ' ' 'X' 'X' ' ' ' ' ' ',
'PROGRAMA' 'X' ' ' 'X' ' ' ' ' ' ' ' ' ' ' ' ' c_text_01,
'TIPO' 'X' ' ' ' ' 'X' ' ' ' ' ' ' ' ' ' ' c_text_05,
'NIVEL' 'X' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' c_text_02,
'BREAK' 'X' ' ' ' ' 'X' ' ' ' ' ' ' ' ' 'X' c_text_07,
'LINEA' 'X' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' c_text_03,
'CF' ' ' ' ' ' ' 'X' ' ' ' ' ' ' ' ' ' ' c_text_04.
*&---------------------------------------------------------------------*
*& Form construir_catalogo_FDEX
*&---------------------------------------------------------------------*
* Construir catalogo de campos para ALV.
*----------------------------------------------------------------------*
FORM construir_catalogo_fdex .
DATA:
l_repid LIKE sy-repid.
REFRESH: ti_cat.
l_repid = sy-repid.
'SEL' 'X' 'X' 'X' ' ' ' ' 'X' 'X' ' ' ' ' ' ',
'TIPO' 'X' ' ' ' ' 'X' ' ' ' ' ' ' ' ' ' ' c_text_05,
'CF' ' ' ' ' ' ' 'X' ' ' ' ' ' ' ' ' ' ' c_text_04.
DATA:
l_tabix TYPE sy-tabix,
l_line TYPE breakpoint-line,
l_program TYPE breakpoint-program,
wa_break TYPE showbreakpointstruc,
lt_break TYPE TABLE OF showbreakpointstruc.
MOVE:
ti_user_exit-linea TO l_line,
ti_user_exit-programa TO l_program.
IF sy-subrc IS INITIAL.
MOVE icon_breakpoint TO ti_user_exit-break.
ELSE.
MOVE icon_space TO ti_user_exit-break.
ENDIF.
MODIFY ti_user_exit INDEX l_tabix.
ENDLOOP.
ENDIF.
MOVE:
ti_badi-linea TO l_line,
ti_badi-programa TO l_program.
IF sy-subrc IS INITIAL.
MOVE icon_breakpoint TO ti_badi-break.
ELSE.
MOVE icon_space TO ti_badi-break.
ENDIF.
MODIFY ti_badi INDEX l_tabix.
ENDLOOP.
ENDIF.
MOVE:
ti_bte-linea TO l_line,
ti_bte-programa TO l_program.
IF sy-subrc IS INITIAL.
MOVE icon_breakpoint TO ti_bte-break.
ELSE.
MOVE icon_space TO ti_bte-break.
ENDIF.
MODIFY ti_bte INDEX l_tabix.
ENDLOOP.
ENDIF.
*&---------------------------------------------------------------------*
*& Form asignar_break
*&---------------------------------------------------------------------*
* Asigno el break a la linea.
*----------------------------------------------------------------------*
* -->P_PROGRAMA text
* -->P_LINEA text
* -->P_BREAK text
*----------------------------------------------------------------------*
FORM asignar_break USING p_programa TYPE sy-repid
p_linea LIKE ti_bte-linea
p_break TYPE icon-id.
DATA:
l_tabix TYPE sy-tabix,
l_line TYPE breakpoint-line,
l_program TYPE breakpoint-program,
wa_break TYPE showbreakpointstruc,
lt_break TYPE TABLE OF showbreakpointstruc.
SELECT SINGLE *
FROM d010inc
WHERE include = p_programa.
MOVE:
p_linea TO l_line,
p_programa TO l_program.
IF sy-subrc IS INITIAL.
* Borro el break.
CALL FUNCTION 'RS_DELETE_BREAKPOINT'
EXPORTING
index = p_linea
mainprog = d010inc-master
program = p_programa.
ELSE.
* Seteo el breakpoint.
CALL FUNCTION 'RS_SET_BREAKPOINT'
EXPORTING
index = p_linea
program = p_programa
mainprogram = d010inc-master
EXCEPTIONS
not_executed = 1
OTHERS = 2.
ENDIF.
IF p_prog IS INITIAL.
MOVE tstc-pgmna TO p_prog.
ENDIF.
*&---------------------------------------------------------------------*
*& Form get_objects
*&---------------------------------------------------------------------*
* Get Objects
*----------------------------------------------------------------------*
FORM get_objects.
DATA:
l_fname LIKE rs38l-name,
l_group LIKE rs38l-area,
l_include LIKE rs38l-include,
l_namespace LIKE rs38l-namespace,
l_str_area LIKE rs38l-str_area.
IF sy-subrc = 0.
SELECT obj_name
INTO TABLE ti_jtab
FROM tadir
FOR ALL ENTRIES IN ti_tadir
WHERE pgmid = 'R3TR' AND
object = 'SMOD' AND
devclass = ti_tadir-devclass.
IF sy-subrc = 0.
SORT ti_jtab BY obj_name.
ENDIF.
ENDIF.
*- Get UserExit names
LOOP AT ti_jtab.
APPEND ti_final.
CLEAR ti_final.
ENDSELECT.
ENDLOOP.
*- Process it_final contents.
LOOP AT ti_final.
l_tabix = sy-tabix.
CLEAR:
l_fname, l_group, l_include, l_namespace, l_str_area.
l_fname = ti_final-member.
IF sy-subrc = 0.
IF NOT l_include IS INITIAL.
*- Get Source code of include.
CLEAR: v_include, e_t_include, e_t_include[].
v_include = l_include.
CALL FUNCTION 'MU_INCLUDE_GET'
EXPORTING
i_include = v_include
TABLES
e_t_include = e_t_include.
LOOP AT e_t_include.
IF e_t_include-line CS 'INCLUDE'.
CLEAR l_line.
l_line = e_t_include-line.
CONDENSE l_line NO-GAPS.
TRANSLATE l_line USING '. '.
l_line = l_line+7.
ti_final-include = l_line.
ti_final-programa = l_include.
MODIFY ti_final INDEX l_tabix
TRANSPORTING include programa.
ENDIF.
ENDLOOP.
CLEAR tftit.
SELECT SINGLE stext
INTO ti_final-stext
FROM tftit
WHERE spras = sy-langu AND
funcname = ti_final-member.
MODIFY ti_final INDEX l_tabix TRANSPORTING stext.
ENDIF.
ENDIF.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Form construir_catalogo_uexit
*&---------------------------------------------------------------------*
* Construir catalogo de campos para ALV
*----------------------------------------------------------------------*
FORM construir_catalogo_uexit .
DATA:
l_repid LIKE sy-repid.
REFRESH: ti_cat.
l_repid = sy-repid.
'SEL' 'X' 'X' 'X' ' ' ' ' 'X' 'X' ' ' ' ' ' ',
'NAME' 'X' ' ' ' ' 'X' ' ' ' ' ' ' ' ' ' ' ' ',
'MEMBER' 'X' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'STEXT' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'INCLUDE' ' ' ' ' ' ' 'X' ' ' ' ' ' ' ' ' ' ' ' ',
'PROGRAMA' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'X' ' ' ' '.
*&---------------------------------------------------------------------*
*& Form visualizar_ampliacion
*&---------------------------------------------------------------------*
* Visualizo la ampliación de un exit.
*----------------------------------------------------------------------*
FORM visualizar_ampliacion .
DATA:
l_ret TYPE c,
l_member TYPE modsap-member,
lt_fields TYPE sval OCCURS 0 WITH HEADER LINE.
MOVE:
'MODSAP' TO lt_fields-tabname,
'MEMBER' TO lt_fields-fieldname,
'User-Exit' TO lt_fields-fieldtext.
APPEND lt_fields.
IF lt_fields-value IS INITIAL.
* El exit de función & no existe
MESSAGE e015(enhancement) WITH lt_fields-value.
ELSE.
MOVE lt_fields-value TO l_member.
ENDIF.
SELECT SINGLE *
FROM modsap
WHERE member EQ l_member.
IF sy-subrc IS INITIAL.
* Visualizo la ampliación.
CALL FUNCTION 'MOD_SAP_HEAD'
EXPORTING
mode = 'SHOM'
modname = modsap-name
EXCEPTIONS
attr_enqueued = 1
text_enqueued = 2
OTHERS = 3.
ELSE.
* El exit de función & no existe
MESSAGE e015(enhancement) WITH l_member.
ENDIF.
*&---------------------------------------------------------------------*
*& Form visualizar_bte
*&---------------------------------------------------------------------*
* Visualizo la BTE.
*----------------------------------------------------------------------*
* -->P_TIPO Tipo de BTE
* -->P_LINEA Evento o proceso.
*----------------------------------------------------------------------*
FORM visualizar_bte USING p_tipo TYPE c
p_linea.
RANGES:
r_event FOR tbe01-event,
r_procs FOR tps01-procs.
CASE p_tipo.
WHEN 'E'.
* Interface de publicación y suscripción.
MOVE:
'I' TO r_event-sign,
'EQ' TO r_event-option,
p_linea(8) TO r_event-low.
APPEND r_event.
SUBMIT rfopfi00
WITH event IN r_event
WITH xonlk = ' '
AND RETURN.
WHEN 'P'.
* Interface de proceso.
MOVE:
'I' TO r_procs-sign,
'EQ' TO r_procs-option,
p_linea(8) TO r_procs-low.
APPEND r_procs.
SUBMIT rfopfi01
WITH procs IN r_procs
WITH xonlk = ' '
AND RETURN.
WHEN OTHERS.
* Do nothing !!
ENDCASE.
*&---------------------------------------------------------------------*
*& Form cargar_bte
*&---------------------------------------------------------------------*
* Ingreso la BTE que quiero visualizar.
*----------------------------------------------------------------------*
* -->P_TIPO Tipo de BTE
*----------------------------------------------------------------------*
FORM cargar_bte USING p_tipo TYPE c.
DATA:
l_linea(500) TYPE c.
DATA:
l_ret TYPE c,
lt_fields TYPE sval OCCURS 0 WITH HEADER LINE.
CASE p_tipo.
WHEN 'E'.
* Interface de publicación y suscripción.
MOVE:
'TBE01' TO lt_fields-tabname,
'EVENT' TO lt_fields-fieldname.
WHEN 'P'.
* Interface de proceso.
MOVE:
'TPS01' TO lt_fields-tabname,
'PROCS' TO lt_fields-fieldname.
WHEN OTHERS.
* Do nothing !!
ENDCASE.
APPEND lt_fields.
*&---------------------------------------------------------------------*
*& Form visualizar_interface
*&---------------------------------------------------------------------*
* Visualizo la definición de la BADI que corresponde a la
* interface.
*----------------------------------------------------------------------*
FORM visualizar_interface .
DATA:
l_linea(500) TYPE c.
DATA:
l_ret TYPE c,
l_inter_name TYPE sxs_inter-inter_name,
lt_fields TYPE sval OCCURS 0 WITH HEADER LINE.
* Interface.
MOVE:
'SXS_INTER' TO lt_fields-tabname,
'INTER_NAME' TO lt_fields-fieldname.
APPEND lt_fields.
IF sy-subrc IS INITIAL.
* Visualizo la definición de la BADI.
CALL FUNCTION 'SXO_BADI_SHOW'
EXPORTING
exit_name = sxs_inter-exit_name
EXCEPTIONS
action_canceled = 1
access_failure = 2
badi_not_exixting = 3
OTHERS = 4.
ELSE.
* El interface & es erróneo.
MESSAGE e226(enhancement) WITH l_inter_name.
ENDIF.
ENDFORM. "visualizar_interface
*&---------------------------------------------------------------------*
*& Form buscar_sustituciones
*&---------------------------------------------------------------------*
* Obtengo las sustituciones creadas.
*----------------------------------------------------------------------*
FORM buscar_sustituciones .
SELECT *
INTO CORRESPONDING FIELDS OF TABLE ti_sust
FROM gb922.
*&---------------------------------------------------------------------*
*& Form construir_catalogo_sust
*&---------------------------------------------------------------------*
* Construir catalogo de campos para ALV.
*----------------------------------------------------------------------*
FORM construir_catalogo_sust .
DATA:
l_repid LIKE sy-repid.
REFRESH: ti_cat.
l_repid = sy-repid.
'SEL' 'X' 'X' 'X' ' ' ' ' 'X' 'X' ' ' ' ' ' ',
'SUBSTID' 'X' ' ' 'X' 'X' ' ' ' ' ' ' ' ' ' ' ' ',
'SUBSEQNR' 'X' ' ' 'X' 'X' ' ' ' ' ' ' ' ' ' ' ' ',
'CONSEQNR' 'X' ' ' 'X' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'SUBSTAB' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'SUBSFIELD' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'SUBSVAL' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'EXITSUBST' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '.
*&---------------------------------------------------------------------*
*& Form TOP_OF_PAGE_SUST
*&---------------------------------------------------------------------*
* Mostrar cabecera de página
*----------------------------------------------------------------------
FORM top_of_page_sust.
DATA:
l_tfill_inc(20) TYPE c,
l_tfill_cant(20) TYPE c.
ENDFORM. "TOP_OF_PAGE_SUST
*&---------------------------------------------------------------------*
*& Form visualizar_sust
*&---------------------------------------------------------------------*
* Visualizo la sustitución.
*----------------------------------------------------------------------*
* -->P_SUBSTID Nombre de la sustitución
* -->P_SUBSEQNR Número de paso de la sustitución
*----------------------------------------------------------------------*
FORM visualizar_sust USING p_substid TYPE gb922-substid
p_subseqnr TYPE gb922-subseqnr.
DATA:
l_valuser LIKE gb31-valuser,
l_valeven LIKE gb31-valevent.
*&---------------------------------------------------------------------*
*& Form buscar_validaciones
*&---------------------------------------------------------------------*
* Obtengo las validaciones creadas.
*----------------------------------------------------------------------*
FORM buscar_validaciones .
SELECT *
INTO CORRESPONDING FIELDS OF TABLE ti_val
FROM gb931.
*&---------------------------------------------------------------------*
*& Form construir_catalogo_val
*&---------------------------------------------------------------------*
* Construir catalogo de campos para ALV.
*----------------------------------------------------------------------*
FORM construir_catalogo_val .
DATA:
l_repid LIKE sy-repid.
REFRESH: ti_cat.
l_repid = sy-repid.
'SEL' 'X' 'X' 'X' ' ' ' ' 'X' 'X' ' ' ' ' ' ',
'VALID' 'X' ' ' 'X' 'X' ' ' ' ' ' ' ' ' ' ' ' ',
'VALSEQNR' 'X' ' ' 'X' 'X' ' ' ' ' ' ' ' ' ' ' ' ',
'CONDID' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'CHECKID' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '.
DATA:
l_tfill_inc(20) TYPE c,
l_tfill_cant(20) TYPE c.
ENDFORM. "TOP_OF_PAGE_VAL
*&---------------------------------------------------------------------*
*& Form visualizar_val
*&---------------------------------------------------------------------*
* Visualizo la validación.
*----------------------------------------------------------------------*
* -->P_VALID Validación
* -->P_VALSEQNR Número secuencial de una etapa de validación
*----------------------------------------------------------------------*
FORM visualizar_val USING p_valid TYPE gb931-valid
p_valseqnr TYPE gb931-valseqnr.
DATA:
l_valuser LIKE gb31-valuser,
l_valeven LIKE gb31-valevent.
*&---------------------------------------------------------------------*
*& Form visualizar_proyecto
*&---------------------------------------------------------------------*
* Visualizo el proyecto asosiado a una ampliación.
*----------------------------------------------------------------------*
FORM visualizar_proyecto .
DATA:
l_ret TYPE c,
l_name TYPE modsap-name,
l_member TYPE modact-member,
l_modname TYPE modact-name,
l_standard(3) TYPE c,
lt_fields TYPE sval OCCURS 0 WITH HEADER LINE.
MOVE:
'MODSAP' TO lt_fields-tabname,
'NAME' TO lt_fields-fieldname.
APPEND lt_fields.
IF lt_fields-value IS INITIAL.
* La ampliación & no existe
MESSAGE e012(enhancement) WITH lt_fields-value.
ELSE.
MOVE lt_fields-value TO l_name.
ENDIF.
SELECT SINGLE *
FROM modsap
WHERE name EQ l_name.
IF sy-subrc IS INITIAL.
IF sy-subrc IS INITIAL.
* Se encontró el proyecto para la ampliación.
MOVE:
modact-name TO l_modname,
c_std_implmnt TO l_standard.
ELSE.
* La ampliación & no existe
MESSAGE e012(enhancement) WITH lt_fields-value.
ENDIF.
*&---------------------------------------------------------------------*
*& Form buscar_punto_ampliación
*&---------------------------------------------------------------------*
* Obtengo los puntos de ampliación ya implementados.
*----------------------------------------------------------------------*
FORM buscar_punto_ampliacion .
CLEAR ti_enh.
*- REMUEVE ESPACIOS EN EL INICIO DEL STRING.
SHIFT ti_programa-cf LEFT DELETING LEADING space.
MOVE: ti_includes-nome TO ti_enh-programa,
c_enht TO ti_enh-tipo,
sy-tabix TO ti_enh-linea,
ti_programa-cf TO ti_enh-cf,
ti_includes-nivel TO ti_enh-nivel.
APPEND ti_enh.
ELSE.
CLEAR ti_enh.
*- REMUEVE ESPACIOS EN EL INICIO DEL STRING.
SHIFT ti_programa-cf LEFT DELETING LEADING space.
MOVE: ti_includes-nome TO ti_enh-programa,
c_enht TO ti_enh-tipo,
sy-tabix TO ti_enh-linea,
ti_programa-cf TO ti_enh-cf,
ti_includes-nivel TO ti_enh-nivel.
APPEND ti_enh.
ENDIF.
ENDIF.
ENDIF.
*&---------------------------------------------------------------------*
*& Form construir_catalogo_enh
*&---------------------------------------------------------------------*
* Construir catalogo de campos para ALV.
*----------------------------------------------------------------------*
FORM construir_catalogo_enh .
DATA:
l_repid LIKE sy-repid.
REFRESH: ti_cat.
l_repid = sy-repid.
'SEL' 'X' 'X' 'X' ' ' ' ' 'X' 'X' ' ' ' ' ' ',
'PROGRAMA' 'X' ' ' 'X' ' ' ' ' ' ' ' ' ' ' ' ' c_text_01,
'TIPO' 'X' ' ' ' ' 'X' ' ' ' ' ' ' ' ' ' ' c_text_05,
'NIVEL' 'X' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' c_text_02,
'BREAK' 'X' ' ' ' ' 'X' ' ' ' ' ' ' ' ' 'X' c_text_07,
'LINEA' 'X' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' c_text_03,
'CF' ' ' ' ' ' ' 'X' ' ' ' ' ' ' ' ' ' ' c_text_04.
*&---------------------------------------------------------------------*
*& Form buscar_enh
*&---------------------------------------------------------------------*
* Busco los puntos de ampliación del programa.
*----------------------------------------------------------------------*
FORM buscar_enh .
* DATA:
* l_obj_name TYPE enhobj-obj_name.
DATA: BEGIN OF lt_obj_name OCCURS 0,
obj_name TYPE enhobj-obj_name,
END OF lt_obj_name.
REFRESH lt_obj_name.
LOOP AT ti_includes.
APPEND ti_includes-nome TO lt_obj_name.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Form construir_catalogo_enhobj
*&---------------------------------------------------------------------*
* Construir catalogo de campos para ALV.
*----------------------------------------------------------------------*
FORM construir_catalogo_enhobj .
DATA:
l_repid LIKE sy-repid.
REFRESH: ti_cat.
l_repid = sy-repid.
'SEL' 'X' 'X' 'X' ' ' ' ' 'X' 'X' ' ' ' ' ' ',
'ENHNAME' 'X' ' ' 'X' 'X' ' ' ' ' ' ' ' ' ' ' ' ',
'VERSION' 'X' ' ' 'X' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'OBJ_TYPE' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'X' ' ' ' ',
'OBJ_NAME' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '.
*&---------------------------------------------------------------------*
*& Form TOP_OF_PAGE_ENHOBJ
*&---------------------------------------------------------------------*
* Mostrar cabecera de página
*----------------------------------------------------------------------
FORM top_of_page_enhobj.
DATA:
l_tfill_inc(20) TYPE c,
l_tfill_cant(20) TYPE c.
ENDFORM. "TOP_OF_PAGE_ENHOBJ
*&---------------------------------------------------------------------*
*& Form bi_se19
*&---------------------------------------------------------------------*
* Visualizo el punto de ampliación implementado.
*----------------------------------------------------------------------*
* -->P_ENHNAME Punto de ampliación implementado.
*----------------------------------------------------------------------*
FORM bi_se19 USING p_enhname TYPE enhobj-enhname .
*&---------------------------------------------------------------------*
*& Form BDC_DYNPRO
*&---------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
CLEAR ti_bdcdata.
ti_bdcdata-program = program.
ti_bdcdata-dynpro = dynpro.
ti_bdcdata-dynbegin = 'X'.
APPEND ti_bdcdata.
*&---------------------------------------------------------------------*
*& Form BDC_FIELD
*&---------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
CLEAR ti_bdcdata.
ti_bdcdata-fnam = fnam.
ti_bdcdata-fval = fval.
APPEND ti_bdcdata.
ENDFORM. "BDC_FIELD
*&---------------------------------------------------------------------*
*& Form visualizar_programa
*&---------------------------------------------------------------------*
* Visualizo el programa que se genera dinámicamente para las
* sustituciones y validaciones de FI.
*----------------------------------------------------------------------*
FORM visualizar_programa .
DATA:
l_selfield TYPE slis_selfield,
l_exit TYPE c,
l_repid TYPE sy-repid,
l_boolpool(8).
DO.
IF l_exit EQ 'X'.
EXIT.
ENDIF.
* Visualizo el programa.
PERFORM visualizar_linea USING l_repid
'01'.
ENDDO.
*&---------------------------------------------------------------------*
*& Form texto_tope
*&---------------------------------------------------------------------*
* Encabezado que explica la funcionalidad de algunas columnas
* del reporte.
*----------------------------------------------------------------------*
FORM texto_tope .
l_flag = 'X'.
WRITE:
* Título.
/(70) sy-uline,
/1(1) sy-vline,
3 l_tit,
70(1) sy-vline,
/(70) sy-uline,
*1er linea.
/1(1) sy-vline,
3 'TIPO: Se visualiza las definiciones de los objetos de',
70(1) sy-vline,
*2da linea.
/1(1) sy-vline,
3 ' ampliación.',
70(1) sy-vline,
*3ra linea.
/1(1) sy-vline,
3 'STOP: Agrega un BREAK en la línea de código seleccionada.',
70(1) sy-vline,
*4ta linea.
/1(1) sy-vline,
3 'CÓDIGO FUENTE: Se visualiza la línea de código en el ',
70(1) sy-vline,
*5ta linea.
/1(1) sy-vline,
3 ' programa correspondiente.',
70(1) sy-vline,
* Cierro el cuadro.
/(70) sy-uline.
SKIP.
*&---------------------------------------------------------------------*
*& Form bi_se18
*&---------------------------------------------------------------------*
* Visualizo la definición del enhancement point.
*&---------------------------------------------------------------------*
FORM bi_se18 USING p_cf.
DATA:
l_enhspotname TYPE enhspotname,
l_off TYPE i,
l_cf TYPE i.
FIND FIRST OCCURRENCE OF ' SPOT ' IN p_cf MATCH OFFSET l_off.
ADD 7 TO l_off.
l_cf = 500 - l_off.
*&---------------------------------------------------------------------*
*& Form visualizar_fm_exit
*&---------------------------------------------------------------------*
* Se visualiza el módulo de funciones del user-exit's que
* contiene al include Z indicado.
*----------------------------------------------------------------------*
FORM visualizar_fm_exit .
DATA:
l_ret TYPE c,
l_flag TYPE c,
l_name TYPE trdir-name,
lt_fields TYPE sval OCCURS 0 WITH HEADER LINE,
lt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE.
DATA:
v_include LIKE rodiobj-iobjnm,
l_fname LIKE rs38l-name,
l_group LIKE rs38l-area,
l_include LIKE rs38l-include,
l_namespace LIKE rs38l-namespace,
l_str_area LIKE rs38l-str_area,
lt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE.
MOVE:
'RS38L' TO lt_fields-tabname,
'INCLUDE' TO lt_fields-fieldname,
'Include' TO lt_fields-fieldtext.
APPEND lt_fields.
LOOP AT lt_tfdir.
CLEAR:
l_group, l_include, l_namespace, l_str_area.
l_fname = lt_tfdir-funcname.
* Obtengo el include del user-exti's.
CALL FUNCTION 'FUNCTION_EXISTS'
EXPORTING
funcname = l_fname
IMPORTING
group = l_group
include = l_include
namespace = l_namespace
str_area = l_str_area
EXCEPTIONS
function_not_exist = 1
OTHERS = 2.
IF sy-subrc = 0.
IF NOT l_include IS INITIAL.
*- Obtengo el código fuente del user-exit's.
CLEAR: v_include, lt_incl, lt_incl[].
v_include = l_include.
CALL FUNCTION 'MU_INCLUDE_GET'
EXPORTING
i_include = v_include
TABLES
e_t_include = lt_incl.
*&---------------------------------------------------------------------*
*& Form def_text_parameter
*&---------------------------------------------------------------------*
* Defino los textos de los parámetros de selección.
*----------------------------------------------------------------------*
FORM def_text_parameter .
tit1 = 'Parámetros:'.
tit2 = 'Tipo de ampliación:'.
tit3 = 'Tipo de ejecución:'.
text1 = 'Programa'.
text2 = 'Transacción'.
text3 = 'Includes'.
text4 = 'Funciones'.
text5 = 'Submit'.
text6 = 'Nivel'.
text7 = 'User-exit'.
text8 = 'Badi'.
text9 = 'BTE'.
text10 = 'Sustitución'.
text11 = 'Field-exit'.
text12 = c_handler.
text13 = 'Validación'.
text14 = 'Punto de ampliación'.
*&---------------------------------------------------------------------*
*& Form def_botones
*&---------------------------------------------------------------------*
* Defino los textos de las botoneras de la pantalla de selección.
*----------------------------------------------------------------------*
FORM def_botones .
*&---------------------------------------------------------------------*
*& Form set_header
*&---------------------------------------------------------------------*
* Creo el encabezado del ALV correspondiente.
*----------------------------------------------------------------------*
FORM set_header USING p_cant
p_inc
p_text.
DATA:
l_tit(65) TYPE c.
PERFORM texto_tope.
WRITE:
* Título.
/(70) sy-uline,
/1(1) sy-vline,
3 l_tit,
70(1) sy-vline,
/(70) sy-uline.
FORMAT COLOR = 2.
IF p_tcode IS INITIAL.
CONCATENATE 'Ampliaciones encontradas en el programa' p_prog
INTO l_tit SEPARATED BY space.
ELSE.
CONCATENATE 'Ampliaciones encontradas en la transacción' p_tcode
INTO l_tit SEPARATED BY space.
ENDIF.
WRITE:
* Título.
/1(1) sy-vline,
3 l_tit,
70(1) sy-vline.
IF p_tcode IS INITIAL.
* Obtengo la descripción del programa.
SELECT SINGLE *
FROM trdirt
WHERE name EQ p_prog
AND sprsl EQ sy-langu.
ELSE.
* Obtengo la descripción de la transacción.
SELECT SINGLE *
FROM tstct
WHERE sprsl EQ sy-langu
AND tcode EQ p_tcode.
ENDIF.
WRITE:
/1(1) sy-vline,
3 l_tit,
70(1) sy-vline,
/(70) sy-uline.
IF p_inc IS NOT INITIAL.
WRITE:
/1(1) sy-vline,
3 l_tit,
70(1) sy-vline.
WRITE:
/1(1) sy-vline,
3 l_tit,
70(1) sy-vline.
ENDIF.
WRITE:
/1(1) sy-vline,
3 l_tit,
70(1) sy-vline,
* Cierro el cuadro.
/(70) sy-uline.
SKIP.
*&---------------------------------------------------------------------*
*& Form visualizar_imp_enh
*&---------------------------------------------------------------------*
* Visualizo las implementaciones del cliente de los enhancement
* de cualquier tipo.
*----------------------------------------------------------------------*
FORM visualizar_imp_enh .
DATA:
l_repid LIKE sy-repid.
l_repid = sy-repid.
PERFORM get_imp_enh.
PERFORM construir_catalogo_cimp.
PERFORM definir_layout USING 'TI_CIMP'
CHANGING wa_layout.
*&---------------------------------------------------------------------*
*& Form construir_catalogo_cimp
*&---------------------------------------------------------------------*
* Construir catalogo de campos para ALV
*----------------------------------------------------------------------*
FORM construir_catalogo_cimp .
DATA:
l_repid LIKE sy-repid.
REFRESH: ti_cat.
l_repid = sy-repid.
'ENHNAME' 'X' 'X' 'X' 'X' ' ' ' ' ' ' ' ' ' ' ' ',
'OBJ_TYPE' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'OBJ_NAME' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'ELEMUSAGE' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'ENHINCLUDE' ' ' ' ' ' ' 'X' ' ' ' ' ' ' ' ' ' ' ' '.
*&---------------------------------------------------------------------*
*& Form get_imp_enh
*&---------------------------------------------------------------------*
* Obtengo las implementaciones creadas.
*----------------------------------------------------------------------*
FORM get_imp_enh .
*&---------------------------------------------------------------------*
*& Form visualizar_enh_cf
*&---------------------------------------------------------------------*
* Visualizo el código fuente del enhancement.
*----------------------------------------------------------------------*
FORM visualizar_enh_cf USING p_enhinclude TYPE any.
DATA:
l_changed LIKE s38e-buf_varied,
l_subrc LIKE sy-subrc,
lt_source TYPE TABLE OF string.