foroSAPcom
REPORT z_ampliaciones_block_alv LINE-SIZE 255NO STANDARD PAGE HEADING
TYPE-POOLSiconrsfsrsdsslis Tipos de datos para listas geneacutericas
TABLESd010inc Tabla de utilizacioacuten para Includes ABAPdd03l Campos de tablamodact Modificaciones de la CMODmodsap Ampliaciones SAPsxs_inter Exit Paacutegdefinicioacuten Interfacessscrfields Campos en las imaacutegenes de seleccioacutentddir Exits de campo activos para elementos de datostddirs Exits de campos en determinados dynprostftit Texto breve de un moacutedulo de funcionestrdirt Textos ttulo pprogramas en TRDIRtstc Coacutedigos de transaccioacuten SAPtstct Textos de coacutedigos de transaccioacuten
---------------------------------------------------------------------- CONSTANTS----------------------------------------------------------------------CONSTANTSc_sust(22) TYPE c VALUE SUBSTITUTIONc_user_exit(22) TYPE c VALUE USEREXITc_badi(22) TYPE c VALUE BADIc_handler(30) TYPE c VALUE CL_EXITHANDLER=gtGET_INSTANCEc_method(22) TYPE c VALUE CALL METHODc_type_ref(22) TYPE c VALUE TYPE REF TOc_perform(22) TYPE c VALUE PERFORMc_form(22) TYPE c VALUE FORMc_endform(22) TYPE c VALUE ENDFORMc_bte(22) TYPE c VALUE OPEN_FI_PERFORMc_bte1(22) TYPE c VALUE OUTBOUND_CALLc_enhance(22) TYPE c VALUE CALL CUSTOMER-FUNCTIONc_funcao_1(13) TYPE c VALUE CALLFUNCTIONc_funcao_2(13) TYPE c VALUE CALL FUNCTIONc_enh(11) TYPE c VALUE ENHANCEMENTc_enh1(17) TYPE c VALUE ENHANCEMENT-POINTc_enh2(19) TYPE c VALUE ENHANCEMENT-SECTIONc_endenh(14) TYPE c VALUE ENDENHANCEMENTc_endenh1(23) TYPE c VALUE END-ENHANCEMENT-SECTIONc_include(07) TYPE c VALUE INCLUDEc_submit(06) TYPE c VALUE SUBMITc_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
CONSTANTSc_ue(4) TYPE c VALUE EXITc_b(4) TYPE c VALUE BADIc_bt(4) TYPE c VALUE BTEc_st(4) TYPE c VALUE SUSTc_fdex(4) TYPE c VALUE FDEXc_enht(4) TYPE c VALUE ENHc_operation(4) TYPE c VALUE SHOWc_type(4) TYPE c VALUE PROG Textosc_text_01 TYPE slis_fieldcat_alv-reptext_ddic VALUE Programac_text_02 TYPE slis_fieldcat_alv-reptext_ddic VALUE Nivelc_text_03 TYPE slis_fieldcat_alv-reptext_ddic VALUE Lineac_text_04 TYPE slis_fieldcat_alv-reptext_ddic VALUE Coacutedigo fuentec_text_05 TYPE slis_fieldcat_alv-reptext_ddic VALUE Tipoc_text_06 TYPE string VALUE Breakpointc_text_07 TYPE slis_fieldcat_alv-reptext_ddic VALUE STOPc_text_08 TYPE string VALUE Marcar todoc_text_09 TYPE string VALUE Desmarcar todoc_text_e01 TYPE slis_fieldcat_alv-reptext_ddic VALUEDebe ingresar programa o transaccioacutenc_text_e02 TYPE slis_fieldcat_alv-reptext_ddic VALUEDebe ingresar solo programa o transaccioacutenc_text_e03 TYPE slis_fieldcat_alv-reptext_ddic VALUEDebe seleccionar un tipo de mejora
CONSTANTSc_std_definition(3) TYPE c VALUE SAPc_std_implmnt(3) TYPE c VALUE KUN
---------------------------------------------------------------------- TABLAS INTERNAS----------------------------------------------------------------------TYPES BEGIN OF x_tadirobj_name TYPE sobj_namedevclass TYPE devclassEND OF x_tadir
TYPES BEGIN OF x_slogobj_name TYPE sobj_nameEND OF x_slog
DATA BEGIN OF ti_programa OCCURS 0 cf like rssource-linecf(500)END OF ti_programa
DATA BEGIN OF ti_includes OCCURS 0nome LIKE sy-repidnivel(2) TYPE nEND OF ti_includes
DATA BEGIN OF ti_user_exit OCCURS 0programa LIKE sy-repidtipo(4)
linea(10) TYPE n cf LIKE rssource-linecf(500)nivel(2) TYPE nbreak LIKE icon-idsel(1)END OF ti_user_exit
DATA BEGIN OF ti_badi OCCURS 0programa LIKE sy-repidtipo(4)linea(10) TYPE n cf LIKE rssource-linecf(500)nivel(2) TYPE nbreak LIKE icon-idsel(1)END OF ti_badi
DATA BEGIN OF ti_bte OCCURS 0programa LIKE sy-repidtipo(4)linea(10) TYPE n cf LIKE rssource-linecf(500)nivel(2) TYPE nbreak LIKE icon-idsel(1)END OF ti_bte
DATA BEGIN OF ti_enh OCCURS 0programa LIKE sy-repidtipo(4)linea(10) TYPE n cf LIKE rssource-linecf(500)nivel(2) TYPE nbreak LIKE icon-idsel(1)END OF ti_enh
DATA BEGIN OF ti_enhobj OCCURS 0enhname LIKE enhobj-enhnameversion LIKE enhobj-versionobj_type LIKE enhobj-obj_typeobj_name LIKE enhobj-obj_namesel(1)END OF ti_enhobj
DATA BEGIN OF ti_fdex OCCURS 0tipo(4) cf LIKE rssource-linecf(500)sel(1)END OF ti_fdex
DATAti_tadir TYPE STANDARD TABLE OF x_tadir WITH HEADER LINE
ti_jtab TYPE STANDARD TABLE OF x_slog WITH HEADER LINE
DATA BEGIN OF ti_final OCCURS 0name LIKE modsap-namemember LIKE modsap-memberinclude LIKE rs38l-include (15) Include namestext LIKE tftit-stextprograma LIKE rs38l-includesel(1)END OF ti_final
DATA BEGIN OF ti_sust OCCURS 0substid LIKE gb922-substidsubseqnr LIKE gb922-subseqnrconseqnr LIKE gb922-conseqnrsubstab LIKE gb922-substabsubsfield LIKE gb922-subsfieldsubsval LIKE gb922-subsvalexitsubst LIKE gb922-exitsubstsel(1)END OF ti_sust
DATA BEGIN OF ti_val OCCURS 0valid LIKE gb931-validvalseqnr LIKE gb931-valseqnrcondid LIKE gb931-condidcheckid LIKE gb931-checkidsel(1)END OF ti_val
DATA BEGIN OF ti_bdcdata OCCURS 0INCLUDE STRUCTURE bdcdataDATA END OF ti_bdcdata
DATA ti_gb31t TYPE TABLE OF gb31t WITH HEADER LINE
DATA BEGIN OF ti_cimp OCCURS 0enhname LIKE enhobj-enhnameobj_type LIKE enhobj-obj_typeobj_name LIKE enhobj-obj_nameelemusage LIKE enhobj-elemusageenhinclude(40) like ENHINCINX-ENHINCLUDEEND OF ti_cimp
---------------------------------------------------------------------- VARIABLE GLOBALES----------------------------------------------------------------------DATAfunctxt TYPE smp_dyntxtw_tini LIKE sy-timlovg_caracter TYPE cvg_palavra(50) TYPE cvg_inicial LIKE sy-indexvg_conta_aspa TYPE nvg_pname LIKE tfdir-pnamevg_texto(50) TYPE cvg_contador LIKE sy-tfillvg_nivel(2) TYPE n
vg_ini_contagem TYPE c INDICA QUE DEBE SER INICIADO EL CONTADORvg_conta_espaco TYPE n TOTAL DE ESPACIOS ( MAacuteXIMO 2 )
---------------------------------------------------------------------- DEFINICION DE Estructuras y tablas para ALV (FM)----------------------------------------------------------------------DATAwa_cat TYPE slis_fieldcat_alv WA cataacutelogoti_cat TYPE slis_t_fieldcat_alv TI cataacutelogowa_layout TYPE slis_layout_alv WA opciones listati_header TYPE slis_t_listheader TI cabecera listawa_header TYPE slis_listheader WA cabecera listawa_events TYPE slis_alv_event WA eventos listati_events TYPE slis_t_event TI eventos listawa_sort TYPE slis_sortinfo_alv WA sortti_sort TYPE slis_t_sortinfo_alv TI sortwa_print TYPE slis_print_alv WA print
---------------------------------------------------------------------- PARAMETROS----------------------------------------------------------------------
- DATOS OBLIGATORIOSSELECTION-SCREEN BEGIN OF BLOCK bl01 WITH FRAME TITLE tit1
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text2POSITION 20PARAMETERS p_tcode LIKE tstc-tcode TransaccioacutenSELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text1POSITION 20PARAMETERS p_prog LIKE sy-repid ProgramaSELECTION-SCREEN END OF LINE
SELECTION-SCREEN END OF BLOCK bl01
SELECTION-SCREEN BEGIN OF BLOCK bl02 WITH FRAME TITLE tit2 SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text7POSITION 20PARAMETERS p_ue AS CHECKBOX User-exit
Boton de Exits en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(45) btn USER-COMMAND extVISIBLE LENGTH 12
Boton de Proyectos de Exits en la DYNPROSELECTION-SCREEN PUSHBUTTON 38(45) ext1 USER-COMMAND ext1VISIBLE LENGTH 12
Boton de User-Exits en la DYNPROSELECTION-SCREEN PUSHBUTTON 51(45) ext2 USER-COMMAND ext2VISIBLE LENGTH 12
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text8POSITION 20PARAMETERS p_badi AS CHECKBOX Badis Boton de Interface en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) badi USER-COMMAND badiVISIBLE LENGTH 25SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINEPOSITION 25PARAMETERS p_handl AS CHECKBOX DEFAULT XCL_EXITHANDLER=gtGET_INSTANCESELECTION-SCREEN COMMENT 30(40) text12SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text9POSITION 20PARAMETERS p_bte AS CHECKBOX Bte Boton de Tx FIBF en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) bte1 USER-COMMAND bte1VISIBLE LENGTH 1 Boton de Tx Evento en la DYNPROSELECTION-SCREEN PUSHBUTTON 29(60) bte2 USER-COMMAND bte2VISIBLE LENGTH 10 Boton de Tx Proceso en la DYNPROSELECTION-SCREEN PUSHBUTTON 40(60) bte3 USER-COMMAND bte3VISIBLE LENGTH 10
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(19) text14POSITION 20PARAMETERS p_enh AS CHECKBOX Punto de ampliacioacuten
Boton de Tx SENH en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) senh USER-COMMAND senhVISIBLE LENGTH 1
Boton de Customer Implementation en la DYNPROSELECTION-SCREEN PUSHBUTTON 29(60) cimp USER-COMMAND cimpVISIBLE LENGTH 24
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text10POSITION 20PARAMETERS p_sust AS CHECKBOX Sustitucioacuten
Boton de Sustitucioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(45) btn1 USER-COMMAND obbVISIBLE LENGTH 12
Boton de programa sustitucioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 38(45) sust USER-COMMAND sustVISIBLE LENGTH 15
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text13POSITION 20PARAMETERS p_val AS CHECKBOX Validacioacuten
Boton de Validacioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(45) ob28 USER-COMMAND ob28VISIBLE LENGTH 12
Boton de programa sustitucioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 38(45) val USER-COMMAND valVISIBLE LENGTH 15
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text11POSITION 20PARAMETERS p_fdex AS CHECKBOX Field-exit
Boton de Field-exit en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) btn2 USER-COMMAND fdexVISIBLE LENGTH 28
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN END OF BLOCK bl02
- DATOS OPCIONALESSELECTION-SCREEN BEGIN OF BLOCK bl03 WITH FRAME TITLE tit3
SELECTION-SCREEN BEGIN OF LINE Boton de ALL en la DYNPROSELECTION-SCREEN PUSHBUTTON 18(60) all USER-COMMAND allVISIBLE LENGTH 1 Boton de DAL en la DYNPROSELECTION-SCREEN PUSHBUTTON 21(60) dal USER-COMMAND dalVISIBLE LENGTH 1SELECTION-SCREEN END OF LINE
SELECTION-SCREEN ULINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text3POSITION 20PARAMETERS p_incl AS CHECKBOX DEFAULT X IncludesSELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text4POSITION 20PARAMETERS p_func AS CHECKBOX DEFAULT X Funciones
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text5POSITION 20PARAMETERS p_submit AS CHECKBOX DEFAULT X SubmitSELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text6POSITION 20PARAMETERS p_nivel(2) TYPE n DEFAULT 04 NivelSELECTION-SCREEN END OF LINE
SELECTION-SCREEN END OF BLOCK bl03
Botoacuten de Marcar todo en el STATUS GUISELECTION-SCREEN FUNCTION KEY 1 Botoacuten de Desmarcar todo en el STATUS GUISELECTION-SCREEN FUNCTION KEY 2 Botoacuten de Breakpoint en el STATUS GUISELECTION-SCREEN FUNCTION KEY 3
----------------------------------------------------------------------- DEFINICIOacuteN DE MACROS-----------------------------------------------------------------------DEFINE icon_create Creo para el botoacuten indicado el icono y los textos correspondientes
call function ICON_CREATEexportingname = amp2text = amp3info = amp4importingresult = amp1exceptionsothers = 0
END-OF-DEFINITION icon_create
----------------------------------------------------------------------- INICIALIZACIOacuteN DE VARIABLES-----------------------------------------------------------------------INITIALIZATION
PERFORM def_text_parameter
PERFORM def_botones
CLEAR ti_gb31tREFRESH ti_gb31t
Obtengo ValidacioacutenSustitucioacutenEventosTextoSELECT INTO TABLE ti_gb31tFROM gb31tWHERE spras EQ sy-langu
----------------------------------------------------------------------- AT SELECTION-SCREEN-----------------------------------------------------------------------
AT SELECTION-SCREEN
CASE sscrfields-ucommWHEN FC01MOVE X TO p_ue p_badi p_bte p_sust p_val p_fdex p_enhWHEN FC02CLEAR p_ue p_badi p_bte p_sust p_val p_fdex p_enhWHEN FC03PERFORM breakpointWHEN EXTPERFORM visualizar_ampliacionWHEN EXT1PERFORM visualizar_proyectoWHEN EXT2PERFORM visualizar_fm_exitWHEN BADIPERFORM visualizar_interfaceWHEN OBBCALL TRANSACTION OBBHWHEN OB28CALL TRANSACTION OB28WHEN SUST OR VALPERFORM visualizar_programaWHEN FDEXSUBMIT rsmodprf AND RETURNWHEN BTE1CALL TRANSACTION FIBFWHEN BTE2PERFORM cargar_bte USING EWHEN BTE3PERFORM cargar_bte USING PWHEN SENHSUBMIT sapmsenh VIA SELECTION-SCREENAND RETURNWHEN CIMPPERFORM visualizar_imp_enhWHEN ALLMOVE X TO p_incl p_func p_submitWHEN DALCLEAR p_incl p_func p_submitWHEN OTHERS Do Nothing ENDCASE
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_prog
PERFORM repid_f4
---------------------------------------------------------------------- INICIO----------------------------------------------------------------------START-OF-SELECTION
GET TIME FIELD w_tini
- CONSISTENCIAS DE LOS PARAMETROSPERFORM consisti_parametros
- INICIALIZA TABLAPERFORM inicializa_tabela
- VERIFICA SI EN EL PROGRAMA EXISTE ALGUN INCLUDE FUNCION O SUBMITPERFORM verifica_include_funcao_submit
- ANALISA LOS INCLUDES Y BUSCA POR USER-EXIT BADIS Y BTEPERFORM busca_user_exit_badi_bte
- ANALISA LOS INCLUDES Y BUSCA LOS FIELD-EXITSPERFORM buscar_field_exit
- OBTENGO LOS EXITs DE LA TRANSACCIOacuteNPERFORM buscar_user_exit
- OBTENGO LAS PUNTOS DE AMPLIACIOacuteNPERFORM buscar_enh
- OBTENGO LAS SUSTITUCIONESPERFORM buscar_sustituciones
- OBTENGO LAS VALIDACIONESPERFORM buscar_validaciones
- CARGO LOS BREAKPOINTSPERFORM cargar_break
- VISUALIZA LAS AMPLIACIONES ENCONTRADASPERFORM exibe_user_exit
---------------------------------------------------------------------- FIN----------------------------------------------------------------------END-OF-SELECTION
amp---------------------------------------------------------------------amp Form BUSCA_USER_EXIT_BADI_BTEamp--------------------------------------------------------------------- Busca EXITs BADIs y BTE en el coacutedigo fuente----------------------------------------------------------------------FORM busca_user_exit_badi_bte
- VERIFICA SI EN LOS INCLUDES SELECIONADOS EXISTEN EXITSLOOP AT ti_includes
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
- BORRA LA TABLA INTERNAREFRESH ti_programa
- REALIZA LECTURA DE INCLUDE ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa
LOOP AT ti_programa
IF p_ue EQ XPERFORM buscar_exitPERFORM busca_enhancementsENDIF
IF p_badi EQ XPERFORM buscar_badiENDIF
IF p_bte EQ XPERFORM buscar_bteENDIF
IF p_enh EQ XPERFORM buscar_punto_ampliacionENDIF
ENDLOOPENDLOOP
ENDFORM BUSCA_USER_EXIT_BADI_BTE
amp---------------------------------------------------------------------amp Form BUSCA_ENHANCEMENTSamp--------------------------------------------------------------------- Busca las llamadas a los USER-EXIT----------------------------------------------------------------------FORM busca_enhancements
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE EN ALGUN ENHANCEMENTSEARCH ti_programa-cf FOR c_enhance- SE ENCONTRO EL ENHANCEMENT Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentarioCLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM BUSCA_ENHANCEMENTS
amp---------------------------------------------------------------------amp Form EXIBE_USER_EXITamp--------------------------------------------------------------------- Muestra los datos----------------------------------------------------------------------FORM exibe_user_exit
PERFORM armar_alv
PERFORM mostrar_listado
ENDFORM EXIBE_USER_EXIT
amp---------------------------------------------------------------------amp Form PROCURA_INCLUDEamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_include
CLEAR vg_palavra
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_include- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN STRUCTURESEARCH ti_programa-cf FOR c_struct
IF sy-subrc IS INITIALEXITENDIF
- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_includeCLEAR vg_palavraENDIFENDIFENDDO- GRABA NOMBRE DEL INCLUDE PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF
ENDIF
ENDFORM PROCURA_INCLUDE
amp---------------------------------------------------------------------amp Form PROCURA_FUNCAOamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_funcao
CLEAR vg_conta_aspavg_palavra
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA FUNCIONSEARCH ti_programa-cf FOR c_funcao_2- SE ENCONTRO UNA FUNCION Y LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DE LA INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_aspaADD 1 TO vg_conta_aspaIF vg_conta_aspa EQ 2EXITENDIFENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_funcao_1CLEAR vg_palavraENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITCLEAR vg_pnameSELECT SINGLE pnameINTO vg_pnameFROM tfdirWHERE funcname EQ vg_palavraIF sy-subrc EQ 0
READ TABLE ti_includes WITH KEY nome = vg_pnameIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_pname TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF
ENDIF
ENDIF
ENDFORM PROCURA_FUNCAO
amp---------------------------------------------------------------------amp Form VERIFICA_INCLUDE_FUNCAO_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM verifica_include_funcao_submit
CHECK p_ue IS NOT INITIAL OR p_badi IS NOT INITIALOR p_bte IS NOT INITIAL OR p_enh IS NOT INITIAL
LOOP AT ti_includes
ADD 1 TO vg_contadorDESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfillMOVE ti_includes-nivel TO vg_nivelADD 1 TO vg_nivel
- BORRA TABLA INTERNAREFRESH ti_programa
- REALIZA LECTURA DE INCLUDEFUNCION ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa
LOOP AT ti_programa
- PROCURA POR INCLUDESIF p_incl EQ c_xPERFORM procura_includeENDIF- PROCURA POR FUNCIONIF p_func EQ c_xPERFORM procura_funcaoENDIF- PROCURA POR SUBMITIF p_submit EQ c_xPERFORM procura_submitENDIF
ENDLOOP
ENDLOOP
ENDFORM VERIFICA_INCLUDE_FUNCAO_SUBMIT
amp---------------------------------------------------------------------amp Form EVITAR_TIME_OUTamp--------------------------------------------------------------------- Evito el TIME OUT visualizando un mensaje----------------------------------------------------------------------FORM evitar_time_out USING p_tfill LIKE sy-tfill
DATAvl_total(10) TYPE n
vl_atual(10) TYPE nl_tout LIKE sy-timlol_time(10) TYPE c
GET TIME FIELD l_tout
l_tout = l_tout - w_tini
MOVEp_tfill TO vl_totalvg_contador TO vl_atual
SHIFT vl_total LEFT DELETING LEADING 0SHIFT vl_atual LEFT DELETING LEADING 0WRITE l_tout TO l_time
CONCATENATE Tpo l_time Total vl_total Actual vl_atualINTO vg_textoSEPARATED BY space
CALL FUNCTION SAPGUI_PROGRESS_INDICATOREXPORTINGtext = vg_texto
ENDFORM EVITAR_TIME_OUT
amp---------------------------------------------------------------------amp Form PROCURA_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_submit
CLEAR vg_conta_espaco vg_palavra vg_ini_contagem
- VERIFICA SI LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_submit- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF vg_ini_contagem EQ c_x AND vg_caracter IS INITIALADD 1 TO vg_conta_espacoENDIF
IF NOT vg_caracter IS INITIALMOVE c_x TO vg_ini_contagemIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRAIF vg_conta_espaco LT 2CONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACION
TRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_submitCLEAR vg_palavraENDIFELSEEXITENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIFENDIF
ENDFORM PROCURA_SUBMIT
amp---------------------------------------------------------------------amp Form CONSISTI_PARAMETROSamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM consisti_parametros
IF p_nivel IS INITIALMOVE 1 TO p_nivelENDIF
IF p_prog IS INITIAL AND p_tcode IS INITIAL- EL NOMBRE DEL PROGRAMA Y EL NOMBRE DE LA TRANSACCION NO PUEDEN SER- NULOS UNO DE ELLOS DEBE SER INFORMADOMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e01STOPENDIF
IF NOT p_prog IS INITIAL AND NOT p_tcode IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME NOMBRE DE PROGRAMA O TRANSACCIONMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e02STOPENDIF
IF p_ue IS INITIAL AND p_badi IS INITIAL AND p_bte IS INITIALAND p_sust IS INITIAL AND p_val IS INITIAL AND p_fdex IS INITIALAND p_enh IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME UN TIPO DE MEJORAMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e03STOPENDIF
ENDFORM CONSISTI_PARAMETROS
amp---------------------------------------------------------------------
amp Form INICIALIZA_TABELAamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM inicializa_tabela
DATAe_tstc TYPE tstcl_tcode TYPE sy-tcode
REFRESH ti_includes
IF NOT p_prog IS INITIAL
MOVE p_prog TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includes
- BUSCO EL PROGRAMAREAD REPORT ti_includes-nome INTO ti_programa
IF sy-subrc EQ 0REFRESH ti_programaELSE- EL PROGRAMA NO EXISTEMESSAGE s893(pz) WITH El programa p_prog no existeSTOPENDIF
ELSEIF NOT p_tcode IS INITIAL
SELECT SINGLE FROM tstcWHERE tcode EQ p_tcode
IF sy-subrc EQ 0
IF tstc-pgmna IS NOT INITIALMOVE tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includesELSE Se trata de una transaccioacuten de paraacutemetros Obtengo la transaccioacuten asociadaCALL FUNCTION RS_TRANSACTION_SINGLE_GETEXPORTINGparameter_tcode = p_tcodeIMPORTINGtcode = l_tcode
SELECT SINGLE INTO e_tstcFROM tstcWHERE tcode EQ l_tcode
IF sy-subrc EQ 0MOVE e_tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivel
APPEND ti_includesELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeENDIFENDIFELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeSTOPENDIFENDIF
ENDFORM INICIALIZA_TABELA
amp---------------------------------------------------------------------amp Form armar_alvamp--------------------------------------------------------------------- Armo el ALV----------------------------------------------------------------------FORM armar_alv
DATAl_repid TYPE sy-repid
MOVE sy-repid TO l_repid
CALL FUNCTION REUSE_ALV_BLOCK_LIST_INITEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMAND
IF p_ue IS NOT INITIALPERFORM construir_catalogo_exitPERFORM definir_layout USING TI_USER_EXITCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGEPERFORM sort TABLES ti_sortUSING TI_USER_EXIT
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_USER_EXITit_events = ti_eventsit_sort = ti_sorti_text = User-exitTABLESt_outtab = ti_user_exitEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
PERFORM construir_catalogo_uexitPERFORM definir_layout USING TI_FINAL
CHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_UEXITPERFORM sort TABLES ti_sortUSING TI_FINAL
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FINALit_events = ti_eventsit_sort = ti_sorti_text = User-exit TxCMODTABLESt_outtab = ti_finalEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_badi IS NOT INITIALPERFORM construir_catalogo_badiPERFORM definir_layout USING TI_BADICHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BADIPERFORM sort TABLES ti_sortUSING TI_BADI
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_BADIit_events = ti_eventsit_sort = ti_sorti_text = BadisTABLESt_outtab = ti_badiEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_bte IS NOT INITIALPERFORM construir_catalogo_btePERFORM definir_layout USING TI_BTECHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BTEPERFORM sort TABLES ti_sortUSING TI_BTE
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layout
it_fieldcat = ti_cati_tabname = TI_BTEit_events = ti_eventsit_sort = ti_sorti_text = BTETABLESt_outtab = ti_bteEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_enh IS NOT INITIALPERFORM construir_catalogo_enhPERFORM definir_layout USING TI_ENHCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHPERFORM sort TABLES ti_sortUSING TI_ENH
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHit_events = ti_eventsit_sort = ti_sorti_text = ENHTABLESt_outtab = ti_enhEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
PERFORM construir_catalogo_enhobjPERFORM definir_layout USING TI_ENHOBJCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHOBJPERFORM sort TABLES ti_sortUSING TI_ENHOBJ
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHOBJit_events = ti_eventsit_sort = ti_sorti_text = ENHOBJTABLESt_outtab = ti_enhobjEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX
PERFORM sort TABLES ti_sortUSING TI_FDEX
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
ENDFORM armar_alv
amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03
CF X c_text_04
ENDFORM construir_catalogo_EXIT
amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic
STATICS l_col_pos LIKE sy-cucol
Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname
CHECK sy-subrc EQ 0
IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF
IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF
wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon
MODIFY pt_cat FROM wa_cat INDEX sy-tabix
ENDFORM asignar_campo_a_catalogo
amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv
CLEAR p_layout
IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X
ENDFORM definir_layout
amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n
REFRESH ti_eventsCLEAR wa_events
ALV Simple Block appendl_type = 2
Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events
Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF
ENDFORM construir_eventos
amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit
ENDFORM top_of_page
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD
ENDFORM TOP_OF_PAGE_UEXIT
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs
ENDFORM TOP_OF_PAGE_FDEX
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs
ENDFORM TOP_OF_PAGE_BADI
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant
CONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs
ENDFORM TOP_OF_PAGE_BTE
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENH
amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any
CLEAR pt_sort wa_sortREFRESH pt_sort
CASE p_tabnameWHEN TI_SUST
wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_VAL
wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_ENHOBJ
wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN OTHERS
IF p_tabname NE TI_FINAL
wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
IF p_tabname NE TI_FDEX
wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
ENDIF
ELSE
wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE
ENDFORM sort
amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado
wa_print-reserve_lines = 2
CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY
EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM mostrar_listado
amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield
DATA l_break TYPE c
Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE
Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL
CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf
ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF 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-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF
WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF
WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF
WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea
ti_bte-breakMOVE X TO l_breakENDIF
WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF
WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF
WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF
WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF
WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf
CALL FUNCTION RS_NAVIGATION_MONITORENDIF
WHEN TI_CIMP Customer implementation
CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X
ENDFORM user_command
amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM visualizar_linea
amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0
CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM buscar_exit
amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi
DATAl_subrc LIKE sy-subrc
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF
IF l_subrc EQ 0CLEAR ti_badi
- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF
ENDFORM buscar_badi
amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform
CHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
ENDFORM buscar_bte
amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4
CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS
cancel = 1wrong_type = 2OTHERS = 3
ENDFORM repid_f4
amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf
DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
SEARCH p_cf FOR c_type_ref
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
SPLIT p_cf+sy-fdpos(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
READ TABLE lt_cf INDEX 4
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
CHECK sy-subrc IS INITIAL
Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten
textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer
CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4
IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF
WHEN OTHERS Do Nothing ENDCASE
ENDFORM visualizar_badi
amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf
DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
CLEAR d010inc modsap modact
Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid
IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF
SEARCH p_cf FOR c_enhance
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
MOVE p_cf+sy-fdpos(l_cf) TO l_linea
SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3
TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS
Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _
Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit
CHECK sy-subrc IS INITIAL
Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM
modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3
ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname
CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ENDIF
ENDFORM visualizar_exit
amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit
DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo
DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe
DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE
CHECK p_fdex IS NOT INITIAL
CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe
MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex
IF p_prog IS NOT INITIAL
MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF
Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog
LOOP AT lt_d020s
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
REFRESH lt_d021s
Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4
Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X
SEARCH lt_d021s-fnam FOR -
IF sy-subrc IS INITIAL
MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum
Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname
APPEND lt_campo
ENDIF
ENDLOOPENDLOOP
CHECK lt_campo[] IS NOT INITIAL
SORT lt_campo BY repid dnum tabname fieldname
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
c_igual(3) TYPE c VALUE = c_x TYPE c VALUE X
CONSTANTSc_ue(4) TYPE c VALUE EXITc_b(4) TYPE c VALUE BADIc_bt(4) TYPE c VALUE BTEc_st(4) TYPE c VALUE SUSTc_fdex(4) TYPE c VALUE FDEXc_enht(4) TYPE c VALUE ENHc_operation(4) TYPE c VALUE SHOWc_type(4) TYPE c VALUE PROG Textosc_text_01 TYPE slis_fieldcat_alv-reptext_ddic VALUE Programac_text_02 TYPE slis_fieldcat_alv-reptext_ddic VALUE Nivelc_text_03 TYPE slis_fieldcat_alv-reptext_ddic VALUE Lineac_text_04 TYPE slis_fieldcat_alv-reptext_ddic VALUE Coacutedigo fuentec_text_05 TYPE slis_fieldcat_alv-reptext_ddic VALUE Tipoc_text_06 TYPE string VALUE Breakpointc_text_07 TYPE slis_fieldcat_alv-reptext_ddic VALUE STOPc_text_08 TYPE string VALUE Marcar todoc_text_09 TYPE string VALUE Desmarcar todoc_text_e01 TYPE slis_fieldcat_alv-reptext_ddic VALUEDebe ingresar programa o transaccioacutenc_text_e02 TYPE slis_fieldcat_alv-reptext_ddic VALUEDebe ingresar solo programa o transaccioacutenc_text_e03 TYPE slis_fieldcat_alv-reptext_ddic VALUEDebe seleccionar un tipo de mejora
CONSTANTSc_std_definition(3) TYPE c VALUE SAPc_std_implmnt(3) TYPE c VALUE KUN
---------------------------------------------------------------------- TABLAS INTERNAS----------------------------------------------------------------------TYPES BEGIN OF x_tadirobj_name TYPE sobj_namedevclass TYPE devclassEND OF x_tadir
TYPES BEGIN OF x_slogobj_name TYPE sobj_nameEND OF x_slog
DATA BEGIN OF ti_programa OCCURS 0 cf like rssource-linecf(500)END OF ti_programa
DATA BEGIN OF ti_includes OCCURS 0nome LIKE sy-repidnivel(2) TYPE nEND OF ti_includes
DATA BEGIN OF ti_user_exit OCCURS 0programa LIKE sy-repidtipo(4)
linea(10) TYPE n cf LIKE rssource-linecf(500)nivel(2) TYPE nbreak LIKE icon-idsel(1)END OF ti_user_exit
DATA BEGIN OF ti_badi OCCURS 0programa LIKE sy-repidtipo(4)linea(10) TYPE n cf LIKE rssource-linecf(500)nivel(2) TYPE nbreak LIKE icon-idsel(1)END OF ti_badi
DATA BEGIN OF ti_bte OCCURS 0programa LIKE sy-repidtipo(4)linea(10) TYPE n cf LIKE rssource-linecf(500)nivel(2) TYPE nbreak LIKE icon-idsel(1)END OF ti_bte
DATA BEGIN OF ti_enh OCCURS 0programa LIKE sy-repidtipo(4)linea(10) TYPE n cf LIKE rssource-linecf(500)nivel(2) TYPE nbreak LIKE icon-idsel(1)END OF ti_enh
DATA BEGIN OF ti_enhobj OCCURS 0enhname LIKE enhobj-enhnameversion LIKE enhobj-versionobj_type LIKE enhobj-obj_typeobj_name LIKE enhobj-obj_namesel(1)END OF ti_enhobj
DATA BEGIN OF ti_fdex OCCURS 0tipo(4) cf LIKE rssource-linecf(500)sel(1)END OF ti_fdex
DATAti_tadir TYPE STANDARD TABLE OF x_tadir WITH HEADER LINE
ti_jtab TYPE STANDARD TABLE OF x_slog WITH HEADER LINE
DATA BEGIN OF ti_final OCCURS 0name LIKE modsap-namemember LIKE modsap-memberinclude LIKE rs38l-include (15) Include namestext LIKE tftit-stextprograma LIKE rs38l-includesel(1)END OF ti_final
DATA BEGIN OF ti_sust OCCURS 0substid LIKE gb922-substidsubseqnr LIKE gb922-subseqnrconseqnr LIKE gb922-conseqnrsubstab LIKE gb922-substabsubsfield LIKE gb922-subsfieldsubsval LIKE gb922-subsvalexitsubst LIKE gb922-exitsubstsel(1)END OF ti_sust
DATA BEGIN OF ti_val OCCURS 0valid LIKE gb931-validvalseqnr LIKE gb931-valseqnrcondid LIKE gb931-condidcheckid LIKE gb931-checkidsel(1)END OF ti_val
DATA BEGIN OF ti_bdcdata OCCURS 0INCLUDE STRUCTURE bdcdataDATA END OF ti_bdcdata
DATA ti_gb31t TYPE TABLE OF gb31t WITH HEADER LINE
DATA BEGIN OF ti_cimp OCCURS 0enhname LIKE enhobj-enhnameobj_type LIKE enhobj-obj_typeobj_name LIKE enhobj-obj_nameelemusage LIKE enhobj-elemusageenhinclude(40) like ENHINCINX-ENHINCLUDEEND OF ti_cimp
---------------------------------------------------------------------- VARIABLE GLOBALES----------------------------------------------------------------------DATAfunctxt TYPE smp_dyntxtw_tini LIKE sy-timlovg_caracter TYPE cvg_palavra(50) TYPE cvg_inicial LIKE sy-indexvg_conta_aspa TYPE nvg_pname LIKE tfdir-pnamevg_texto(50) TYPE cvg_contador LIKE sy-tfillvg_nivel(2) TYPE n
vg_ini_contagem TYPE c INDICA QUE DEBE SER INICIADO EL CONTADORvg_conta_espaco TYPE n TOTAL DE ESPACIOS ( MAacuteXIMO 2 )
---------------------------------------------------------------------- DEFINICION DE Estructuras y tablas para ALV (FM)----------------------------------------------------------------------DATAwa_cat TYPE slis_fieldcat_alv WA cataacutelogoti_cat TYPE slis_t_fieldcat_alv TI cataacutelogowa_layout TYPE slis_layout_alv WA opciones listati_header TYPE slis_t_listheader TI cabecera listawa_header TYPE slis_listheader WA cabecera listawa_events TYPE slis_alv_event WA eventos listati_events TYPE slis_t_event TI eventos listawa_sort TYPE slis_sortinfo_alv WA sortti_sort TYPE slis_t_sortinfo_alv TI sortwa_print TYPE slis_print_alv WA print
---------------------------------------------------------------------- PARAMETROS----------------------------------------------------------------------
- DATOS OBLIGATORIOSSELECTION-SCREEN BEGIN OF BLOCK bl01 WITH FRAME TITLE tit1
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text2POSITION 20PARAMETERS p_tcode LIKE tstc-tcode TransaccioacutenSELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text1POSITION 20PARAMETERS p_prog LIKE sy-repid ProgramaSELECTION-SCREEN END OF LINE
SELECTION-SCREEN END OF BLOCK bl01
SELECTION-SCREEN BEGIN OF BLOCK bl02 WITH FRAME TITLE tit2 SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text7POSITION 20PARAMETERS p_ue AS CHECKBOX User-exit
Boton de Exits en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(45) btn USER-COMMAND extVISIBLE LENGTH 12
Boton de Proyectos de Exits en la DYNPROSELECTION-SCREEN PUSHBUTTON 38(45) ext1 USER-COMMAND ext1VISIBLE LENGTH 12
Boton de User-Exits en la DYNPROSELECTION-SCREEN PUSHBUTTON 51(45) ext2 USER-COMMAND ext2VISIBLE LENGTH 12
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text8POSITION 20PARAMETERS p_badi AS CHECKBOX Badis Boton de Interface en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) badi USER-COMMAND badiVISIBLE LENGTH 25SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINEPOSITION 25PARAMETERS p_handl AS CHECKBOX DEFAULT XCL_EXITHANDLER=gtGET_INSTANCESELECTION-SCREEN COMMENT 30(40) text12SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text9POSITION 20PARAMETERS p_bte AS CHECKBOX Bte Boton de Tx FIBF en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) bte1 USER-COMMAND bte1VISIBLE LENGTH 1 Boton de Tx Evento en la DYNPROSELECTION-SCREEN PUSHBUTTON 29(60) bte2 USER-COMMAND bte2VISIBLE LENGTH 10 Boton de Tx Proceso en la DYNPROSELECTION-SCREEN PUSHBUTTON 40(60) bte3 USER-COMMAND bte3VISIBLE LENGTH 10
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(19) text14POSITION 20PARAMETERS p_enh AS CHECKBOX Punto de ampliacioacuten
Boton de Tx SENH en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) senh USER-COMMAND senhVISIBLE LENGTH 1
Boton de Customer Implementation en la DYNPROSELECTION-SCREEN PUSHBUTTON 29(60) cimp USER-COMMAND cimpVISIBLE LENGTH 24
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text10POSITION 20PARAMETERS p_sust AS CHECKBOX Sustitucioacuten
Boton de Sustitucioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(45) btn1 USER-COMMAND obbVISIBLE LENGTH 12
Boton de programa sustitucioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 38(45) sust USER-COMMAND sustVISIBLE LENGTH 15
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text13POSITION 20PARAMETERS p_val AS CHECKBOX Validacioacuten
Boton de Validacioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(45) ob28 USER-COMMAND ob28VISIBLE LENGTH 12
Boton de programa sustitucioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 38(45) val USER-COMMAND valVISIBLE LENGTH 15
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text11POSITION 20PARAMETERS p_fdex AS CHECKBOX Field-exit
Boton de Field-exit en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) btn2 USER-COMMAND fdexVISIBLE LENGTH 28
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN END OF BLOCK bl02
- DATOS OPCIONALESSELECTION-SCREEN BEGIN OF BLOCK bl03 WITH FRAME TITLE tit3
SELECTION-SCREEN BEGIN OF LINE Boton de ALL en la DYNPROSELECTION-SCREEN PUSHBUTTON 18(60) all USER-COMMAND allVISIBLE LENGTH 1 Boton de DAL en la DYNPROSELECTION-SCREEN PUSHBUTTON 21(60) dal USER-COMMAND dalVISIBLE LENGTH 1SELECTION-SCREEN END OF LINE
SELECTION-SCREEN ULINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text3POSITION 20PARAMETERS p_incl AS CHECKBOX DEFAULT X IncludesSELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text4POSITION 20PARAMETERS p_func AS CHECKBOX DEFAULT X Funciones
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text5POSITION 20PARAMETERS p_submit AS CHECKBOX DEFAULT X SubmitSELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text6POSITION 20PARAMETERS p_nivel(2) TYPE n DEFAULT 04 NivelSELECTION-SCREEN END OF LINE
SELECTION-SCREEN END OF BLOCK bl03
Botoacuten de Marcar todo en el STATUS GUISELECTION-SCREEN FUNCTION KEY 1 Botoacuten de Desmarcar todo en el STATUS GUISELECTION-SCREEN FUNCTION KEY 2 Botoacuten de Breakpoint en el STATUS GUISELECTION-SCREEN FUNCTION KEY 3
----------------------------------------------------------------------- DEFINICIOacuteN DE MACROS-----------------------------------------------------------------------DEFINE icon_create Creo para el botoacuten indicado el icono y los textos correspondientes
call function ICON_CREATEexportingname = amp2text = amp3info = amp4importingresult = amp1exceptionsothers = 0
END-OF-DEFINITION icon_create
----------------------------------------------------------------------- INICIALIZACIOacuteN DE VARIABLES-----------------------------------------------------------------------INITIALIZATION
PERFORM def_text_parameter
PERFORM def_botones
CLEAR ti_gb31tREFRESH ti_gb31t
Obtengo ValidacioacutenSustitucioacutenEventosTextoSELECT INTO TABLE ti_gb31tFROM gb31tWHERE spras EQ sy-langu
----------------------------------------------------------------------- AT SELECTION-SCREEN-----------------------------------------------------------------------
AT SELECTION-SCREEN
CASE sscrfields-ucommWHEN FC01MOVE X TO p_ue p_badi p_bte p_sust p_val p_fdex p_enhWHEN FC02CLEAR p_ue p_badi p_bte p_sust p_val p_fdex p_enhWHEN FC03PERFORM breakpointWHEN EXTPERFORM visualizar_ampliacionWHEN EXT1PERFORM visualizar_proyectoWHEN EXT2PERFORM visualizar_fm_exitWHEN BADIPERFORM visualizar_interfaceWHEN OBBCALL TRANSACTION OBBHWHEN OB28CALL TRANSACTION OB28WHEN SUST OR VALPERFORM visualizar_programaWHEN FDEXSUBMIT rsmodprf AND RETURNWHEN BTE1CALL TRANSACTION FIBFWHEN BTE2PERFORM cargar_bte USING EWHEN BTE3PERFORM cargar_bte USING PWHEN SENHSUBMIT sapmsenh VIA SELECTION-SCREENAND RETURNWHEN CIMPPERFORM visualizar_imp_enhWHEN ALLMOVE X TO p_incl p_func p_submitWHEN DALCLEAR p_incl p_func p_submitWHEN OTHERS Do Nothing ENDCASE
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_prog
PERFORM repid_f4
---------------------------------------------------------------------- INICIO----------------------------------------------------------------------START-OF-SELECTION
GET TIME FIELD w_tini
- CONSISTENCIAS DE LOS PARAMETROSPERFORM consisti_parametros
- INICIALIZA TABLAPERFORM inicializa_tabela
- VERIFICA SI EN EL PROGRAMA EXISTE ALGUN INCLUDE FUNCION O SUBMITPERFORM verifica_include_funcao_submit
- ANALISA LOS INCLUDES Y BUSCA POR USER-EXIT BADIS Y BTEPERFORM busca_user_exit_badi_bte
- ANALISA LOS INCLUDES Y BUSCA LOS FIELD-EXITSPERFORM buscar_field_exit
- OBTENGO LOS EXITs DE LA TRANSACCIOacuteNPERFORM buscar_user_exit
- OBTENGO LAS PUNTOS DE AMPLIACIOacuteNPERFORM buscar_enh
- OBTENGO LAS SUSTITUCIONESPERFORM buscar_sustituciones
- OBTENGO LAS VALIDACIONESPERFORM buscar_validaciones
- CARGO LOS BREAKPOINTSPERFORM cargar_break
- VISUALIZA LAS AMPLIACIONES ENCONTRADASPERFORM exibe_user_exit
---------------------------------------------------------------------- FIN----------------------------------------------------------------------END-OF-SELECTION
amp---------------------------------------------------------------------amp Form BUSCA_USER_EXIT_BADI_BTEamp--------------------------------------------------------------------- Busca EXITs BADIs y BTE en el coacutedigo fuente----------------------------------------------------------------------FORM busca_user_exit_badi_bte
- VERIFICA SI EN LOS INCLUDES SELECIONADOS EXISTEN EXITSLOOP AT ti_includes
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
- BORRA LA TABLA INTERNAREFRESH ti_programa
- REALIZA LECTURA DE INCLUDE ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa
LOOP AT ti_programa
IF p_ue EQ XPERFORM buscar_exitPERFORM busca_enhancementsENDIF
IF p_badi EQ XPERFORM buscar_badiENDIF
IF p_bte EQ XPERFORM buscar_bteENDIF
IF p_enh EQ XPERFORM buscar_punto_ampliacionENDIF
ENDLOOPENDLOOP
ENDFORM BUSCA_USER_EXIT_BADI_BTE
amp---------------------------------------------------------------------amp Form BUSCA_ENHANCEMENTSamp--------------------------------------------------------------------- Busca las llamadas a los USER-EXIT----------------------------------------------------------------------FORM busca_enhancements
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE EN ALGUN ENHANCEMENTSEARCH ti_programa-cf FOR c_enhance- SE ENCONTRO EL ENHANCEMENT Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentarioCLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM BUSCA_ENHANCEMENTS
amp---------------------------------------------------------------------amp Form EXIBE_USER_EXITamp--------------------------------------------------------------------- Muestra los datos----------------------------------------------------------------------FORM exibe_user_exit
PERFORM armar_alv
PERFORM mostrar_listado
ENDFORM EXIBE_USER_EXIT
amp---------------------------------------------------------------------amp Form PROCURA_INCLUDEamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_include
CLEAR vg_palavra
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_include- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN STRUCTURESEARCH ti_programa-cf FOR c_struct
IF sy-subrc IS INITIALEXITENDIF
- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_includeCLEAR vg_palavraENDIFENDIFENDDO- GRABA NOMBRE DEL INCLUDE PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF
ENDIF
ENDFORM PROCURA_INCLUDE
amp---------------------------------------------------------------------amp Form PROCURA_FUNCAOamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_funcao
CLEAR vg_conta_aspavg_palavra
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA FUNCIONSEARCH ti_programa-cf FOR c_funcao_2- SE ENCONTRO UNA FUNCION Y LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DE LA INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_aspaADD 1 TO vg_conta_aspaIF vg_conta_aspa EQ 2EXITENDIFENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_funcao_1CLEAR vg_palavraENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITCLEAR vg_pnameSELECT SINGLE pnameINTO vg_pnameFROM tfdirWHERE funcname EQ vg_palavraIF sy-subrc EQ 0
READ TABLE ti_includes WITH KEY nome = vg_pnameIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_pname TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF
ENDIF
ENDIF
ENDFORM PROCURA_FUNCAO
amp---------------------------------------------------------------------amp Form VERIFICA_INCLUDE_FUNCAO_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM verifica_include_funcao_submit
CHECK p_ue IS NOT INITIAL OR p_badi IS NOT INITIALOR p_bte IS NOT INITIAL OR p_enh IS NOT INITIAL
LOOP AT ti_includes
ADD 1 TO vg_contadorDESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfillMOVE ti_includes-nivel TO vg_nivelADD 1 TO vg_nivel
- BORRA TABLA INTERNAREFRESH ti_programa
- REALIZA LECTURA DE INCLUDEFUNCION ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa
LOOP AT ti_programa
- PROCURA POR INCLUDESIF p_incl EQ c_xPERFORM procura_includeENDIF- PROCURA POR FUNCIONIF p_func EQ c_xPERFORM procura_funcaoENDIF- PROCURA POR SUBMITIF p_submit EQ c_xPERFORM procura_submitENDIF
ENDLOOP
ENDLOOP
ENDFORM VERIFICA_INCLUDE_FUNCAO_SUBMIT
amp---------------------------------------------------------------------amp Form EVITAR_TIME_OUTamp--------------------------------------------------------------------- Evito el TIME OUT visualizando un mensaje----------------------------------------------------------------------FORM evitar_time_out USING p_tfill LIKE sy-tfill
DATAvl_total(10) TYPE n
vl_atual(10) TYPE nl_tout LIKE sy-timlol_time(10) TYPE c
GET TIME FIELD l_tout
l_tout = l_tout - w_tini
MOVEp_tfill TO vl_totalvg_contador TO vl_atual
SHIFT vl_total LEFT DELETING LEADING 0SHIFT vl_atual LEFT DELETING LEADING 0WRITE l_tout TO l_time
CONCATENATE Tpo l_time Total vl_total Actual vl_atualINTO vg_textoSEPARATED BY space
CALL FUNCTION SAPGUI_PROGRESS_INDICATOREXPORTINGtext = vg_texto
ENDFORM EVITAR_TIME_OUT
amp---------------------------------------------------------------------amp Form PROCURA_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_submit
CLEAR vg_conta_espaco vg_palavra vg_ini_contagem
- VERIFICA SI LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_submit- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF vg_ini_contagem EQ c_x AND vg_caracter IS INITIALADD 1 TO vg_conta_espacoENDIF
IF NOT vg_caracter IS INITIALMOVE c_x TO vg_ini_contagemIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRAIF vg_conta_espaco LT 2CONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACION
TRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_submitCLEAR vg_palavraENDIFELSEEXITENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIFENDIF
ENDFORM PROCURA_SUBMIT
amp---------------------------------------------------------------------amp Form CONSISTI_PARAMETROSamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM consisti_parametros
IF p_nivel IS INITIALMOVE 1 TO p_nivelENDIF
IF p_prog IS INITIAL AND p_tcode IS INITIAL- EL NOMBRE DEL PROGRAMA Y EL NOMBRE DE LA TRANSACCION NO PUEDEN SER- NULOS UNO DE ELLOS DEBE SER INFORMADOMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e01STOPENDIF
IF NOT p_prog IS INITIAL AND NOT p_tcode IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME NOMBRE DE PROGRAMA O TRANSACCIONMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e02STOPENDIF
IF p_ue IS INITIAL AND p_badi IS INITIAL AND p_bte IS INITIALAND p_sust IS INITIAL AND p_val IS INITIAL AND p_fdex IS INITIALAND p_enh IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME UN TIPO DE MEJORAMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e03STOPENDIF
ENDFORM CONSISTI_PARAMETROS
amp---------------------------------------------------------------------
amp Form INICIALIZA_TABELAamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM inicializa_tabela
DATAe_tstc TYPE tstcl_tcode TYPE sy-tcode
REFRESH ti_includes
IF NOT p_prog IS INITIAL
MOVE p_prog TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includes
- BUSCO EL PROGRAMAREAD REPORT ti_includes-nome INTO ti_programa
IF sy-subrc EQ 0REFRESH ti_programaELSE- EL PROGRAMA NO EXISTEMESSAGE s893(pz) WITH El programa p_prog no existeSTOPENDIF
ELSEIF NOT p_tcode IS INITIAL
SELECT SINGLE FROM tstcWHERE tcode EQ p_tcode
IF sy-subrc EQ 0
IF tstc-pgmna IS NOT INITIALMOVE tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includesELSE Se trata de una transaccioacuten de paraacutemetros Obtengo la transaccioacuten asociadaCALL FUNCTION RS_TRANSACTION_SINGLE_GETEXPORTINGparameter_tcode = p_tcodeIMPORTINGtcode = l_tcode
SELECT SINGLE INTO e_tstcFROM tstcWHERE tcode EQ l_tcode
IF sy-subrc EQ 0MOVE e_tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivel
APPEND ti_includesELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeENDIFENDIFELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeSTOPENDIFENDIF
ENDFORM INICIALIZA_TABELA
amp---------------------------------------------------------------------amp Form armar_alvamp--------------------------------------------------------------------- Armo el ALV----------------------------------------------------------------------FORM armar_alv
DATAl_repid TYPE sy-repid
MOVE sy-repid TO l_repid
CALL FUNCTION REUSE_ALV_BLOCK_LIST_INITEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMAND
IF p_ue IS NOT INITIALPERFORM construir_catalogo_exitPERFORM definir_layout USING TI_USER_EXITCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGEPERFORM sort TABLES ti_sortUSING TI_USER_EXIT
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_USER_EXITit_events = ti_eventsit_sort = ti_sorti_text = User-exitTABLESt_outtab = ti_user_exitEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
PERFORM construir_catalogo_uexitPERFORM definir_layout USING TI_FINAL
CHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_UEXITPERFORM sort TABLES ti_sortUSING TI_FINAL
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FINALit_events = ti_eventsit_sort = ti_sorti_text = User-exit TxCMODTABLESt_outtab = ti_finalEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_badi IS NOT INITIALPERFORM construir_catalogo_badiPERFORM definir_layout USING TI_BADICHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BADIPERFORM sort TABLES ti_sortUSING TI_BADI
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_BADIit_events = ti_eventsit_sort = ti_sorti_text = BadisTABLESt_outtab = ti_badiEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_bte IS NOT INITIALPERFORM construir_catalogo_btePERFORM definir_layout USING TI_BTECHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BTEPERFORM sort TABLES ti_sortUSING TI_BTE
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layout
it_fieldcat = ti_cati_tabname = TI_BTEit_events = ti_eventsit_sort = ti_sorti_text = BTETABLESt_outtab = ti_bteEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_enh IS NOT INITIALPERFORM construir_catalogo_enhPERFORM definir_layout USING TI_ENHCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHPERFORM sort TABLES ti_sortUSING TI_ENH
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHit_events = ti_eventsit_sort = ti_sorti_text = ENHTABLESt_outtab = ti_enhEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
PERFORM construir_catalogo_enhobjPERFORM definir_layout USING TI_ENHOBJCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHOBJPERFORM sort TABLES ti_sortUSING TI_ENHOBJ
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHOBJit_events = ti_eventsit_sort = ti_sorti_text = ENHOBJTABLESt_outtab = ti_enhobjEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX
PERFORM sort TABLES ti_sortUSING TI_FDEX
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
ENDFORM armar_alv
amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03
CF X c_text_04
ENDFORM construir_catalogo_EXIT
amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic
STATICS l_col_pos LIKE sy-cucol
Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname
CHECK sy-subrc EQ 0
IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF
IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF
wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon
MODIFY pt_cat FROM wa_cat INDEX sy-tabix
ENDFORM asignar_campo_a_catalogo
amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv
CLEAR p_layout
IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X
ENDFORM definir_layout
amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n
REFRESH ti_eventsCLEAR wa_events
ALV Simple Block appendl_type = 2
Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events
Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF
ENDFORM construir_eventos
amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit
ENDFORM top_of_page
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD
ENDFORM TOP_OF_PAGE_UEXIT
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs
ENDFORM TOP_OF_PAGE_FDEX
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs
ENDFORM TOP_OF_PAGE_BADI
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant
CONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs
ENDFORM TOP_OF_PAGE_BTE
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENH
amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any
CLEAR pt_sort wa_sortREFRESH pt_sort
CASE p_tabnameWHEN TI_SUST
wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_VAL
wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_ENHOBJ
wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN OTHERS
IF p_tabname NE TI_FINAL
wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
IF p_tabname NE TI_FDEX
wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
ENDIF
ELSE
wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE
ENDFORM sort
amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado
wa_print-reserve_lines = 2
CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY
EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM mostrar_listado
amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield
DATA l_break TYPE c
Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE
Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL
CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf
ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF 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-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF
WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF
WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF
WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea
ti_bte-breakMOVE X TO l_breakENDIF
WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF
WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF
WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF
WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF
WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf
CALL FUNCTION RS_NAVIGATION_MONITORENDIF
WHEN TI_CIMP Customer implementation
CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X
ENDFORM user_command
amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM visualizar_linea
amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0
CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM buscar_exit
amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi
DATAl_subrc LIKE sy-subrc
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF
IF l_subrc EQ 0CLEAR ti_badi
- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF
ENDFORM buscar_badi
amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform
CHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
ENDFORM buscar_bte
amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4
CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS
cancel = 1wrong_type = 2OTHERS = 3
ENDFORM repid_f4
amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf
DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
SEARCH p_cf FOR c_type_ref
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
SPLIT p_cf+sy-fdpos(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
READ TABLE lt_cf INDEX 4
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
CHECK sy-subrc IS INITIAL
Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten
textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer
CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4
IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF
WHEN OTHERS Do Nothing ENDCASE
ENDFORM visualizar_badi
amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf
DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
CLEAR d010inc modsap modact
Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid
IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF
SEARCH p_cf FOR c_enhance
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
MOVE p_cf+sy-fdpos(l_cf) TO l_linea
SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3
TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS
Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _
Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit
CHECK sy-subrc IS INITIAL
Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM
modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3
ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname
CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ENDIF
ENDFORM visualizar_exit
amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit
DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo
DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe
DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE
CHECK p_fdex IS NOT INITIAL
CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe
MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex
IF p_prog IS NOT INITIAL
MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF
Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog
LOOP AT lt_d020s
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
REFRESH lt_d021s
Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4
Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X
SEARCH lt_d021s-fnam FOR -
IF sy-subrc IS INITIAL
MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum
Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname
APPEND lt_campo
ENDIF
ENDLOOPENDLOOP
CHECK lt_campo[] IS NOT INITIAL
SORT lt_campo BY repid dnum tabname fieldname
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
linea(10) TYPE n cf LIKE rssource-linecf(500)nivel(2) TYPE nbreak LIKE icon-idsel(1)END OF ti_user_exit
DATA BEGIN OF ti_badi OCCURS 0programa LIKE sy-repidtipo(4)linea(10) TYPE n cf LIKE rssource-linecf(500)nivel(2) TYPE nbreak LIKE icon-idsel(1)END OF ti_badi
DATA BEGIN OF ti_bte OCCURS 0programa LIKE sy-repidtipo(4)linea(10) TYPE n cf LIKE rssource-linecf(500)nivel(2) TYPE nbreak LIKE icon-idsel(1)END OF ti_bte
DATA BEGIN OF ti_enh OCCURS 0programa LIKE sy-repidtipo(4)linea(10) TYPE n cf LIKE rssource-linecf(500)nivel(2) TYPE nbreak LIKE icon-idsel(1)END OF ti_enh
DATA BEGIN OF ti_enhobj OCCURS 0enhname LIKE enhobj-enhnameversion LIKE enhobj-versionobj_type LIKE enhobj-obj_typeobj_name LIKE enhobj-obj_namesel(1)END OF ti_enhobj
DATA BEGIN OF ti_fdex OCCURS 0tipo(4) cf LIKE rssource-linecf(500)sel(1)END OF ti_fdex
DATAti_tadir TYPE STANDARD TABLE OF x_tadir WITH HEADER LINE
ti_jtab TYPE STANDARD TABLE OF x_slog WITH HEADER LINE
DATA BEGIN OF ti_final OCCURS 0name LIKE modsap-namemember LIKE modsap-memberinclude LIKE rs38l-include (15) Include namestext LIKE tftit-stextprograma LIKE rs38l-includesel(1)END OF ti_final
DATA BEGIN OF ti_sust OCCURS 0substid LIKE gb922-substidsubseqnr LIKE gb922-subseqnrconseqnr LIKE gb922-conseqnrsubstab LIKE gb922-substabsubsfield LIKE gb922-subsfieldsubsval LIKE gb922-subsvalexitsubst LIKE gb922-exitsubstsel(1)END OF ti_sust
DATA BEGIN OF ti_val OCCURS 0valid LIKE gb931-validvalseqnr LIKE gb931-valseqnrcondid LIKE gb931-condidcheckid LIKE gb931-checkidsel(1)END OF ti_val
DATA BEGIN OF ti_bdcdata OCCURS 0INCLUDE STRUCTURE bdcdataDATA END OF ti_bdcdata
DATA ti_gb31t TYPE TABLE OF gb31t WITH HEADER LINE
DATA BEGIN OF ti_cimp OCCURS 0enhname LIKE enhobj-enhnameobj_type LIKE enhobj-obj_typeobj_name LIKE enhobj-obj_nameelemusage LIKE enhobj-elemusageenhinclude(40) like ENHINCINX-ENHINCLUDEEND OF ti_cimp
---------------------------------------------------------------------- VARIABLE GLOBALES----------------------------------------------------------------------DATAfunctxt TYPE smp_dyntxtw_tini LIKE sy-timlovg_caracter TYPE cvg_palavra(50) TYPE cvg_inicial LIKE sy-indexvg_conta_aspa TYPE nvg_pname LIKE tfdir-pnamevg_texto(50) TYPE cvg_contador LIKE sy-tfillvg_nivel(2) TYPE n
vg_ini_contagem TYPE c INDICA QUE DEBE SER INICIADO EL CONTADORvg_conta_espaco TYPE n TOTAL DE ESPACIOS ( MAacuteXIMO 2 )
---------------------------------------------------------------------- DEFINICION DE Estructuras y tablas para ALV (FM)----------------------------------------------------------------------DATAwa_cat TYPE slis_fieldcat_alv WA cataacutelogoti_cat TYPE slis_t_fieldcat_alv TI cataacutelogowa_layout TYPE slis_layout_alv WA opciones listati_header TYPE slis_t_listheader TI cabecera listawa_header TYPE slis_listheader WA cabecera listawa_events TYPE slis_alv_event WA eventos listati_events TYPE slis_t_event TI eventos listawa_sort TYPE slis_sortinfo_alv WA sortti_sort TYPE slis_t_sortinfo_alv TI sortwa_print TYPE slis_print_alv WA print
---------------------------------------------------------------------- PARAMETROS----------------------------------------------------------------------
- DATOS OBLIGATORIOSSELECTION-SCREEN BEGIN OF BLOCK bl01 WITH FRAME TITLE tit1
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text2POSITION 20PARAMETERS p_tcode LIKE tstc-tcode TransaccioacutenSELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text1POSITION 20PARAMETERS p_prog LIKE sy-repid ProgramaSELECTION-SCREEN END OF LINE
SELECTION-SCREEN END OF BLOCK bl01
SELECTION-SCREEN BEGIN OF BLOCK bl02 WITH FRAME TITLE tit2 SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text7POSITION 20PARAMETERS p_ue AS CHECKBOX User-exit
Boton de Exits en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(45) btn USER-COMMAND extVISIBLE LENGTH 12
Boton de Proyectos de Exits en la DYNPROSELECTION-SCREEN PUSHBUTTON 38(45) ext1 USER-COMMAND ext1VISIBLE LENGTH 12
Boton de User-Exits en la DYNPROSELECTION-SCREEN PUSHBUTTON 51(45) ext2 USER-COMMAND ext2VISIBLE LENGTH 12
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text8POSITION 20PARAMETERS p_badi AS CHECKBOX Badis Boton de Interface en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) badi USER-COMMAND badiVISIBLE LENGTH 25SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINEPOSITION 25PARAMETERS p_handl AS CHECKBOX DEFAULT XCL_EXITHANDLER=gtGET_INSTANCESELECTION-SCREEN COMMENT 30(40) text12SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text9POSITION 20PARAMETERS p_bte AS CHECKBOX Bte Boton de Tx FIBF en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) bte1 USER-COMMAND bte1VISIBLE LENGTH 1 Boton de Tx Evento en la DYNPROSELECTION-SCREEN PUSHBUTTON 29(60) bte2 USER-COMMAND bte2VISIBLE LENGTH 10 Boton de Tx Proceso en la DYNPROSELECTION-SCREEN PUSHBUTTON 40(60) bte3 USER-COMMAND bte3VISIBLE LENGTH 10
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(19) text14POSITION 20PARAMETERS p_enh AS CHECKBOX Punto de ampliacioacuten
Boton de Tx SENH en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) senh USER-COMMAND senhVISIBLE LENGTH 1
Boton de Customer Implementation en la DYNPROSELECTION-SCREEN PUSHBUTTON 29(60) cimp USER-COMMAND cimpVISIBLE LENGTH 24
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text10POSITION 20PARAMETERS p_sust AS CHECKBOX Sustitucioacuten
Boton de Sustitucioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(45) btn1 USER-COMMAND obbVISIBLE LENGTH 12
Boton de programa sustitucioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 38(45) sust USER-COMMAND sustVISIBLE LENGTH 15
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text13POSITION 20PARAMETERS p_val AS CHECKBOX Validacioacuten
Boton de Validacioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(45) ob28 USER-COMMAND ob28VISIBLE LENGTH 12
Boton de programa sustitucioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 38(45) val USER-COMMAND valVISIBLE LENGTH 15
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text11POSITION 20PARAMETERS p_fdex AS CHECKBOX Field-exit
Boton de Field-exit en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) btn2 USER-COMMAND fdexVISIBLE LENGTH 28
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN END OF BLOCK bl02
- DATOS OPCIONALESSELECTION-SCREEN BEGIN OF BLOCK bl03 WITH FRAME TITLE tit3
SELECTION-SCREEN BEGIN OF LINE Boton de ALL en la DYNPROSELECTION-SCREEN PUSHBUTTON 18(60) all USER-COMMAND allVISIBLE LENGTH 1 Boton de DAL en la DYNPROSELECTION-SCREEN PUSHBUTTON 21(60) dal USER-COMMAND dalVISIBLE LENGTH 1SELECTION-SCREEN END OF LINE
SELECTION-SCREEN ULINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text3POSITION 20PARAMETERS p_incl AS CHECKBOX DEFAULT X IncludesSELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text4POSITION 20PARAMETERS p_func AS CHECKBOX DEFAULT X Funciones
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text5POSITION 20PARAMETERS p_submit AS CHECKBOX DEFAULT X SubmitSELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text6POSITION 20PARAMETERS p_nivel(2) TYPE n DEFAULT 04 NivelSELECTION-SCREEN END OF LINE
SELECTION-SCREEN END OF BLOCK bl03
Botoacuten de Marcar todo en el STATUS GUISELECTION-SCREEN FUNCTION KEY 1 Botoacuten de Desmarcar todo en el STATUS GUISELECTION-SCREEN FUNCTION KEY 2 Botoacuten de Breakpoint en el STATUS GUISELECTION-SCREEN FUNCTION KEY 3
----------------------------------------------------------------------- DEFINICIOacuteN DE MACROS-----------------------------------------------------------------------DEFINE icon_create Creo para el botoacuten indicado el icono y los textos correspondientes
call function ICON_CREATEexportingname = amp2text = amp3info = amp4importingresult = amp1exceptionsothers = 0
END-OF-DEFINITION icon_create
----------------------------------------------------------------------- INICIALIZACIOacuteN DE VARIABLES-----------------------------------------------------------------------INITIALIZATION
PERFORM def_text_parameter
PERFORM def_botones
CLEAR ti_gb31tREFRESH ti_gb31t
Obtengo ValidacioacutenSustitucioacutenEventosTextoSELECT INTO TABLE ti_gb31tFROM gb31tWHERE spras EQ sy-langu
----------------------------------------------------------------------- AT SELECTION-SCREEN-----------------------------------------------------------------------
AT SELECTION-SCREEN
CASE sscrfields-ucommWHEN FC01MOVE X TO p_ue p_badi p_bte p_sust p_val p_fdex p_enhWHEN FC02CLEAR p_ue p_badi p_bte p_sust p_val p_fdex p_enhWHEN FC03PERFORM breakpointWHEN EXTPERFORM visualizar_ampliacionWHEN EXT1PERFORM visualizar_proyectoWHEN EXT2PERFORM visualizar_fm_exitWHEN BADIPERFORM visualizar_interfaceWHEN OBBCALL TRANSACTION OBBHWHEN OB28CALL TRANSACTION OB28WHEN SUST OR VALPERFORM visualizar_programaWHEN FDEXSUBMIT rsmodprf AND RETURNWHEN BTE1CALL TRANSACTION FIBFWHEN BTE2PERFORM cargar_bte USING EWHEN BTE3PERFORM cargar_bte USING PWHEN SENHSUBMIT sapmsenh VIA SELECTION-SCREENAND RETURNWHEN CIMPPERFORM visualizar_imp_enhWHEN ALLMOVE X TO p_incl p_func p_submitWHEN DALCLEAR p_incl p_func p_submitWHEN OTHERS Do Nothing ENDCASE
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_prog
PERFORM repid_f4
---------------------------------------------------------------------- INICIO----------------------------------------------------------------------START-OF-SELECTION
GET TIME FIELD w_tini
- CONSISTENCIAS DE LOS PARAMETROSPERFORM consisti_parametros
- INICIALIZA TABLAPERFORM inicializa_tabela
- VERIFICA SI EN EL PROGRAMA EXISTE ALGUN INCLUDE FUNCION O SUBMITPERFORM verifica_include_funcao_submit
- ANALISA LOS INCLUDES Y BUSCA POR USER-EXIT BADIS Y BTEPERFORM busca_user_exit_badi_bte
- ANALISA LOS INCLUDES Y BUSCA LOS FIELD-EXITSPERFORM buscar_field_exit
- OBTENGO LOS EXITs DE LA TRANSACCIOacuteNPERFORM buscar_user_exit
- OBTENGO LAS PUNTOS DE AMPLIACIOacuteNPERFORM buscar_enh
- OBTENGO LAS SUSTITUCIONESPERFORM buscar_sustituciones
- OBTENGO LAS VALIDACIONESPERFORM buscar_validaciones
- CARGO LOS BREAKPOINTSPERFORM cargar_break
- VISUALIZA LAS AMPLIACIONES ENCONTRADASPERFORM exibe_user_exit
---------------------------------------------------------------------- FIN----------------------------------------------------------------------END-OF-SELECTION
amp---------------------------------------------------------------------amp Form BUSCA_USER_EXIT_BADI_BTEamp--------------------------------------------------------------------- Busca EXITs BADIs y BTE en el coacutedigo fuente----------------------------------------------------------------------FORM busca_user_exit_badi_bte
- VERIFICA SI EN LOS INCLUDES SELECIONADOS EXISTEN EXITSLOOP AT ti_includes
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
- BORRA LA TABLA INTERNAREFRESH ti_programa
- REALIZA LECTURA DE INCLUDE ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa
LOOP AT ti_programa
IF p_ue EQ XPERFORM buscar_exitPERFORM busca_enhancementsENDIF
IF p_badi EQ XPERFORM buscar_badiENDIF
IF p_bte EQ XPERFORM buscar_bteENDIF
IF p_enh EQ XPERFORM buscar_punto_ampliacionENDIF
ENDLOOPENDLOOP
ENDFORM BUSCA_USER_EXIT_BADI_BTE
amp---------------------------------------------------------------------amp Form BUSCA_ENHANCEMENTSamp--------------------------------------------------------------------- Busca las llamadas a los USER-EXIT----------------------------------------------------------------------FORM busca_enhancements
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE EN ALGUN ENHANCEMENTSEARCH ti_programa-cf FOR c_enhance- SE ENCONTRO EL ENHANCEMENT Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentarioCLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM BUSCA_ENHANCEMENTS
amp---------------------------------------------------------------------amp Form EXIBE_USER_EXITamp--------------------------------------------------------------------- Muestra los datos----------------------------------------------------------------------FORM exibe_user_exit
PERFORM armar_alv
PERFORM mostrar_listado
ENDFORM EXIBE_USER_EXIT
amp---------------------------------------------------------------------amp Form PROCURA_INCLUDEamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_include
CLEAR vg_palavra
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_include- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN STRUCTURESEARCH ti_programa-cf FOR c_struct
IF sy-subrc IS INITIALEXITENDIF
- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_includeCLEAR vg_palavraENDIFENDIFENDDO- GRABA NOMBRE DEL INCLUDE PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF
ENDIF
ENDFORM PROCURA_INCLUDE
amp---------------------------------------------------------------------amp Form PROCURA_FUNCAOamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_funcao
CLEAR vg_conta_aspavg_palavra
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA FUNCIONSEARCH ti_programa-cf FOR c_funcao_2- SE ENCONTRO UNA FUNCION Y LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DE LA INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_aspaADD 1 TO vg_conta_aspaIF vg_conta_aspa EQ 2EXITENDIFENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_funcao_1CLEAR vg_palavraENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITCLEAR vg_pnameSELECT SINGLE pnameINTO vg_pnameFROM tfdirWHERE funcname EQ vg_palavraIF sy-subrc EQ 0
READ TABLE ti_includes WITH KEY nome = vg_pnameIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_pname TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF
ENDIF
ENDIF
ENDFORM PROCURA_FUNCAO
amp---------------------------------------------------------------------amp Form VERIFICA_INCLUDE_FUNCAO_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM verifica_include_funcao_submit
CHECK p_ue IS NOT INITIAL OR p_badi IS NOT INITIALOR p_bte IS NOT INITIAL OR p_enh IS NOT INITIAL
LOOP AT ti_includes
ADD 1 TO vg_contadorDESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfillMOVE ti_includes-nivel TO vg_nivelADD 1 TO vg_nivel
- BORRA TABLA INTERNAREFRESH ti_programa
- REALIZA LECTURA DE INCLUDEFUNCION ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa
LOOP AT ti_programa
- PROCURA POR INCLUDESIF p_incl EQ c_xPERFORM procura_includeENDIF- PROCURA POR FUNCIONIF p_func EQ c_xPERFORM procura_funcaoENDIF- PROCURA POR SUBMITIF p_submit EQ c_xPERFORM procura_submitENDIF
ENDLOOP
ENDLOOP
ENDFORM VERIFICA_INCLUDE_FUNCAO_SUBMIT
amp---------------------------------------------------------------------amp Form EVITAR_TIME_OUTamp--------------------------------------------------------------------- Evito el TIME OUT visualizando un mensaje----------------------------------------------------------------------FORM evitar_time_out USING p_tfill LIKE sy-tfill
DATAvl_total(10) TYPE n
vl_atual(10) TYPE nl_tout LIKE sy-timlol_time(10) TYPE c
GET TIME FIELD l_tout
l_tout = l_tout - w_tini
MOVEp_tfill TO vl_totalvg_contador TO vl_atual
SHIFT vl_total LEFT DELETING LEADING 0SHIFT vl_atual LEFT DELETING LEADING 0WRITE l_tout TO l_time
CONCATENATE Tpo l_time Total vl_total Actual vl_atualINTO vg_textoSEPARATED BY space
CALL FUNCTION SAPGUI_PROGRESS_INDICATOREXPORTINGtext = vg_texto
ENDFORM EVITAR_TIME_OUT
amp---------------------------------------------------------------------amp Form PROCURA_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_submit
CLEAR vg_conta_espaco vg_palavra vg_ini_contagem
- VERIFICA SI LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_submit- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF vg_ini_contagem EQ c_x AND vg_caracter IS INITIALADD 1 TO vg_conta_espacoENDIF
IF NOT vg_caracter IS INITIALMOVE c_x TO vg_ini_contagemIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRAIF vg_conta_espaco LT 2CONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACION
TRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_submitCLEAR vg_palavraENDIFELSEEXITENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIFENDIF
ENDFORM PROCURA_SUBMIT
amp---------------------------------------------------------------------amp Form CONSISTI_PARAMETROSamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM consisti_parametros
IF p_nivel IS INITIALMOVE 1 TO p_nivelENDIF
IF p_prog IS INITIAL AND p_tcode IS INITIAL- EL NOMBRE DEL PROGRAMA Y EL NOMBRE DE LA TRANSACCION NO PUEDEN SER- NULOS UNO DE ELLOS DEBE SER INFORMADOMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e01STOPENDIF
IF NOT p_prog IS INITIAL AND NOT p_tcode IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME NOMBRE DE PROGRAMA O TRANSACCIONMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e02STOPENDIF
IF p_ue IS INITIAL AND p_badi IS INITIAL AND p_bte IS INITIALAND p_sust IS INITIAL AND p_val IS INITIAL AND p_fdex IS INITIALAND p_enh IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME UN TIPO DE MEJORAMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e03STOPENDIF
ENDFORM CONSISTI_PARAMETROS
amp---------------------------------------------------------------------
amp Form INICIALIZA_TABELAamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM inicializa_tabela
DATAe_tstc TYPE tstcl_tcode TYPE sy-tcode
REFRESH ti_includes
IF NOT p_prog IS INITIAL
MOVE p_prog TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includes
- BUSCO EL PROGRAMAREAD REPORT ti_includes-nome INTO ti_programa
IF sy-subrc EQ 0REFRESH ti_programaELSE- EL PROGRAMA NO EXISTEMESSAGE s893(pz) WITH El programa p_prog no existeSTOPENDIF
ELSEIF NOT p_tcode IS INITIAL
SELECT SINGLE FROM tstcWHERE tcode EQ p_tcode
IF sy-subrc EQ 0
IF tstc-pgmna IS NOT INITIALMOVE tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includesELSE Se trata de una transaccioacuten de paraacutemetros Obtengo la transaccioacuten asociadaCALL FUNCTION RS_TRANSACTION_SINGLE_GETEXPORTINGparameter_tcode = p_tcodeIMPORTINGtcode = l_tcode
SELECT SINGLE INTO e_tstcFROM tstcWHERE tcode EQ l_tcode
IF sy-subrc EQ 0MOVE e_tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivel
APPEND ti_includesELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeENDIFENDIFELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeSTOPENDIFENDIF
ENDFORM INICIALIZA_TABELA
amp---------------------------------------------------------------------amp Form armar_alvamp--------------------------------------------------------------------- Armo el ALV----------------------------------------------------------------------FORM armar_alv
DATAl_repid TYPE sy-repid
MOVE sy-repid TO l_repid
CALL FUNCTION REUSE_ALV_BLOCK_LIST_INITEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMAND
IF p_ue IS NOT INITIALPERFORM construir_catalogo_exitPERFORM definir_layout USING TI_USER_EXITCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGEPERFORM sort TABLES ti_sortUSING TI_USER_EXIT
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_USER_EXITit_events = ti_eventsit_sort = ti_sorti_text = User-exitTABLESt_outtab = ti_user_exitEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
PERFORM construir_catalogo_uexitPERFORM definir_layout USING TI_FINAL
CHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_UEXITPERFORM sort TABLES ti_sortUSING TI_FINAL
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FINALit_events = ti_eventsit_sort = ti_sorti_text = User-exit TxCMODTABLESt_outtab = ti_finalEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_badi IS NOT INITIALPERFORM construir_catalogo_badiPERFORM definir_layout USING TI_BADICHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BADIPERFORM sort TABLES ti_sortUSING TI_BADI
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_BADIit_events = ti_eventsit_sort = ti_sorti_text = BadisTABLESt_outtab = ti_badiEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_bte IS NOT INITIALPERFORM construir_catalogo_btePERFORM definir_layout USING TI_BTECHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BTEPERFORM sort TABLES ti_sortUSING TI_BTE
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layout
it_fieldcat = ti_cati_tabname = TI_BTEit_events = ti_eventsit_sort = ti_sorti_text = BTETABLESt_outtab = ti_bteEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_enh IS NOT INITIALPERFORM construir_catalogo_enhPERFORM definir_layout USING TI_ENHCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHPERFORM sort TABLES ti_sortUSING TI_ENH
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHit_events = ti_eventsit_sort = ti_sorti_text = ENHTABLESt_outtab = ti_enhEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
PERFORM construir_catalogo_enhobjPERFORM definir_layout USING TI_ENHOBJCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHOBJPERFORM sort TABLES ti_sortUSING TI_ENHOBJ
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHOBJit_events = ti_eventsit_sort = ti_sorti_text = ENHOBJTABLESt_outtab = ti_enhobjEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX
PERFORM sort TABLES ti_sortUSING TI_FDEX
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
ENDFORM armar_alv
amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03
CF X c_text_04
ENDFORM construir_catalogo_EXIT
amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic
STATICS l_col_pos LIKE sy-cucol
Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname
CHECK sy-subrc EQ 0
IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF
IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF
wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon
MODIFY pt_cat FROM wa_cat INDEX sy-tabix
ENDFORM asignar_campo_a_catalogo
amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv
CLEAR p_layout
IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X
ENDFORM definir_layout
amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n
REFRESH ti_eventsCLEAR wa_events
ALV Simple Block appendl_type = 2
Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events
Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF
ENDFORM construir_eventos
amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit
ENDFORM top_of_page
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD
ENDFORM TOP_OF_PAGE_UEXIT
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs
ENDFORM TOP_OF_PAGE_FDEX
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs
ENDFORM TOP_OF_PAGE_BADI
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant
CONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs
ENDFORM TOP_OF_PAGE_BTE
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENH
amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any
CLEAR pt_sort wa_sortREFRESH pt_sort
CASE p_tabnameWHEN TI_SUST
wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_VAL
wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_ENHOBJ
wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN OTHERS
IF p_tabname NE TI_FINAL
wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
IF p_tabname NE TI_FDEX
wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
ENDIF
ELSE
wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE
ENDFORM sort
amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado
wa_print-reserve_lines = 2
CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY
EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM mostrar_listado
amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield
DATA l_break TYPE c
Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE
Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL
CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf
ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF 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-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF
WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF
WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF
WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea
ti_bte-breakMOVE X TO l_breakENDIF
WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF
WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF
WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF
WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF
WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf
CALL FUNCTION RS_NAVIGATION_MONITORENDIF
WHEN TI_CIMP Customer implementation
CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X
ENDFORM user_command
amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM visualizar_linea
amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0
CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM buscar_exit
amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi
DATAl_subrc LIKE sy-subrc
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF
IF l_subrc EQ 0CLEAR ti_badi
- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF
ENDFORM buscar_badi
amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform
CHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
ENDFORM buscar_bte
amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4
CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS
cancel = 1wrong_type = 2OTHERS = 3
ENDFORM repid_f4
amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf
DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
SEARCH p_cf FOR c_type_ref
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
SPLIT p_cf+sy-fdpos(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
READ TABLE lt_cf INDEX 4
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
CHECK sy-subrc IS INITIAL
Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten
textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer
CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4
IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF
WHEN OTHERS Do Nothing ENDCASE
ENDFORM visualizar_badi
amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf
DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
CLEAR d010inc modsap modact
Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid
IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF
SEARCH p_cf FOR c_enhance
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
MOVE p_cf+sy-fdpos(l_cf) TO l_linea
SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3
TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS
Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _
Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit
CHECK sy-subrc IS INITIAL
Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM
modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3
ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname
CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ENDIF
ENDFORM visualizar_exit
amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit
DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo
DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe
DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE
CHECK p_fdex IS NOT INITIAL
CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe
MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex
IF p_prog IS NOT INITIAL
MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF
Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog
LOOP AT lt_d020s
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
REFRESH lt_d021s
Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4
Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X
SEARCH lt_d021s-fnam FOR -
IF sy-subrc IS INITIAL
MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum
Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname
APPEND lt_campo
ENDIF
ENDLOOPENDLOOP
CHECK lt_campo[] IS NOT INITIAL
SORT lt_campo BY repid dnum tabname fieldname
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
ti_jtab TYPE STANDARD TABLE OF x_slog WITH HEADER LINE
DATA BEGIN OF ti_final OCCURS 0name LIKE modsap-namemember LIKE modsap-memberinclude LIKE rs38l-include (15) Include namestext LIKE tftit-stextprograma LIKE rs38l-includesel(1)END OF ti_final
DATA BEGIN OF ti_sust OCCURS 0substid LIKE gb922-substidsubseqnr LIKE gb922-subseqnrconseqnr LIKE gb922-conseqnrsubstab LIKE gb922-substabsubsfield LIKE gb922-subsfieldsubsval LIKE gb922-subsvalexitsubst LIKE gb922-exitsubstsel(1)END OF ti_sust
DATA BEGIN OF ti_val OCCURS 0valid LIKE gb931-validvalseqnr LIKE gb931-valseqnrcondid LIKE gb931-condidcheckid LIKE gb931-checkidsel(1)END OF ti_val
DATA BEGIN OF ti_bdcdata OCCURS 0INCLUDE STRUCTURE bdcdataDATA END OF ti_bdcdata
DATA ti_gb31t TYPE TABLE OF gb31t WITH HEADER LINE
DATA BEGIN OF ti_cimp OCCURS 0enhname LIKE enhobj-enhnameobj_type LIKE enhobj-obj_typeobj_name LIKE enhobj-obj_nameelemusage LIKE enhobj-elemusageenhinclude(40) like ENHINCINX-ENHINCLUDEEND OF ti_cimp
---------------------------------------------------------------------- VARIABLE GLOBALES----------------------------------------------------------------------DATAfunctxt TYPE smp_dyntxtw_tini LIKE sy-timlovg_caracter TYPE cvg_palavra(50) TYPE cvg_inicial LIKE sy-indexvg_conta_aspa TYPE nvg_pname LIKE tfdir-pnamevg_texto(50) TYPE cvg_contador LIKE sy-tfillvg_nivel(2) TYPE n
vg_ini_contagem TYPE c INDICA QUE DEBE SER INICIADO EL CONTADORvg_conta_espaco TYPE n TOTAL DE ESPACIOS ( MAacuteXIMO 2 )
---------------------------------------------------------------------- DEFINICION DE Estructuras y tablas para ALV (FM)----------------------------------------------------------------------DATAwa_cat TYPE slis_fieldcat_alv WA cataacutelogoti_cat TYPE slis_t_fieldcat_alv TI cataacutelogowa_layout TYPE slis_layout_alv WA opciones listati_header TYPE slis_t_listheader TI cabecera listawa_header TYPE slis_listheader WA cabecera listawa_events TYPE slis_alv_event WA eventos listati_events TYPE slis_t_event TI eventos listawa_sort TYPE slis_sortinfo_alv WA sortti_sort TYPE slis_t_sortinfo_alv TI sortwa_print TYPE slis_print_alv WA print
---------------------------------------------------------------------- PARAMETROS----------------------------------------------------------------------
- DATOS OBLIGATORIOSSELECTION-SCREEN BEGIN OF BLOCK bl01 WITH FRAME TITLE tit1
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text2POSITION 20PARAMETERS p_tcode LIKE tstc-tcode TransaccioacutenSELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text1POSITION 20PARAMETERS p_prog LIKE sy-repid ProgramaSELECTION-SCREEN END OF LINE
SELECTION-SCREEN END OF BLOCK bl01
SELECTION-SCREEN BEGIN OF BLOCK bl02 WITH FRAME TITLE tit2 SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text7POSITION 20PARAMETERS p_ue AS CHECKBOX User-exit
Boton de Exits en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(45) btn USER-COMMAND extVISIBLE LENGTH 12
Boton de Proyectos de Exits en la DYNPROSELECTION-SCREEN PUSHBUTTON 38(45) ext1 USER-COMMAND ext1VISIBLE LENGTH 12
Boton de User-Exits en la DYNPROSELECTION-SCREEN PUSHBUTTON 51(45) ext2 USER-COMMAND ext2VISIBLE LENGTH 12
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text8POSITION 20PARAMETERS p_badi AS CHECKBOX Badis Boton de Interface en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) badi USER-COMMAND badiVISIBLE LENGTH 25SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINEPOSITION 25PARAMETERS p_handl AS CHECKBOX DEFAULT XCL_EXITHANDLER=gtGET_INSTANCESELECTION-SCREEN COMMENT 30(40) text12SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text9POSITION 20PARAMETERS p_bte AS CHECKBOX Bte Boton de Tx FIBF en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) bte1 USER-COMMAND bte1VISIBLE LENGTH 1 Boton de Tx Evento en la DYNPROSELECTION-SCREEN PUSHBUTTON 29(60) bte2 USER-COMMAND bte2VISIBLE LENGTH 10 Boton de Tx Proceso en la DYNPROSELECTION-SCREEN PUSHBUTTON 40(60) bte3 USER-COMMAND bte3VISIBLE LENGTH 10
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(19) text14POSITION 20PARAMETERS p_enh AS CHECKBOX Punto de ampliacioacuten
Boton de Tx SENH en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) senh USER-COMMAND senhVISIBLE LENGTH 1
Boton de Customer Implementation en la DYNPROSELECTION-SCREEN PUSHBUTTON 29(60) cimp USER-COMMAND cimpVISIBLE LENGTH 24
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text10POSITION 20PARAMETERS p_sust AS CHECKBOX Sustitucioacuten
Boton de Sustitucioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(45) btn1 USER-COMMAND obbVISIBLE LENGTH 12
Boton de programa sustitucioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 38(45) sust USER-COMMAND sustVISIBLE LENGTH 15
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text13POSITION 20PARAMETERS p_val AS CHECKBOX Validacioacuten
Boton de Validacioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(45) ob28 USER-COMMAND ob28VISIBLE LENGTH 12
Boton de programa sustitucioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 38(45) val USER-COMMAND valVISIBLE LENGTH 15
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text11POSITION 20PARAMETERS p_fdex AS CHECKBOX Field-exit
Boton de Field-exit en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) btn2 USER-COMMAND fdexVISIBLE LENGTH 28
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN END OF BLOCK bl02
- DATOS OPCIONALESSELECTION-SCREEN BEGIN OF BLOCK bl03 WITH FRAME TITLE tit3
SELECTION-SCREEN BEGIN OF LINE Boton de ALL en la DYNPROSELECTION-SCREEN PUSHBUTTON 18(60) all USER-COMMAND allVISIBLE LENGTH 1 Boton de DAL en la DYNPROSELECTION-SCREEN PUSHBUTTON 21(60) dal USER-COMMAND dalVISIBLE LENGTH 1SELECTION-SCREEN END OF LINE
SELECTION-SCREEN ULINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text3POSITION 20PARAMETERS p_incl AS CHECKBOX DEFAULT X IncludesSELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text4POSITION 20PARAMETERS p_func AS CHECKBOX DEFAULT X Funciones
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text5POSITION 20PARAMETERS p_submit AS CHECKBOX DEFAULT X SubmitSELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text6POSITION 20PARAMETERS p_nivel(2) TYPE n DEFAULT 04 NivelSELECTION-SCREEN END OF LINE
SELECTION-SCREEN END OF BLOCK bl03
Botoacuten de Marcar todo en el STATUS GUISELECTION-SCREEN FUNCTION KEY 1 Botoacuten de Desmarcar todo en el STATUS GUISELECTION-SCREEN FUNCTION KEY 2 Botoacuten de Breakpoint en el STATUS GUISELECTION-SCREEN FUNCTION KEY 3
----------------------------------------------------------------------- DEFINICIOacuteN DE MACROS-----------------------------------------------------------------------DEFINE icon_create Creo para el botoacuten indicado el icono y los textos correspondientes
call function ICON_CREATEexportingname = amp2text = amp3info = amp4importingresult = amp1exceptionsothers = 0
END-OF-DEFINITION icon_create
----------------------------------------------------------------------- INICIALIZACIOacuteN DE VARIABLES-----------------------------------------------------------------------INITIALIZATION
PERFORM def_text_parameter
PERFORM def_botones
CLEAR ti_gb31tREFRESH ti_gb31t
Obtengo ValidacioacutenSustitucioacutenEventosTextoSELECT INTO TABLE ti_gb31tFROM gb31tWHERE spras EQ sy-langu
----------------------------------------------------------------------- AT SELECTION-SCREEN-----------------------------------------------------------------------
AT SELECTION-SCREEN
CASE sscrfields-ucommWHEN FC01MOVE X TO p_ue p_badi p_bte p_sust p_val p_fdex p_enhWHEN FC02CLEAR p_ue p_badi p_bte p_sust p_val p_fdex p_enhWHEN FC03PERFORM breakpointWHEN EXTPERFORM visualizar_ampliacionWHEN EXT1PERFORM visualizar_proyectoWHEN EXT2PERFORM visualizar_fm_exitWHEN BADIPERFORM visualizar_interfaceWHEN OBBCALL TRANSACTION OBBHWHEN OB28CALL TRANSACTION OB28WHEN SUST OR VALPERFORM visualizar_programaWHEN FDEXSUBMIT rsmodprf AND RETURNWHEN BTE1CALL TRANSACTION FIBFWHEN BTE2PERFORM cargar_bte USING EWHEN BTE3PERFORM cargar_bte USING PWHEN SENHSUBMIT sapmsenh VIA SELECTION-SCREENAND RETURNWHEN CIMPPERFORM visualizar_imp_enhWHEN ALLMOVE X TO p_incl p_func p_submitWHEN DALCLEAR p_incl p_func p_submitWHEN OTHERS Do Nothing ENDCASE
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_prog
PERFORM repid_f4
---------------------------------------------------------------------- INICIO----------------------------------------------------------------------START-OF-SELECTION
GET TIME FIELD w_tini
- CONSISTENCIAS DE LOS PARAMETROSPERFORM consisti_parametros
- INICIALIZA TABLAPERFORM inicializa_tabela
- VERIFICA SI EN EL PROGRAMA EXISTE ALGUN INCLUDE FUNCION O SUBMITPERFORM verifica_include_funcao_submit
- ANALISA LOS INCLUDES Y BUSCA POR USER-EXIT BADIS Y BTEPERFORM busca_user_exit_badi_bte
- ANALISA LOS INCLUDES Y BUSCA LOS FIELD-EXITSPERFORM buscar_field_exit
- OBTENGO LOS EXITs DE LA TRANSACCIOacuteNPERFORM buscar_user_exit
- OBTENGO LAS PUNTOS DE AMPLIACIOacuteNPERFORM buscar_enh
- OBTENGO LAS SUSTITUCIONESPERFORM buscar_sustituciones
- OBTENGO LAS VALIDACIONESPERFORM buscar_validaciones
- CARGO LOS BREAKPOINTSPERFORM cargar_break
- VISUALIZA LAS AMPLIACIONES ENCONTRADASPERFORM exibe_user_exit
---------------------------------------------------------------------- FIN----------------------------------------------------------------------END-OF-SELECTION
amp---------------------------------------------------------------------amp Form BUSCA_USER_EXIT_BADI_BTEamp--------------------------------------------------------------------- Busca EXITs BADIs y BTE en el coacutedigo fuente----------------------------------------------------------------------FORM busca_user_exit_badi_bte
- VERIFICA SI EN LOS INCLUDES SELECIONADOS EXISTEN EXITSLOOP AT ti_includes
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
- BORRA LA TABLA INTERNAREFRESH ti_programa
- REALIZA LECTURA DE INCLUDE ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa
LOOP AT ti_programa
IF p_ue EQ XPERFORM buscar_exitPERFORM busca_enhancementsENDIF
IF p_badi EQ XPERFORM buscar_badiENDIF
IF p_bte EQ XPERFORM buscar_bteENDIF
IF p_enh EQ XPERFORM buscar_punto_ampliacionENDIF
ENDLOOPENDLOOP
ENDFORM BUSCA_USER_EXIT_BADI_BTE
amp---------------------------------------------------------------------amp Form BUSCA_ENHANCEMENTSamp--------------------------------------------------------------------- Busca las llamadas a los USER-EXIT----------------------------------------------------------------------FORM busca_enhancements
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE EN ALGUN ENHANCEMENTSEARCH ti_programa-cf FOR c_enhance- SE ENCONTRO EL ENHANCEMENT Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentarioCLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM BUSCA_ENHANCEMENTS
amp---------------------------------------------------------------------amp Form EXIBE_USER_EXITamp--------------------------------------------------------------------- Muestra los datos----------------------------------------------------------------------FORM exibe_user_exit
PERFORM armar_alv
PERFORM mostrar_listado
ENDFORM EXIBE_USER_EXIT
amp---------------------------------------------------------------------amp Form PROCURA_INCLUDEamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_include
CLEAR vg_palavra
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_include- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN STRUCTURESEARCH ti_programa-cf FOR c_struct
IF sy-subrc IS INITIALEXITENDIF
- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_includeCLEAR vg_palavraENDIFENDIFENDDO- GRABA NOMBRE DEL INCLUDE PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF
ENDIF
ENDFORM PROCURA_INCLUDE
amp---------------------------------------------------------------------amp Form PROCURA_FUNCAOamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_funcao
CLEAR vg_conta_aspavg_palavra
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA FUNCIONSEARCH ti_programa-cf FOR c_funcao_2- SE ENCONTRO UNA FUNCION Y LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DE LA INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_aspaADD 1 TO vg_conta_aspaIF vg_conta_aspa EQ 2EXITENDIFENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_funcao_1CLEAR vg_palavraENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITCLEAR vg_pnameSELECT SINGLE pnameINTO vg_pnameFROM tfdirWHERE funcname EQ vg_palavraIF sy-subrc EQ 0
READ TABLE ti_includes WITH KEY nome = vg_pnameIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_pname TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF
ENDIF
ENDIF
ENDFORM PROCURA_FUNCAO
amp---------------------------------------------------------------------amp Form VERIFICA_INCLUDE_FUNCAO_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM verifica_include_funcao_submit
CHECK p_ue IS NOT INITIAL OR p_badi IS NOT INITIALOR p_bte IS NOT INITIAL OR p_enh IS NOT INITIAL
LOOP AT ti_includes
ADD 1 TO vg_contadorDESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfillMOVE ti_includes-nivel TO vg_nivelADD 1 TO vg_nivel
- BORRA TABLA INTERNAREFRESH ti_programa
- REALIZA LECTURA DE INCLUDEFUNCION ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa
LOOP AT ti_programa
- PROCURA POR INCLUDESIF p_incl EQ c_xPERFORM procura_includeENDIF- PROCURA POR FUNCIONIF p_func EQ c_xPERFORM procura_funcaoENDIF- PROCURA POR SUBMITIF p_submit EQ c_xPERFORM procura_submitENDIF
ENDLOOP
ENDLOOP
ENDFORM VERIFICA_INCLUDE_FUNCAO_SUBMIT
amp---------------------------------------------------------------------amp Form EVITAR_TIME_OUTamp--------------------------------------------------------------------- Evito el TIME OUT visualizando un mensaje----------------------------------------------------------------------FORM evitar_time_out USING p_tfill LIKE sy-tfill
DATAvl_total(10) TYPE n
vl_atual(10) TYPE nl_tout LIKE sy-timlol_time(10) TYPE c
GET TIME FIELD l_tout
l_tout = l_tout - w_tini
MOVEp_tfill TO vl_totalvg_contador TO vl_atual
SHIFT vl_total LEFT DELETING LEADING 0SHIFT vl_atual LEFT DELETING LEADING 0WRITE l_tout TO l_time
CONCATENATE Tpo l_time Total vl_total Actual vl_atualINTO vg_textoSEPARATED BY space
CALL FUNCTION SAPGUI_PROGRESS_INDICATOREXPORTINGtext = vg_texto
ENDFORM EVITAR_TIME_OUT
amp---------------------------------------------------------------------amp Form PROCURA_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_submit
CLEAR vg_conta_espaco vg_palavra vg_ini_contagem
- VERIFICA SI LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_submit- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF vg_ini_contagem EQ c_x AND vg_caracter IS INITIALADD 1 TO vg_conta_espacoENDIF
IF NOT vg_caracter IS INITIALMOVE c_x TO vg_ini_contagemIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRAIF vg_conta_espaco LT 2CONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACION
TRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_submitCLEAR vg_palavraENDIFELSEEXITENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIFENDIF
ENDFORM PROCURA_SUBMIT
amp---------------------------------------------------------------------amp Form CONSISTI_PARAMETROSamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM consisti_parametros
IF p_nivel IS INITIALMOVE 1 TO p_nivelENDIF
IF p_prog IS INITIAL AND p_tcode IS INITIAL- EL NOMBRE DEL PROGRAMA Y EL NOMBRE DE LA TRANSACCION NO PUEDEN SER- NULOS UNO DE ELLOS DEBE SER INFORMADOMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e01STOPENDIF
IF NOT p_prog IS INITIAL AND NOT p_tcode IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME NOMBRE DE PROGRAMA O TRANSACCIONMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e02STOPENDIF
IF p_ue IS INITIAL AND p_badi IS INITIAL AND p_bte IS INITIALAND p_sust IS INITIAL AND p_val IS INITIAL AND p_fdex IS INITIALAND p_enh IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME UN TIPO DE MEJORAMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e03STOPENDIF
ENDFORM CONSISTI_PARAMETROS
amp---------------------------------------------------------------------
amp Form INICIALIZA_TABELAamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM inicializa_tabela
DATAe_tstc TYPE tstcl_tcode TYPE sy-tcode
REFRESH ti_includes
IF NOT p_prog IS INITIAL
MOVE p_prog TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includes
- BUSCO EL PROGRAMAREAD REPORT ti_includes-nome INTO ti_programa
IF sy-subrc EQ 0REFRESH ti_programaELSE- EL PROGRAMA NO EXISTEMESSAGE s893(pz) WITH El programa p_prog no existeSTOPENDIF
ELSEIF NOT p_tcode IS INITIAL
SELECT SINGLE FROM tstcWHERE tcode EQ p_tcode
IF sy-subrc EQ 0
IF tstc-pgmna IS NOT INITIALMOVE tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includesELSE Se trata de una transaccioacuten de paraacutemetros Obtengo la transaccioacuten asociadaCALL FUNCTION RS_TRANSACTION_SINGLE_GETEXPORTINGparameter_tcode = p_tcodeIMPORTINGtcode = l_tcode
SELECT SINGLE INTO e_tstcFROM tstcWHERE tcode EQ l_tcode
IF sy-subrc EQ 0MOVE e_tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivel
APPEND ti_includesELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeENDIFENDIFELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeSTOPENDIFENDIF
ENDFORM INICIALIZA_TABELA
amp---------------------------------------------------------------------amp Form armar_alvamp--------------------------------------------------------------------- Armo el ALV----------------------------------------------------------------------FORM armar_alv
DATAl_repid TYPE sy-repid
MOVE sy-repid TO l_repid
CALL FUNCTION REUSE_ALV_BLOCK_LIST_INITEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMAND
IF p_ue IS NOT INITIALPERFORM construir_catalogo_exitPERFORM definir_layout USING TI_USER_EXITCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGEPERFORM sort TABLES ti_sortUSING TI_USER_EXIT
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_USER_EXITit_events = ti_eventsit_sort = ti_sorti_text = User-exitTABLESt_outtab = ti_user_exitEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
PERFORM construir_catalogo_uexitPERFORM definir_layout USING TI_FINAL
CHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_UEXITPERFORM sort TABLES ti_sortUSING TI_FINAL
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FINALit_events = ti_eventsit_sort = ti_sorti_text = User-exit TxCMODTABLESt_outtab = ti_finalEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_badi IS NOT INITIALPERFORM construir_catalogo_badiPERFORM definir_layout USING TI_BADICHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BADIPERFORM sort TABLES ti_sortUSING TI_BADI
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_BADIit_events = ti_eventsit_sort = ti_sorti_text = BadisTABLESt_outtab = ti_badiEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_bte IS NOT INITIALPERFORM construir_catalogo_btePERFORM definir_layout USING TI_BTECHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BTEPERFORM sort TABLES ti_sortUSING TI_BTE
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layout
it_fieldcat = ti_cati_tabname = TI_BTEit_events = ti_eventsit_sort = ti_sorti_text = BTETABLESt_outtab = ti_bteEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_enh IS NOT INITIALPERFORM construir_catalogo_enhPERFORM definir_layout USING TI_ENHCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHPERFORM sort TABLES ti_sortUSING TI_ENH
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHit_events = ti_eventsit_sort = ti_sorti_text = ENHTABLESt_outtab = ti_enhEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
PERFORM construir_catalogo_enhobjPERFORM definir_layout USING TI_ENHOBJCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHOBJPERFORM sort TABLES ti_sortUSING TI_ENHOBJ
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHOBJit_events = ti_eventsit_sort = ti_sorti_text = ENHOBJTABLESt_outtab = ti_enhobjEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX
PERFORM sort TABLES ti_sortUSING TI_FDEX
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
ENDFORM armar_alv
amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03
CF X c_text_04
ENDFORM construir_catalogo_EXIT
amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic
STATICS l_col_pos LIKE sy-cucol
Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname
CHECK sy-subrc EQ 0
IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF
IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF
wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon
MODIFY pt_cat FROM wa_cat INDEX sy-tabix
ENDFORM asignar_campo_a_catalogo
amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv
CLEAR p_layout
IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X
ENDFORM definir_layout
amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n
REFRESH ti_eventsCLEAR wa_events
ALV Simple Block appendl_type = 2
Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events
Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF
ENDFORM construir_eventos
amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit
ENDFORM top_of_page
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD
ENDFORM TOP_OF_PAGE_UEXIT
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs
ENDFORM TOP_OF_PAGE_FDEX
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs
ENDFORM TOP_OF_PAGE_BADI
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant
CONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs
ENDFORM TOP_OF_PAGE_BTE
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENH
amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any
CLEAR pt_sort wa_sortREFRESH pt_sort
CASE p_tabnameWHEN TI_SUST
wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_VAL
wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_ENHOBJ
wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN OTHERS
IF p_tabname NE TI_FINAL
wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
IF p_tabname NE TI_FDEX
wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
ENDIF
ELSE
wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE
ENDFORM sort
amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado
wa_print-reserve_lines = 2
CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY
EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM mostrar_listado
amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield
DATA l_break TYPE c
Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE
Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL
CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf
ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF 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-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF
WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF
WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF
WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea
ti_bte-breakMOVE X TO l_breakENDIF
WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF
WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF
WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF
WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF
WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf
CALL FUNCTION RS_NAVIGATION_MONITORENDIF
WHEN TI_CIMP Customer implementation
CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X
ENDFORM user_command
amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM visualizar_linea
amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0
CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM buscar_exit
amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi
DATAl_subrc LIKE sy-subrc
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF
IF l_subrc EQ 0CLEAR ti_badi
- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF
ENDFORM buscar_badi
amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform
CHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
ENDFORM buscar_bte
amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4
CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS
cancel = 1wrong_type = 2OTHERS = 3
ENDFORM repid_f4
amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf
DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
SEARCH p_cf FOR c_type_ref
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
SPLIT p_cf+sy-fdpos(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
READ TABLE lt_cf INDEX 4
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
CHECK sy-subrc IS INITIAL
Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten
textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer
CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4
IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF
WHEN OTHERS Do Nothing ENDCASE
ENDFORM visualizar_badi
amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf
DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
CLEAR d010inc modsap modact
Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid
IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF
SEARCH p_cf FOR c_enhance
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
MOVE p_cf+sy-fdpos(l_cf) TO l_linea
SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3
TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS
Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _
Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit
CHECK sy-subrc IS INITIAL
Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM
modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3
ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname
CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ENDIF
ENDFORM visualizar_exit
amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit
DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo
DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe
DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE
CHECK p_fdex IS NOT INITIAL
CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe
MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex
IF p_prog IS NOT INITIAL
MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF
Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog
LOOP AT lt_d020s
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
REFRESH lt_d021s
Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4
Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X
SEARCH lt_d021s-fnam FOR -
IF sy-subrc IS INITIAL
MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum
Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname
APPEND lt_campo
ENDIF
ENDLOOPENDLOOP
CHECK lt_campo[] IS NOT INITIAL
SORT lt_campo BY repid dnum tabname fieldname
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
vg_ini_contagem TYPE c INDICA QUE DEBE SER INICIADO EL CONTADORvg_conta_espaco TYPE n TOTAL DE ESPACIOS ( MAacuteXIMO 2 )
---------------------------------------------------------------------- DEFINICION DE Estructuras y tablas para ALV (FM)----------------------------------------------------------------------DATAwa_cat TYPE slis_fieldcat_alv WA cataacutelogoti_cat TYPE slis_t_fieldcat_alv TI cataacutelogowa_layout TYPE slis_layout_alv WA opciones listati_header TYPE slis_t_listheader TI cabecera listawa_header TYPE slis_listheader WA cabecera listawa_events TYPE slis_alv_event WA eventos listati_events TYPE slis_t_event TI eventos listawa_sort TYPE slis_sortinfo_alv WA sortti_sort TYPE slis_t_sortinfo_alv TI sortwa_print TYPE slis_print_alv WA print
---------------------------------------------------------------------- PARAMETROS----------------------------------------------------------------------
- DATOS OBLIGATORIOSSELECTION-SCREEN BEGIN OF BLOCK bl01 WITH FRAME TITLE tit1
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text2POSITION 20PARAMETERS p_tcode LIKE tstc-tcode TransaccioacutenSELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text1POSITION 20PARAMETERS p_prog LIKE sy-repid ProgramaSELECTION-SCREEN END OF LINE
SELECTION-SCREEN END OF BLOCK bl01
SELECTION-SCREEN BEGIN OF BLOCK bl02 WITH FRAME TITLE tit2 SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text7POSITION 20PARAMETERS p_ue AS CHECKBOX User-exit
Boton de Exits en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(45) btn USER-COMMAND extVISIBLE LENGTH 12
Boton de Proyectos de Exits en la DYNPROSELECTION-SCREEN PUSHBUTTON 38(45) ext1 USER-COMMAND ext1VISIBLE LENGTH 12
Boton de User-Exits en la DYNPROSELECTION-SCREEN PUSHBUTTON 51(45) ext2 USER-COMMAND ext2VISIBLE LENGTH 12
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text8POSITION 20PARAMETERS p_badi AS CHECKBOX Badis Boton de Interface en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) badi USER-COMMAND badiVISIBLE LENGTH 25SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINEPOSITION 25PARAMETERS p_handl AS CHECKBOX DEFAULT XCL_EXITHANDLER=gtGET_INSTANCESELECTION-SCREEN COMMENT 30(40) text12SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text9POSITION 20PARAMETERS p_bte AS CHECKBOX Bte Boton de Tx FIBF en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) bte1 USER-COMMAND bte1VISIBLE LENGTH 1 Boton de Tx Evento en la DYNPROSELECTION-SCREEN PUSHBUTTON 29(60) bte2 USER-COMMAND bte2VISIBLE LENGTH 10 Boton de Tx Proceso en la DYNPROSELECTION-SCREEN PUSHBUTTON 40(60) bte3 USER-COMMAND bte3VISIBLE LENGTH 10
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(19) text14POSITION 20PARAMETERS p_enh AS CHECKBOX Punto de ampliacioacuten
Boton de Tx SENH en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) senh USER-COMMAND senhVISIBLE LENGTH 1
Boton de Customer Implementation en la DYNPROSELECTION-SCREEN PUSHBUTTON 29(60) cimp USER-COMMAND cimpVISIBLE LENGTH 24
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text10POSITION 20PARAMETERS p_sust AS CHECKBOX Sustitucioacuten
Boton de Sustitucioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(45) btn1 USER-COMMAND obbVISIBLE LENGTH 12
Boton de programa sustitucioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 38(45) sust USER-COMMAND sustVISIBLE LENGTH 15
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text13POSITION 20PARAMETERS p_val AS CHECKBOX Validacioacuten
Boton de Validacioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(45) ob28 USER-COMMAND ob28VISIBLE LENGTH 12
Boton de programa sustitucioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 38(45) val USER-COMMAND valVISIBLE LENGTH 15
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text11POSITION 20PARAMETERS p_fdex AS CHECKBOX Field-exit
Boton de Field-exit en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) btn2 USER-COMMAND fdexVISIBLE LENGTH 28
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN END OF BLOCK bl02
- DATOS OPCIONALESSELECTION-SCREEN BEGIN OF BLOCK bl03 WITH FRAME TITLE tit3
SELECTION-SCREEN BEGIN OF LINE Boton de ALL en la DYNPROSELECTION-SCREEN PUSHBUTTON 18(60) all USER-COMMAND allVISIBLE LENGTH 1 Boton de DAL en la DYNPROSELECTION-SCREEN PUSHBUTTON 21(60) dal USER-COMMAND dalVISIBLE LENGTH 1SELECTION-SCREEN END OF LINE
SELECTION-SCREEN ULINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text3POSITION 20PARAMETERS p_incl AS CHECKBOX DEFAULT X IncludesSELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text4POSITION 20PARAMETERS p_func AS CHECKBOX DEFAULT X Funciones
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text5POSITION 20PARAMETERS p_submit AS CHECKBOX DEFAULT X SubmitSELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text6POSITION 20PARAMETERS p_nivel(2) TYPE n DEFAULT 04 NivelSELECTION-SCREEN END OF LINE
SELECTION-SCREEN END OF BLOCK bl03
Botoacuten de Marcar todo en el STATUS GUISELECTION-SCREEN FUNCTION KEY 1 Botoacuten de Desmarcar todo en el STATUS GUISELECTION-SCREEN FUNCTION KEY 2 Botoacuten de Breakpoint en el STATUS GUISELECTION-SCREEN FUNCTION KEY 3
----------------------------------------------------------------------- DEFINICIOacuteN DE MACROS-----------------------------------------------------------------------DEFINE icon_create Creo para el botoacuten indicado el icono y los textos correspondientes
call function ICON_CREATEexportingname = amp2text = amp3info = amp4importingresult = amp1exceptionsothers = 0
END-OF-DEFINITION icon_create
----------------------------------------------------------------------- INICIALIZACIOacuteN DE VARIABLES-----------------------------------------------------------------------INITIALIZATION
PERFORM def_text_parameter
PERFORM def_botones
CLEAR ti_gb31tREFRESH ti_gb31t
Obtengo ValidacioacutenSustitucioacutenEventosTextoSELECT INTO TABLE ti_gb31tFROM gb31tWHERE spras EQ sy-langu
----------------------------------------------------------------------- AT SELECTION-SCREEN-----------------------------------------------------------------------
AT SELECTION-SCREEN
CASE sscrfields-ucommWHEN FC01MOVE X TO p_ue p_badi p_bte p_sust p_val p_fdex p_enhWHEN FC02CLEAR p_ue p_badi p_bte p_sust p_val p_fdex p_enhWHEN FC03PERFORM breakpointWHEN EXTPERFORM visualizar_ampliacionWHEN EXT1PERFORM visualizar_proyectoWHEN EXT2PERFORM visualizar_fm_exitWHEN BADIPERFORM visualizar_interfaceWHEN OBBCALL TRANSACTION OBBHWHEN OB28CALL TRANSACTION OB28WHEN SUST OR VALPERFORM visualizar_programaWHEN FDEXSUBMIT rsmodprf AND RETURNWHEN BTE1CALL TRANSACTION FIBFWHEN BTE2PERFORM cargar_bte USING EWHEN BTE3PERFORM cargar_bte USING PWHEN SENHSUBMIT sapmsenh VIA SELECTION-SCREENAND RETURNWHEN CIMPPERFORM visualizar_imp_enhWHEN ALLMOVE X TO p_incl p_func p_submitWHEN DALCLEAR p_incl p_func p_submitWHEN OTHERS Do Nothing ENDCASE
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_prog
PERFORM repid_f4
---------------------------------------------------------------------- INICIO----------------------------------------------------------------------START-OF-SELECTION
GET TIME FIELD w_tini
- CONSISTENCIAS DE LOS PARAMETROSPERFORM consisti_parametros
- INICIALIZA TABLAPERFORM inicializa_tabela
- VERIFICA SI EN EL PROGRAMA EXISTE ALGUN INCLUDE FUNCION O SUBMITPERFORM verifica_include_funcao_submit
- ANALISA LOS INCLUDES Y BUSCA POR USER-EXIT BADIS Y BTEPERFORM busca_user_exit_badi_bte
- ANALISA LOS INCLUDES Y BUSCA LOS FIELD-EXITSPERFORM buscar_field_exit
- OBTENGO LOS EXITs DE LA TRANSACCIOacuteNPERFORM buscar_user_exit
- OBTENGO LAS PUNTOS DE AMPLIACIOacuteNPERFORM buscar_enh
- OBTENGO LAS SUSTITUCIONESPERFORM buscar_sustituciones
- OBTENGO LAS VALIDACIONESPERFORM buscar_validaciones
- CARGO LOS BREAKPOINTSPERFORM cargar_break
- VISUALIZA LAS AMPLIACIONES ENCONTRADASPERFORM exibe_user_exit
---------------------------------------------------------------------- FIN----------------------------------------------------------------------END-OF-SELECTION
amp---------------------------------------------------------------------amp Form BUSCA_USER_EXIT_BADI_BTEamp--------------------------------------------------------------------- Busca EXITs BADIs y BTE en el coacutedigo fuente----------------------------------------------------------------------FORM busca_user_exit_badi_bte
- VERIFICA SI EN LOS INCLUDES SELECIONADOS EXISTEN EXITSLOOP AT ti_includes
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
- BORRA LA TABLA INTERNAREFRESH ti_programa
- REALIZA LECTURA DE INCLUDE ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa
LOOP AT ti_programa
IF p_ue EQ XPERFORM buscar_exitPERFORM busca_enhancementsENDIF
IF p_badi EQ XPERFORM buscar_badiENDIF
IF p_bte EQ XPERFORM buscar_bteENDIF
IF p_enh EQ XPERFORM buscar_punto_ampliacionENDIF
ENDLOOPENDLOOP
ENDFORM BUSCA_USER_EXIT_BADI_BTE
amp---------------------------------------------------------------------amp Form BUSCA_ENHANCEMENTSamp--------------------------------------------------------------------- Busca las llamadas a los USER-EXIT----------------------------------------------------------------------FORM busca_enhancements
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE EN ALGUN ENHANCEMENTSEARCH ti_programa-cf FOR c_enhance- SE ENCONTRO EL ENHANCEMENT Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentarioCLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM BUSCA_ENHANCEMENTS
amp---------------------------------------------------------------------amp Form EXIBE_USER_EXITamp--------------------------------------------------------------------- Muestra los datos----------------------------------------------------------------------FORM exibe_user_exit
PERFORM armar_alv
PERFORM mostrar_listado
ENDFORM EXIBE_USER_EXIT
amp---------------------------------------------------------------------amp Form PROCURA_INCLUDEamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_include
CLEAR vg_palavra
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_include- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN STRUCTURESEARCH ti_programa-cf FOR c_struct
IF sy-subrc IS INITIALEXITENDIF
- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_includeCLEAR vg_palavraENDIFENDIFENDDO- GRABA NOMBRE DEL INCLUDE PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF
ENDIF
ENDFORM PROCURA_INCLUDE
amp---------------------------------------------------------------------amp Form PROCURA_FUNCAOamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_funcao
CLEAR vg_conta_aspavg_palavra
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA FUNCIONSEARCH ti_programa-cf FOR c_funcao_2- SE ENCONTRO UNA FUNCION Y LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DE LA INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_aspaADD 1 TO vg_conta_aspaIF vg_conta_aspa EQ 2EXITENDIFENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_funcao_1CLEAR vg_palavraENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITCLEAR vg_pnameSELECT SINGLE pnameINTO vg_pnameFROM tfdirWHERE funcname EQ vg_palavraIF sy-subrc EQ 0
READ TABLE ti_includes WITH KEY nome = vg_pnameIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_pname TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF
ENDIF
ENDIF
ENDFORM PROCURA_FUNCAO
amp---------------------------------------------------------------------amp Form VERIFICA_INCLUDE_FUNCAO_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM verifica_include_funcao_submit
CHECK p_ue IS NOT INITIAL OR p_badi IS NOT INITIALOR p_bte IS NOT INITIAL OR p_enh IS NOT INITIAL
LOOP AT ti_includes
ADD 1 TO vg_contadorDESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfillMOVE ti_includes-nivel TO vg_nivelADD 1 TO vg_nivel
- BORRA TABLA INTERNAREFRESH ti_programa
- REALIZA LECTURA DE INCLUDEFUNCION ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa
LOOP AT ti_programa
- PROCURA POR INCLUDESIF p_incl EQ c_xPERFORM procura_includeENDIF- PROCURA POR FUNCIONIF p_func EQ c_xPERFORM procura_funcaoENDIF- PROCURA POR SUBMITIF p_submit EQ c_xPERFORM procura_submitENDIF
ENDLOOP
ENDLOOP
ENDFORM VERIFICA_INCLUDE_FUNCAO_SUBMIT
amp---------------------------------------------------------------------amp Form EVITAR_TIME_OUTamp--------------------------------------------------------------------- Evito el TIME OUT visualizando un mensaje----------------------------------------------------------------------FORM evitar_time_out USING p_tfill LIKE sy-tfill
DATAvl_total(10) TYPE n
vl_atual(10) TYPE nl_tout LIKE sy-timlol_time(10) TYPE c
GET TIME FIELD l_tout
l_tout = l_tout - w_tini
MOVEp_tfill TO vl_totalvg_contador TO vl_atual
SHIFT vl_total LEFT DELETING LEADING 0SHIFT vl_atual LEFT DELETING LEADING 0WRITE l_tout TO l_time
CONCATENATE Tpo l_time Total vl_total Actual vl_atualINTO vg_textoSEPARATED BY space
CALL FUNCTION SAPGUI_PROGRESS_INDICATOREXPORTINGtext = vg_texto
ENDFORM EVITAR_TIME_OUT
amp---------------------------------------------------------------------amp Form PROCURA_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_submit
CLEAR vg_conta_espaco vg_palavra vg_ini_contagem
- VERIFICA SI LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_submit- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF vg_ini_contagem EQ c_x AND vg_caracter IS INITIALADD 1 TO vg_conta_espacoENDIF
IF NOT vg_caracter IS INITIALMOVE c_x TO vg_ini_contagemIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRAIF vg_conta_espaco LT 2CONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACION
TRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_submitCLEAR vg_palavraENDIFELSEEXITENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIFENDIF
ENDFORM PROCURA_SUBMIT
amp---------------------------------------------------------------------amp Form CONSISTI_PARAMETROSamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM consisti_parametros
IF p_nivel IS INITIALMOVE 1 TO p_nivelENDIF
IF p_prog IS INITIAL AND p_tcode IS INITIAL- EL NOMBRE DEL PROGRAMA Y EL NOMBRE DE LA TRANSACCION NO PUEDEN SER- NULOS UNO DE ELLOS DEBE SER INFORMADOMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e01STOPENDIF
IF NOT p_prog IS INITIAL AND NOT p_tcode IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME NOMBRE DE PROGRAMA O TRANSACCIONMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e02STOPENDIF
IF p_ue IS INITIAL AND p_badi IS INITIAL AND p_bte IS INITIALAND p_sust IS INITIAL AND p_val IS INITIAL AND p_fdex IS INITIALAND p_enh IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME UN TIPO DE MEJORAMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e03STOPENDIF
ENDFORM CONSISTI_PARAMETROS
amp---------------------------------------------------------------------
amp Form INICIALIZA_TABELAamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM inicializa_tabela
DATAe_tstc TYPE tstcl_tcode TYPE sy-tcode
REFRESH ti_includes
IF NOT p_prog IS INITIAL
MOVE p_prog TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includes
- BUSCO EL PROGRAMAREAD REPORT ti_includes-nome INTO ti_programa
IF sy-subrc EQ 0REFRESH ti_programaELSE- EL PROGRAMA NO EXISTEMESSAGE s893(pz) WITH El programa p_prog no existeSTOPENDIF
ELSEIF NOT p_tcode IS INITIAL
SELECT SINGLE FROM tstcWHERE tcode EQ p_tcode
IF sy-subrc EQ 0
IF tstc-pgmna IS NOT INITIALMOVE tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includesELSE Se trata de una transaccioacuten de paraacutemetros Obtengo la transaccioacuten asociadaCALL FUNCTION RS_TRANSACTION_SINGLE_GETEXPORTINGparameter_tcode = p_tcodeIMPORTINGtcode = l_tcode
SELECT SINGLE INTO e_tstcFROM tstcWHERE tcode EQ l_tcode
IF sy-subrc EQ 0MOVE e_tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivel
APPEND ti_includesELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeENDIFENDIFELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeSTOPENDIFENDIF
ENDFORM INICIALIZA_TABELA
amp---------------------------------------------------------------------amp Form armar_alvamp--------------------------------------------------------------------- Armo el ALV----------------------------------------------------------------------FORM armar_alv
DATAl_repid TYPE sy-repid
MOVE sy-repid TO l_repid
CALL FUNCTION REUSE_ALV_BLOCK_LIST_INITEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMAND
IF p_ue IS NOT INITIALPERFORM construir_catalogo_exitPERFORM definir_layout USING TI_USER_EXITCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGEPERFORM sort TABLES ti_sortUSING TI_USER_EXIT
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_USER_EXITit_events = ti_eventsit_sort = ti_sorti_text = User-exitTABLESt_outtab = ti_user_exitEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
PERFORM construir_catalogo_uexitPERFORM definir_layout USING TI_FINAL
CHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_UEXITPERFORM sort TABLES ti_sortUSING TI_FINAL
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FINALit_events = ti_eventsit_sort = ti_sorti_text = User-exit TxCMODTABLESt_outtab = ti_finalEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_badi IS NOT INITIALPERFORM construir_catalogo_badiPERFORM definir_layout USING TI_BADICHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BADIPERFORM sort TABLES ti_sortUSING TI_BADI
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_BADIit_events = ti_eventsit_sort = ti_sorti_text = BadisTABLESt_outtab = ti_badiEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_bte IS NOT INITIALPERFORM construir_catalogo_btePERFORM definir_layout USING TI_BTECHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BTEPERFORM sort TABLES ti_sortUSING TI_BTE
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layout
it_fieldcat = ti_cati_tabname = TI_BTEit_events = ti_eventsit_sort = ti_sorti_text = BTETABLESt_outtab = ti_bteEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_enh IS NOT INITIALPERFORM construir_catalogo_enhPERFORM definir_layout USING TI_ENHCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHPERFORM sort TABLES ti_sortUSING TI_ENH
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHit_events = ti_eventsit_sort = ti_sorti_text = ENHTABLESt_outtab = ti_enhEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
PERFORM construir_catalogo_enhobjPERFORM definir_layout USING TI_ENHOBJCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHOBJPERFORM sort TABLES ti_sortUSING TI_ENHOBJ
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHOBJit_events = ti_eventsit_sort = ti_sorti_text = ENHOBJTABLESt_outtab = ti_enhobjEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX
PERFORM sort TABLES ti_sortUSING TI_FDEX
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
ENDFORM armar_alv
amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03
CF X c_text_04
ENDFORM construir_catalogo_EXIT
amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic
STATICS l_col_pos LIKE sy-cucol
Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname
CHECK sy-subrc EQ 0
IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF
IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF
wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon
MODIFY pt_cat FROM wa_cat INDEX sy-tabix
ENDFORM asignar_campo_a_catalogo
amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv
CLEAR p_layout
IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X
ENDFORM definir_layout
amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n
REFRESH ti_eventsCLEAR wa_events
ALV Simple Block appendl_type = 2
Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events
Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF
ENDFORM construir_eventos
amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit
ENDFORM top_of_page
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD
ENDFORM TOP_OF_PAGE_UEXIT
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs
ENDFORM TOP_OF_PAGE_FDEX
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs
ENDFORM TOP_OF_PAGE_BADI
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant
CONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs
ENDFORM TOP_OF_PAGE_BTE
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENH
amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any
CLEAR pt_sort wa_sortREFRESH pt_sort
CASE p_tabnameWHEN TI_SUST
wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_VAL
wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_ENHOBJ
wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN OTHERS
IF p_tabname NE TI_FINAL
wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
IF p_tabname NE TI_FDEX
wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
ENDIF
ELSE
wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE
ENDFORM sort
amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado
wa_print-reserve_lines = 2
CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY
EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM mostrar_listado
amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield
DATA l_break TYPE c
Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE
Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL
CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf
ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF 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-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF
WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF
WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF
WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea
ti_bte-breakMOVE X TO l_breakENDIF
WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF
WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF
WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF
WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF
WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf
CALL FUNCTION RS_NAVIGATION_MONITORENDIF
WHEN TI_CIMP Customer implementation
CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X
ENDFORM user_command
amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM visualizar_linea
amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0
CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM buscar_exit
amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi
DATAl_subrc LIKE sy-subrc
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF
IF l_subrc EQ 0CLEAR ti_badi
- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF
ENDFORM buscar_badi
amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform
CHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
ENDFORM buscar_bte
amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4
CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS
cancel = 1wrong_type = 2OTHERS = 3
ENDFORM repid_f4
amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf
DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
SEARCH p_cf FOR c_type_ref
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
SPLIT p_cf+sy-fdpos(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
READ TABLE lt_cf INDEX 4
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
CHECK sy-subrc IS INITIAL
Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten
textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer
CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4
IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF
WHEN OTHERS Do Nothing ENDCASE
ENDFORM visualizar_badi
amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf
DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
CLEAR d010inc modsap modact
Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid
IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF
SEARCH p_cf FOR c_enhance
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
MOVE p_cf+sy-fdpos(l_cf) TO l_linea
SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3
TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS
Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _
Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit
CHECK sy-subrc IS INITIAL
Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM
modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3
ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname
CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ENDIF
ENDFORM visualizar_exit
amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit
DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo
DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe
DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE
CHECK p_fdex IS NOT INITIAL
CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe
MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex
IF p_prog IS NOT INITIAL
MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF
Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog
LOOP AT lt_d020s
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
REFRESH lt_d021s
Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4
Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X
SEARCH lt_d021s-fnam FOR -
IF sy-subrc IS INITIAL
MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum
Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname
APPEND lt_campo
ENDIF
ENDLOOPENDLOOP
CHECK lt_campo[] IS NOT INITIAL
SORT lt_campo BY repid dnum tabname fieldname
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text8POSITION 20PARAMETERS p_badi AS CHECKBOX Badis Boton de Interface en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) badi USER-COMMAND badiVISIBLE LENGTH 25SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINEPOSITION 25PARAMETERS p_handl AS CHECKBOX DEFAULT XCL_EXITHANDLER=gtGET_INSTANCESELECTION-SCREEN COMMENT 30(40) text12SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text9POSITION 20PARAMETERS p_bte AS CHECKBOX Bte Boton de Tx FIBF en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) bte1 USER-COMMAND bte1VISIBLE LENGTH 1 Boton de Tx Evento en la DYNPROSELECTION-SCREEN PUSHBUTTON 29(60) bte2 USER-COMMAND bte2VISIBLE LENGTH 10 Boton de Tx Proceso en la DYNPROSELECTION-SCREEN PUSHBUTTON 40(60) bte3 USER-COMMAND bte3VISIBLE LENGTH 10
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(19) text14POSITION 20PARAMETERS p_enh AS CHECKBOX Punto de ampliacioacuten
Boton de Tx SENH en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) senh USER-COMMAND senhVISIBLE LENGTH 1
Boton de Customer Implementation en la DYNPROSELECTION-SCREEN PUSHBUTTON 29(60) cimp USER-COMMAND cimpVISIBLE LENGTH 24
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text10POSITION 20PARAMETERS p_sust AS CHECKBOX Sustitucioacuten
Boton de Sustitucioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(45) btn1 USER-COMMAND obbVISIBLE LENGTH 12
Boton de programa sustitucioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 38(45) sust USER-COMMAND sustVISIBLE LENGTH 15
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text13POSITION 20PARAMETERS p_val AS CHECKBOX Validacioacuten
Boton de Validacioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(45) ob28 USER-COMMAND ob28VISIBLE LENGTH 12
Boton de programa sustitucioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 38(45) val USER-COMMAND valVISIBLE LENGTH 15
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text11POSITION 20PARAMETERS p_fdex AS CHECKBOX Field-exit
Boton de Field-exit en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) btn2 USER-COMMAND fdexVISIBLE LENGTH 28
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN END OF BLOCK bl02
- DATOS OPCIONALESSELECTION-SCREEN BEGIN OF BLOCK bl03 WITH FRAME TITLE tit3
SELECTION-SCREEN BEGIN OF LINE Boton de ALL en la DYNPROSELECTION-SCREEN PUSHBUTTON 18(60) all USER-COMMAND allVISIBLE LENGTH 1 Boton de DAL en la DYNPROSELECTION-SCREEN PUSHBUTTON 21(60) dal USER-COMMAND dalVISIBLE LENGTH 1SELECTION-SCREEN END OF LINE
SELECTION-SCREEN ULINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text3POSITION 20PARAMETERS p_incl AS CHECKBOX DEFAULT X IncludesSELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text4POSITION 20PARAMETERS p_func AS CHECKBOX DEFAULT X Funciones
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text5POSITION 20PARAMETERS p_submit AS CHECKBOX DEFAULT X SubmitSELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text6POSITION 20PARAMETERS p_nivel(2) TYPE n DEFAULT 04 NivelSELECTION-SCREEN END OF LINE
SELECTION-SCREEN END OF BLOCK bl03
Botoacuten de Marcar todo en el STATUS GUISELECTION-SCREEN FUNCTION KEY 1 Botoacuten de Desmarcar todo en el STATUS GUISELECTION-SCREEN FUNCTION KEY 2 Botoacuten de Breakpoint en el STATUS GUISELECTION-SCREEN FUNCTION KEY 3
----------------------------------------------------------------------- DEFINICIOacuteN DE MACROS-----------------------------------------------------------------------DEFINE icon_create Creo para el botoacuten indicado el icono y los textos correspondientes
call function ICON_CREATEexportingname = amp2text = amp3info = amp4importingresult = amp1exceptionsothers = 0
END-OF-DEFINITION icon_create
----------------------------------------------------------------------- INICIALIZACIOacuteN DE VARIABLES-----------------------------------------------------------------------INITIALIZATION
PERFORM def_text_parameter
PERFORM def_botones
CLEAR ti_gb31tREFRESH ti_gb31t
Obtengo ValidacioacutenSustitucioacutenEventosTextoSELECT INTO TABLE ti_gb31tFROM gb31tWHERE spras EQ sy-langu
----------------------------------------------------------------------- AT SELECTION-SCREEN-----------------------------------------------------------------------
AT SELECTION-SCREEN
CASE sscrfields-ucommWHEN FC01MOVE X TO p_ue p_badi p_bte p_sust p_val p_fdex p_enhWHEN FC02CLEAR p_ue p_badi p_bte p_sust p_val p_fdex p_enhWHEN FC03PERFORM breakpointWHEN EXTPERFORM visualizar_ampliacionWHEN EXT1PERFORM visualizar_proyectoWHEN EXT2PERFORM visualizar_fm_exitWHEN BADIPERFORM visualizar_interfaceWHEN OBBCALL TRANSACTION OBBHWHEN OB28CALL TRANSACTION OB28WHEN SUST OR VALPERFORM visualizar_programaWHEN FDEXSUBMIT rsmodprf AND RETURNWHEN BTE1CALL TRANSACTION FIBFWHEN BTE2PERFORM cargar_bte USING EWHEN BTE3PERFORM cargar_bte USING PWHEN SENHSUBMIT sapmsenh VIA SELECTION-SCREENAND RETURNWHEN CIMPPERFORM visualizar_imp_enhWHEN ALLMOVE X TO p_incl p_func p_submitWHEN DALCLEAR p_incl p_func p_submitWHEN OTHERS Do Nothing ENDCASE
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_prog
PERFORM repid_f4
---------------------------------------------------------------------- INICIO----------------------------------------------------------------------START-OF-SELECTION
GET TIME FIELD w_tini
- CONSISTENCIAS DE LOS PARAMETROSPERFORM consisti_parametros
- INICIALIZA TABLAPERFORM inicializa_tabela
- VERIFICA SI EN EL PROGRAMA EXISTE ALGUN INCLUDE FUNCION O SUBMITPERFORM verifica_include_funcao_submit
- ANALISA LOS INCLUDES Y BUSCA POR USER-EXIT BADIS Y BTEPERFORM busca_user_exit_badi_bte
- ANALISA LOS INCLUDES Y BUSCA LOS FIELD-EXITSPERFORM buscar_field_exit
- OBTENGO LOS EXITs DE LA TRANSACCIOacuteNPERFORM buscar_user_exit
- OBTENGO LAS PUNTOS DE AMPLIACIOacuteNPERFORM buscar_enh
- OBTENGO LAS SUSTITUCIONESPERFORM buscar_sustituciones
- OBTENGO LAS VALIDACIONESPERFORM buscar_validaciones
- CARGO LOS BREAKPOINTSPERFORM cargar_break
- VISUALIZA LAS AMPLIACIONES ENCONTRADASPERFORM exibe_user_exit
---------------------------------------------------------------------- FIN----------------------------------------------------------------------END-OF-SELECTION
amp---------------------------------------------------------------------amp Form BUSCA_USER_EXIT_BADI_BTEamp--------------------------------------------------------------------- Busca EXITs BADIs y BTE en el coacutedigo fuente----------------------------------------------------------------------FORM busca_user_exit_badi_bte
- VERIFICA SI EN LOS INCLUDES SELECIONADOS EXISTEN EXITSLOOP AT ti_includes
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
- BORRA LA TABLA INTERNAREFRESH ti_programa
- REALIZA LECTURA DE INCLUDE ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa
LOOP AT ti_programa
IF p_ue EQ XPERFORM buscar_exitPERFORM busca_enhancementsENDIF
IF p_badi EQ XPERFORM buscar_badiENDIF
IF p_bte EQ XPERFORM buscar_bteENDIF
IF p_enh EQ XPERFORM buscar_punto_ampliacionENDIF
ENDLOOPENDLOOP
ENDFORM BUSCA_USER_EXIT_BADI_BTE
amp---------------------------------------------------------------------amp Form BUSCA_ENHANCEMENTSamp--------------------------------------------------------------------- Busca las llamadas a los USER-EXIT----------------------------------------------------------------------FORM busca_enhancements
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE EN ALGUN ENHANCEMENTSEARCH ti_programa-cf FOR c_enhance- SE ENCONTRO EL ENHANCEMENT Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentarioCLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM BUSCA_ENHANCEMENTS
amp---------------------------------------------------------------------amp Form EXIBE_USER_EXITamp--------------------------------------------------------------------- Muestra los datos----------------------------------------------------------------------FORM exibe_user_exit
PERFORM armar_alv
PERFORM mostrar_listado
ENDFORM EXIBE_USER_EXIT
amp---------------------------------------------------------------------amp Form PROCURA_INCLUDEamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_include
CLEAR vg_palavra
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_include- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN STRUCTURESEARCH ti_programa-cf FOR c_struct
IF sy-subrc IS INITIALEXITENDIF
- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_includeCLEAR vg_palavraENDIFENDIFENDDO- GRABA NOMBRE DEL INCLUDE PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF
ENDIF
ENDFORM PROCURA_INCLUDE
amp---------------------------------------------------------------------amp Form PROCURA_FUNCAOamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_funcao
CLEAR vg_conta_aspavg_palavra
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA FUNCIONSEARCH ti_programa-cf FOR c_funcao_2- SE ENCONTRO UNA FUNCION Y LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DE LA INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_aspaADD 1 TO vg_conta_aspaIF vg_conta_aspa EQ 2EXITENDIFENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_funcao_1CLEAR vg_palavraENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITCLEAR vg_pnameSELECT SINGLE pnameINTO vg_pnameFROM tfdirWHERE funcname EQ vg_palavraIF sy-subrc EQ 0
READ TABLE ti_includes WITH KEY nome = vg_pnameIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_pname TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF
ENDIF
ENDIF
ENDFORM PROCURA_FUNCAO
amp---------------------------------------------------------------------amp Form VERIFICA_INCLUDE_FUNCAO_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM verifica_include_funcao_submit
CHECK p_ue IS NOT INITIAL OR p_badi IS NOT INITIALOR p_bte IS NOT INITIAL OR p_enh IS NOT INITIAL
LOOP AT ti_includes
ADD 1 TO vg_contadorDESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfillMOVE ti_includes-nivel TO vg_nivelADD 1 TO vg_nivel
- BORRA TABLA INTERNAREFRESH ti_programa
- REALIZA LECTURA DE INCLUDEFUNCION ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa
LOOP AT ti_programa
- PROCURA POR INCLUDESIF p_incl EQ c_xPERFORM procura_includeENDIF- PROCURA POR FUNCIONIF p_func EQ c_xPERFORM procura_funcaoENDIF- PROCURA POR SUBMITIF p_submit EQ c_xPERFORM procura_submitENDIF
ENDLOOP
ENDLOOP
ENDFORM VERIFICA_INCLUDE_FUNCAO_SUBMIT
amp---------------------------------------------------------------------amp Form EVITAR_TIME_OUTamp--------------------------------------------------------------------- Evito el TIME OUT visualizando un mensaje----------------------------------------------------------------------FORM evitar_time_out USING p_tfill LIKE sy-tfill
DATAvl_total(10) TYPE n
vl_atual(10) TYPE nl_tout LIKE sy-timlol_time(10) TYPE c
GET TIME FIELD l_tout
l_tout = l_tout - w_tini
MOVEp_tfill TO vl_totalvg_contador TO vl_atual
SHIFT vl_total LEFT DELETING LEADING 0SHIFT vl_atual LEFT DELETING LEADING 0WRITE l_tout TO l_time
CONCATENATE Tpo l_time Total vl_total Actual vl_atualINTO vg_textoSEPARATED BY space
CALL FUNCTION SAPGUI_PROGRESS_INDICATOREXPORTINGtext = vg_texto
ENDFORM EVITAR_TIME_OUT
amp---------------------------------------------------------------------amp Form PROCURA_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_submit
CLEAR vg_conta_espaco vg_palavra vg_ini_contagem
- VERIFICA SI LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_submit- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF vg_ini_contagem EQ c_x AND vg_caracter IS INITIALADD 1 TO vg_conta_espacoENDIF
IF NOT vg_caracter IS INITIALMOVE c_x TO vg_ini_contagemIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRAIF vg_conta_espaco LT 2CONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACION
TRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_submitCLEAR vg_palavraENDIFELSEEXITENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIFENDIF
ENDFORM PROCURA_SUBMIT
amp---------------------------------------------------------------------amp Form CONSISTI_PARAMETROSamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM consisti_parametros
IF p_nivel IS INITIALMOVE 1 TO p_nivelENDIF
IF p_prog IS INITIAL AND p_tcode IS INITIAL- EL NOMBRE DEL PROGRAMA Y EL NOMBRE DE LA TRANSACCION NO PUEDEN SER- NULOS UNO DE ELLOS DEBE SER INFORMADOMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e01STOPENDIF
IF NOT p_prog IS INITIAL AND NOT p_tcode IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME NOMBRE DE PROGRAMA O TRANSACCIONMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e02STOPENDIF
IF p_ue IS INITIAL AND p_badi IS INITIAL AND p_bte IS INITIALAND p_sust IS INITIAL AND p_val IS INITIAL AND p_fdex IS INITIALAND p_enh IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME UN TIPO DE MEJORAMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e03STOPENDIF
ENDFORM CONSISTI_PARAMETROS
amp---------------------------------------------------------------------
amp Form INICIALIZA_TABELAamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM inicializa_tabela
DATAe_tstc TYPE tstcl_tcode TYPE sy-tcode
REFRESH ti_includes
IF NOT p_prog IS INITIAL
MOVE p_prog TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includes
- BUSCO EL PROGRAMAREAD REPORT ti_includes-nome INTO ti_programa
IF sy-subrc EQ 0REFRESH ti_programaELSE- EL PROGRAMA NO EXISTEMESSAGE s893(pz) WITH El programa p_prog no existeSTOPENDIF
ELSEIF NOT p_tcode IS INITIAL
SELECT SINGLE FROM tstcWHERE tcode EQ p_tcode
IF sy-subrc EQ 0
IF tstc-pgmna IS NOT INITIALMOVE tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includesELSE Se trata de una transaccioacuten de paraacutemetros Obtengo la transaccioacuten asociadaCALL FUNCTION RS_TRANSACTION_SINGLE_GETEXPORTINGparameter_tcode = p_tcodeIMPORTINGtcode = l_tcode
SELECT SINGLE INTO e_tstcFROM tstcWHERE tcode EQ l_tcode
IF sy-subrc EQ 0MOVE e_tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivel
APPEND ti_includesELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeENDIFENDIFELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeSTOPENDIFENDIF
ENDFORM INICIALIZA_TABELA
amp---------------------------------------------------------------------amp Form armar_alvamp--------------------------------------------------------------------- Armo el ALV----------------------------------------------------------------------FORM armar_alv
DATAl_repid TYPE sy-repid
MOVE sy-repid TO l_repid
CALL FUNCTION REUSE_ALV_BLOCK_LIST_INITEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMAND
IF p_ue IS NOT INITIALPERFORM construir_catalogo_exitPERFORM definir_layout USING TI_USER_EXITCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGEPERFORM sort TABLES ti_sortUSING TI_USER_EXIT
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_USER_EXITit_events = ti_eventsit_sort = ti_sorti_text = User-exitTABLESt_outtab = ti_user_exitEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
PERFORM construir_catalogo_uexitPERFORM definir_layout USING TI_FINAL
CHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_UEXITPERFORM sort TABLES ti_sortUSING TI_FINAL
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FINALit_events = ti_eventsit_sort = ti_sorti_text = User-exit TxCMODTABLESt_outtab = ti_finalEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_badi IS NOT INITIALPERFORM construir_catalogo_badiPERFORM definir_layout USING TI_BADICHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BADIPERFORM sort TABLES ti_sortUSING TI_BADI
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_BADIit_events = ti_eventsit_sort = ti_sorti_text = BadisTABLESt_outtab = ti_badiEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_bte IS NOT INITIALPERFORM construir_catalogo_btePERFORM definir_layout USING TI_BTECHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BTEPERFORM sort TABLES ti_sortUSING TI_BTE
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layout
it_fieldcat = ti_cati_tabname = TI_BTEit_events = ti_eventsit_sort = ti_sorti_text = BTETABLESt_outtab = ti_bteEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_enh IS NOT INITIALPERFORM construir_catalogo_enhPERFORM definir_layout USING TI_ENHCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHPERFORM sort TABLES ti_sortUSING TI_ENH
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHit_events = ti_eventsit_sort = ti_sorti_text = ENHTABLESt_outtab = ti_enhEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
PERFORM construir_catalogo_enhobjPERFORM definir_layout USING TI_ENHOBJCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHOBJPERFORM sort TABLES ti_sortUSING TI_ENHOBJ
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHOBJit_events = ti_eventsit_sort = ti_sorti_text = ENHOBJTABLESt_outtab = ti_enhobjEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX
PERFORM sort TABLES ti_sortUSING TI_FDEX
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
ENDFORM armar_alv
amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03
CF X c_text_04
ENDFORM construir_catalogo_EXIT
amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic
STATICS l_col_pos LIKE sy-cucol
Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname
CHECK sy-subrc EQ 0
IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF
IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF
wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon
MODIFY pt_cat FROM wa_cat INDEX sy-tabix
ENDFORM asignar_campo_a_catalogo
amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv
CLEAR p_layout
IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X
ENDFORM definir_layout
amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n
REFRESH ti_eventsCLEAR wa_events
ALV Simple Block appendl_type = 2
Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events
Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF
ENDFORM construir_eventos
amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit
ENDFORM top_of_page
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD
ENDFORM TOP_OF_PAGE_UEXIT
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs
ENDFORM TOP_OF_PAGE_FDEX
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs
ENDFORM TOP_OF_PAGE_BADI
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant
CONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs
ENDFORM TOP_OF_PAGE_BTE
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENH
amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any
CLEAR pt_sort wa_sortREFRESH pt_sort
CASE p_tabnameWHEN TI_SUST
wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_VAL
wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_ENHOBJ
wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN OTHERS
IF p_tabname NE TI_FINAL
wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
IF p_tabname NE TI_FDEX
wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
ENDIF
ELSE
wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE
ENDFORM sort
amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado
wa_print-reserve_lines = 2
CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY
EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM mostrar_listado
amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield
DATA l_break TYPE c
Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE
Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL
CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf
ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF 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-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF
WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF
WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF
WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea
ti_bte-breakMOVE X TO l_breakENDIF
WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF
WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF
WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF
WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF
WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf
CALL FUNCTION RS_NAVIGATION_MONITORENDIF
WHEN TI_CIMP Customer implementation
CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X
ENDFORM user_command
amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM visualizar_linea
amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0
CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM buscar_exit
amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi
DATAl_subrc LIKE sy-subrc
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF
IF l_subrc EQ 0CLEAR ti_badi
- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF
ENDFORM buscar_badi
amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform
CHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
ENDFORM buscar_bte
amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4
CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS
cancel = 1wrong_type = 2OTHERS = 3
ENDFORM repid_f4
amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf
DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
SEARCH p_cf FOR c_type_ref
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
SPLIT p_cf+sy-fdpos(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
READ TABLE lt_cf INDEX 4
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
CHECK sy-subrc IS INITIAL
Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten
textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer
CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4
IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF
WHEN OTHERS Do Nothing ENDCASE
ENDFORM visualizar_badi
amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf
DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
CLEAR d010inc modsap modact
Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid
IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF
SEARCH p_cf FOR c_enhance
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
MOVE p_cf+sy-fdpos(l_cf) TO l_linea
SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3
TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS
Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _
Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit
CHECK sy-subrc IS INITIAL
Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM
modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3
ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname
CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ENDIF
ENDFORM visualizar_exit
amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit
DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo
DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe
DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE
CHECK p_fdex IS NOT INITIAL
CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe
MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex
IF p_prog IS NOT INITIAL
MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF
Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog
LOOP AT lt_d020s
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
REFRESH lt_d021s
Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4
Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X
SEARCH lt_d021s-fnam FOR -
IF sy-subrc IS INITIAL
MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum
Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname
APPEND lt_campo
ENDIF
ENDLOOPENDLOOP
CHECK lt_campo[] IS NOT INITIAL
SORT lt_campo BY repid dnum tabname fieldname
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
Boton de programa sustitucioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 38(45) sust USER-COMMAND sustVISIBLE LENGTH 15
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text13POSITION 20PARAMETERS p_val AS CHECKBOX Validacioacuten
Boton de Validacioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(45) ob28 USER-COMMAND ob28VISIBLE LENGTH 12
Boton de programa sustitucioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 38(45) val USER-COMMAND valVISIBLE LENGTH 15
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text11POSITION 20PARAMETERS p_fdex AS CHECKBOX Field-exit
Boton de Field-exit en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) btn2 USER-COMMAND fdexVISIBLE LENGTH 28
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN END OF BLOCK bl02
- DATOS OPCIONALESSELECTION-SCREEN BEGIN OF BLOCK bl03 WITH FRAME TITLE tit3
SELECTION-SCREEN BEGIN OF LINE Boton de ALL en la DYNPROSELECTION-SCREEN PUSHBUTTON 18(60) all USER-COMMAND allVISIBLE LENGTH 1 Boton de DAL en la DYNPROSELECTION-SCREEN PUSHBUTTON 21(60) dal USER-COMMAND dalVISIBLE LENGTH 1SELECTION-SCREEN END OF LINE
SELECTION-SCREEN ULINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text3POSITION 20PARAMETERS p_incl AS CHECKBOX DEFAULT X IncludesSELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text4POSITION 20PARAMETERS p_func AS CHECKBOX DEFAULT X Funciones
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text5POSITION 20PARAMETERS p_submit AS CHECKBOX DEFAULT X SubmitSELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text6POSITION 20PARAMETERS p_nivel(2) TYPE n DEFAULT 04 NivelSELECTION-SCREEN END OF LINE
SELECTION-SCREEN END OF BLOCK bl03
Botoacuten de Marcar todo en el STATUS GUISELECTION-SCREEN FUNCTION KEY 1 Botoacuten de Desmarcar todo en el STATUS GUISELECTION-SCREEN FUNCTION KEY 2 Botoacuten de Breakpoint en el STATUS GUISELECTION-SCREEN FUNCTION KEY 3
----------------------------------------------------------------------- DEFINICIOacuteN DE MACROS-----------------------------------------------------------------------DEFINE icon_create Creo para el botoacuten indicado el icono y los textos correspondientes
call function ICON_CREATEexportingname = amp2text = amp3info = amp4importingresult = amp1exceptionsothers = 0
END-OF-DEFINITION icon_create
----------------------------------------------------------------------- INICIALIZACIOacuteN DE VARIABLES-----------------------------------------------------------------------INITIALIZATION
PERFORM def_text_parameter
PERFORM def_botones
CLEAR ti_gb31tREFRESH ti_gb31t
Obtengo ValidacioacutenSustitucioacutenEventosTextoSELECT INTO TABLE ti_gb31tFROM gb31tWHERE spras EQ sy-langu
----------------------------------------------------------------------- AT SELECTION-SCREEN-----------------------------------------------------------------------
AT SELECTION-SCREEN
CASE sscrfields-ucommWHEN FC01MOVE X TO p_ue p_badi p_bte p_sust p_val p_fdex p_enhWHEN FC02CLEAR p_ue p_badi p_bte p_sust p_val p_fdex p_enhWHEN FC03PERFORM breakpointWHEN EXTPERFORM visualizar_ampliacionWHEN EXT1PERFORM visualizar_proyectoWHEN EXT2PERFORM visualizar_fm_exitWHEN BADIPERFORM visualizar_interfaceWHEN OBBCALL TRANSACTION OBBHWHEN OB28CALL TRANSACTION OB28WHEN SUST OR VALPERFORM visualizar_programaWHEN FDEXSUBMIT rsmodprf AND RETURNWHEN BTE1CALL TRANSACTION FIBFWHEN BTE2PERFORM cargar_bte USING EWHEN BTE3PERFORM cargar_bte USING PWHEN SENHSUBMIT sapmsenh VIA SELECTION-SCREENAND RETURNWHEN CIMPPERFORM visualizar_imp_enhWHEN ALLMOVE X TO p_incl p_func p_submitWHEN DALCLEAR p_incl p_func p_submitWHEN OTHERS Do Nothing ENDCASE
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_prog
PERFORM repid_f4
---------------------------------------------------------------------- INICIO----------------------------------------------------------------------START-OF-SELECTION
GET TIME FIELD w_tini
- CONSISTENCIAS DE LOS PARAMETROSPERFORM consisti_parametros
- INICIALIZA TABLAPERFORM inicializa_tabela
- VERIFICA SI EN EL PROGRAMA EXISTE ALGUN INCLUDE FUNCION O SUBMITPERFORM verifica_include_funcao_submit
- ANALISA LOS INCLUDES Y BUSCA POR USER-EXIT BADIS Y BTEPERFORM busca_user_exit_badi_bte
- ANALISA LOS INCLUDES Y BUSCA LOS FIELD-EXITSPERFORM buscar_field_exit
- OBTENGO LOS EXITs DE LA TRANSACCIOacuteNPERFORM buscar_user_exit
- OBTENGO LAS PUNTOS DE AMPLIACIOacuteNPERFORM buscar_enh
- OBTENGO LAS SUSTITUCIONESPERFORM buscar_sustituciones
- OBTENGO LAS VALIDACIONESPERFORM buscar_validaciones
- CARGO LOS BREAKPOINTSPERFORM cargar_break
- VISUALIZA LAS AMPLIACIONES ENCONTRADASPERFORM exibe_user_exit
---------------------------------------------------------------------- FIN----------------------------------------------------------------------END-OF-SELECTION
amp---------------------------------------------------------------------amp Form BUSCA_USER_EXIT_BADI_BTEamp--------------------------------------------------------------------- Busca EXITs BADIs y BTE en el coacutedigo fuente----------------------------------------------------------------------FORM busca_user_exit_badi_bte
- VERIFICA SI EN LOS INCLUDES SELECIONADOS EXISTEN EXITSLOOP AT ti_includes
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
- BORRA LA TABLA INTERNAREFRESH ti_programa
- REALIZA LECTURA DE INCLUDE ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa
LOOP AT ti_programa
IF p_ue EQ XPERFORM buscar_exitPERFORM busca_enhancementsENDIF
IF p_badi EQ XPERFORM buscar_badiENDIF
IF p_bte EQ XPERFORM buscar_bteENDIF
IF p_enh EQ XPERFORM buscar_punto_ampliacionENDIF
ENDLOOPENDLOOP
ENDFORM BUSCA_USER_EXIT_BADI_BTE
amp---------------------------------------------------------------------amp Form BUSCA_ENHANCEMENTSamp--------------------------------------------------------------------- Busca las llamadas a los USER-EXIT----------------------------------------------------------------------FORM busca_enhancements
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE EN ALGUN ENHANCEMENTSEARCH ti_programa-cf FOR c_enhance- SE ENCONTRO EL ENHANCEMENT Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentarioCLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM BUSCA_ENHANCEMENTS
amp---------------------------------------------------------------------amp Form EXIBE_USER_EXITamp--------------------------------------------------------------------- Muestra los datos----------------------------------------------------------------------FORM exibe_user_exit
PERFORM armar_alv
PERFORM mostrar_listado
ENDFORM EXIBE_USER_EXIT
amp---------------------------------------------------------------------amp Form PROCURA_INCLUDEamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_include
CLEAR vg_palavra
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_include- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN STRUCTURESEARCH ti_programa-cf FOR c_struct
IF sy-subrc IS INITIALEXITENDIF
- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_includeCLEAR vg_palavraENDIFENDIFENDDO- GRABA NOMBRE DEL INCLUDE PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF
ENDIF
ENDFORM PROCURA_INCLUDE
amp---------------------------------------------------------------------amp Form PROCURA_FUNCAOamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_funcao
CLEAR vg_conta_aspavg_palavra
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA FUNCIONSEARCH ti_programa-cf FOR c_funcao_2- SE ENCONTRO UNA FUNCION Y LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DE LA INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_aspaADD 1 TO vg_conta_aspaIF vg_conta_aspa EQ 2EXITENDIFENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_funcao_1CLEAR vg_palavraENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITCLEAR vg_pnameSELECT SINGLE pnameINTO vg_pnameFROM tfdirWHERE funcname EQ vg_palavraIF sy-subrc EQ 0
READ TABLE ti_includes WITH KEY nome = vg_pnameIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_pname TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF
ENDIF
ENDIF
ENDFORM PROCURA_FUNCAO
amp---------------------------------------------------------------------amp Form VERIFICA_INCLUDE_FUNCAO_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM verifica_include_funcao_submit
CHECK p_ue IS NOT INITIAL OR p_badi IS NOT INITIALOR p_bte IS NOT INITIAL OR p_enh IS NOT INITIAL
LOOP AT ti_includes
ADD 1 TO vg_contadorDESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfillMOVE ti_includes-nivel TO vg_nivelADD 1 TO vg_nivel
- BORRA TABLA INTERNAREFRESH ti_programa
- REALIZA LECTURA DE INCLUDEFUNCION ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa
LOOP AT ti_programa
- PROCURA POR INCLUDESIF p_incl EQ c_xPERFORM procura_includeENDIF- PROCURA POR FUNCIONIF p_func EQ c_xPERFORM procura_funcaoENDIF- PROCURA POR SUBMITIF p_submit EQ c_xPERFORM procura_submitENDIF
ENDLOOP
ENDLOOP
ENDFORM VERIFICA_INCLUDE_FUNCAO_SUBMIT
amp---------------------------------------------------------------------amp Form EVITAR_TIME_OUTamp--------------------------------------------------------------------- Evito el TIME OUT visualizando un mensaje----------------------------------------------------------------------FORM evitar_time_out USING p_tfill LIKE sy-tfill
DATAvl_total(10) TYPE n
vl_atual(10) TYPE nl_tout LIKE sy-timlol_time(10) TYPE c
GET TIME FIELD l_tout
l_tout = l_tout - w_tini
MOVEp_tfill TO vl_totalvg_contador TO vl_atual
SHIFT vl_total LEFT DELETING LEADING 0SHIFT vl_atual LEFT DELETING LEADING 0WRITE l_tout TO l_time
CONCATENATE Tpo l_time Total vl_total Actual vl_atualINTO vg_textoSEPARATED BY space
CALL FUNCTION SAPGUI_PROGRESS_INDICATOREXPORTINGtext = vg_texto
ENDFORM EVITAR_TIME_OUT
amp---------------------------------------------------------------------amp Form PROCURA_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_submit
CLEAR vg_conta_espaco vg_palavra vg_ini_contagem
- VERIFICA SI LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_submit- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF vg_ini_contagem EQ c_x AND vg_caracter IS INITIALADD 1 TO vg_conta_espacoENDIF
IF NOT vg_caracter IS INITIALMOVE c_x TO vg_ini_contagemIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRAIF vg_conta_espaco LT 2CONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACION
TRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_submitCLEAR vg_palavraENDIFELSEEXITENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIFENDIF
ENDFORM PROCURA_SUBMIT
amp---------------------------------------------------------------------amp Form CONSISTI_PARAMETROSamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM consisti_parametros
IF p_nivel IS INITIALMOVE 1 TO p_nivelENDIF
IF p_prog IS INITIAL AND p_tcode IS INITIAL- EL NOMBRE DEL PROGRAMA Y EL NOMBRE DE LA TRANSACCION NO PUEDEN SER- NULOS UNO DE ELLOS DEBE SER INFORMADOMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e01STOPENDIF
IF NOT p_prog IS INITIAL AND NOT p_tcode IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME NOMBRE DE PROGRAMA O TRANSACCIONMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e02STOPENDIF
IF p_ue IS INITIAL AND p_badi IS INITIAL AND p_bte IS INITIALAND p_sust IS INITIAL AND p_val IS INITIAL AND p_fdex IS INITIALAND p_enh IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME UN TIPO DE MEJORAMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e03STOPENDIF
ENDFORM CONSISTI_PARAMETROS
amp---------------------------------------------------------------------
amp Form INICIALIZA_TABELAamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM inicializa_tabela
DATAe_tstc TYPE tstcl_tcode TYPE sy-tcode
REFRESH ti_includes
IF NOT p_prog IS INITIAL
MOVE p_prog TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includes
- BUSCO EL PROGRAMAREAD REPORT ti_includes-nome INTO ti_programa
IF sy-subrc EQ 0REFRESH ti_programaELSE- EL PROGRAMA NO EXISTEMESSAGE s893(pz) WITH El programa p_prog no existeSTOPENDIF
ELSEIF NOT p_tcode IS INITIAL
SELECT SINGLE FROM tstcWHERE tcode EQ p_tcode
IF sy-subrc EQ 0
IF tstc-pgmna IS NOT INITIALMOVE tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includesELSE Se trata de una transaccioacuten de paraacutemetros Obtengo la transaccioacuten asociadaCALL FUNCTION RS_TRANSACTION_SINGLE_GETEXPORTINGparameter_tcode = p_tcodeIMPORTINGtcode = l_tcode
SELECT SINGLE INTO e_tstcFROM tstcWHERE tcode EQ l_tcode
IF sy-subrc EQ 0MOVE e_tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivel
APPEND ti_includesELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeENDIFENDIFELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeSTOPENDIFENDIF
ENDFORM INICIALIZA_TABELA
amp---------------------------------------------------------------------amp Form armar_alvamp--------------------------------------------------------------------- Armo el ALV----------------------------------------------------------------------FORM armar_alv
DATAl_repid TYPE sy-repid
MOVE sy-repid TO l_repid
CALL FUNCTION REUSE_ALV_BLOCK_LIST_INITEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMAND
IF p_ue IS NOT INITIALPERFORM construir_catalogo_exitPERFORM definir_layout USING TI_USER_EXITCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGEPERFORM sort TABLES ti_sortUSING TI_USER_EXIT
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_USER_EXITit_events = ti_eventsit_sort = ti_sorti_text = User-exitTABLESt_outtab = ti_user_exitEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
PERFORM construir_catalogo_uexitPERFORM definir_layout USING TI_FINAL
CHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_UEXITPERFORM sort TABLES ti_sortUSING TI_FINAL
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FINALit_events = ti_eventsit_sort = ti_sorti_text = User-exit TxCMODTABLESt_outtab = ti_finalEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_badi IS NOT INITIALPERFORM construir_catalogo_badiPERFORM definir_layout USING TI_BADICHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BADIPERFORM sort TABLES ti_sortUSING TI_BADI
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_BADIit_events = ti_eventsit_sort = ti_sorti_text = BadisTABLESt_outtab = ti_badiEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_bte IS NOT INITIALPERFORM construir_catalogo_btePERFORM definir_layout USING TI_BTECHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BTEPERFORM sort TABLES ti_sortUSING TI_BTE
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layout
it_fieldcat = ti_cati_tabname = TI_BTEit_events = ti_eventsit_sort = ti_sorti_text = BTETABLESt_outtab = ti_bteEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_enh IS NOT INITIALPERFORM construir_catalogo_enhPERFORM definir_layout USING TI_ENHCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHPERFORM sort TABLES ti_sortUSING TI_ENH
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHit_events = ti_eventsit_sort = ti_sorti_text = ENHTABLESt_outtab = ti_enhEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
PERFORM construir_catalogo_enhobjPERFORM definir_layout USING TI_ENHOBJCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHOBJPERFORM sort TABLES ti_sortUSING TI_ENHOBJ
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHOBJit_events = ti_eventsit_sort = ti_sorti_text = ENHOBJTABLESt_outtab = ti_enhobjEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX
PERFORM sort TABLES ti_sortUSING TI_FDEX
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
ENDFORM armar_alv
amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03
CF X c_text_04
ENDFORM construir_catalogo_EXIT
amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic
STATICS l_col_pos LIKE sy-cucol
Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname
CHECK sy-subrc EQ 0
IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF
IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF
wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon
MODIFY pt_cat FROM wa_cat INDEX sy-tabix
ENDFORM asignar_campo_a_catalogo
amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv
CLEAR p_layout
IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X
ENDFORM definir_layout
amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n
REFRESH ti_eventsCLEAR wa_events
ALV Simple Block appendl_type = 2
Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events
Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF
ENDFORM construir_eventos
amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit
ENDFORM top_of_page
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD
ENDFORM TOP_OF_PAGE_UEXIT
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs
ENDFORM TOP_OF_PAGE_FDEX
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs
ENDFORM TOP_OF_PAGE_BADI
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant
CONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs
ENDFORM TOP_OF_PAGE_BTE
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENH
amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any
CLEAR pt_sort wa_sortREFRESH pt_sort
CASE p_tabnameWHEN TI_SUST
wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_VAL
wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_ENHOBJ
wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN OTHERS
IF p_tabname NE TI_FINAL
wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
IF p_tabname NE TI_FDEX
wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
ENDIF
ELSE
wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE
ENDFORM sort
amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado
wa_print-reserve_lines = 2
CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY
EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM mostrar_listado
amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield
DATA l_break TYPE c
Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE
Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL
CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf
ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF 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-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF
WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF
WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF
WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea
ti_bte-breakMOVE X TO l_breakENDIF
WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF
WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF
WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF
WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF
WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf
CALL FUNCTION RS_NAVIGATION_MONITORENDIF
WHEN TI_CIMP Customer implementation
CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X
ENDFORM user_command
amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM visualizar_linea
amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0
CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM buscar_exit
amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi
DATAl_subrc LIKE sy-subrc
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF
IF l_subrc EQ 0CLEAR ti_badi
- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF
ENDFORM buscar_badi
amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform
CHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
ENDFORM buscar_bte
amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4
CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS
cancel = 1wrong_type = 2OTHERS = 3
ENDFORM repid_f4
amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf
DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
SEARCH p_cf FOR c_type_ref
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
SPLIT p_cf+sy-fdpos(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
READ TABLE lt_cf INDEX 4
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
CHECK sy-subrc IS INITIAL
Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten
textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer
CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4
IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF
WHEN OTHERS Do Nothing ENDCASE
ENDFORM visualizar_badi
amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf
DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
CLEAR d010inc modsap modact
Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid
IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF
SEARCH p_cf FOR c_enhance
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
MOVE p_cf+sy-fdpos(l_cf) TO l_linea
SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3
TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS
Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _
Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit
CHECK sy-subrc IS INITIAL
Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM
modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3
ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname
CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ENDIF
ENDFORM visualizar_exit
amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit
DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo
DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe
DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE
CHECK p_fdex IS NOT INITIAL
CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe
MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex
IF p_prog IS NOT INITIAL
MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF
Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog
LOOP AT lt_d020s
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
REFRESH lt_d021s
Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4
Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X
SEARCH lt_d021s-fnam FOR -
IF sy-subrc IS INITIAL
MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum
Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname
APPEND lt_campo
ENDIF
ENDLOOPENDLOOP
CHECK lt_campo[] IS NOT INITIAL
SORT lt_campo BY repid dnum tabname fieldname
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text5POSITION 20PARAMETERS p_submit AS CHECKBOX DEFAULT X SubmitSELECTION-SCREEN END OF LINE
SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text6POSITION 20PARAMETERS p_nivel(2) TYPE n DEFAULT 04 NivelSELECTION-SCREEN END OF LINE
SELECTION-SCREEN END OF BLOCK bl03
Botoacuten de Marcar todo en el STATUS GUISELECTION-SCREEN FUNCTION KEY 1 Botoacuten de Desmarcar todo en el STATUS GUISELECTION-SCREEN FUNCTION KEY 2 Botoacuten de Breakpoint en el STATUS GUISELECTION-SCREEN FUNCTION KEY 3
----------------------------------------------------------------------- DEFINICIOacuteN DE MACROS-----------------------------------------------------------------------DEFINE icon_create Creo para el botoacuten indicado el icono y los textos correspondientes
call function ICON_CREATEexportingname = amp2text = amp3info = amp4importingresult = amp1exceptionsothers = 0
END-OF-DEFINITION icon_create
----------------------------------------------------------------------- INICIALIZACIOacuteN DE VARIABLES-----------------------------------------------------------------------INITIALIZATION
PERFORM def_text_parameter
PERFORM def_botones
CLEAR ti_gb31tREFRESH ti_gb31t
Obtengo ValidacioacutenSustitucioacutenEventosTextoSELECT INTO TABLE ti_gb31tFROM gb31tWHERE spras EQ sy-langu
----------------------------------------------------------------------- AT SELECTION-SCREEN-----------------------------------------------------------------------
AT SELECTION-SCREEN
CASE sscrfields-ucommWHEN FC01MOVE X TO p_ue p_badi p_bte p_sust p_val p_fdex p_enhWHEN FC02CLEAR p_ue p_badi p_bte p_sust p_val p_fdex p_enhWHEN FC03PERFORM breakpointWHEN EXTPERFORM visualizar_ampliacionWHEN EXT1PERFORM visualizar_proyectoWHEN EXT2PERFORM visualizar_fm_exitWHEN BADIPERFORM visualizar_interfaceWHEN OBBCALL TRANSACTION OBBHWHEN OB28CALL TRANSACTION OB28WHEN SUST OR VALPERFORM visualizar_programaWHEN FDEXSUBMIT rsmodprf AND RETURNWHEN BTE1CALL TRANSACTION FIBFWHEN BTE2PERFORM cargar_bte USING EWHEN BTE3PERFORM cargar_bte USING PWHEN SENHSUBMIT sapmsenh VIA SELECTION-SCREENAND RETURNWHEN CIMPPERFORM visualizar_imp_enhWHEN ALLMOVE X TO p_incl p_func p_submitWHEN DALCLEAR p_incl p_func p_submitWHEN OTHERS Do Nothing ENDCASE
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_prog
PERFORM repid_f4
---------------------------------------------------------------------- INICIO----------------------------------------------------------------------START-OF-SELECTION
GET TIME FIELD w_tini
- CONSISTENCIAS DE LOS PARAMETROSPERFORM consisti_parametros
- INICIALIZA TABLAPERFORM inicializa_tabela
- VERIFICA SI EN EL PROGRAMA EXISTE ALGUN INCLUDE FUNCION O SUBMITPERFORM verifica_include_funcao_submit
- ANALISA LOS INCLUDES Y BUSCA POR USER-EXIT BADIS Y BTEPERFORM busca_user_exit_badi_bte
- ANALISA LOS INCLUDES Y BUSCA LOS FIELD-EXITSPERFORM buscar_field_exit
- OBTENGO LOS EXITs DE LA TRANSACCIOacuteNPERFORM buscar_user_exit
- OBTENGO LAS PUNTOS DE AMPLIACIOacuteNPERFORM buscar_enh
- OBTENGO LAS SUSTITUCIONESPERFORM buscar_sustituciones
- OBTENGO LAS VALIDACIONESPERFORM buscar_validaciones
- CARGO LOS BREAKPOINTSPERFORM cargar_break
- VISUALIZA LAS AMPLIACIONES ENCONTRADASPERFORM exibe_user_exit
---------------------------------------------------------------------- FIN----------------------------------------------------------------------END-OF-SELECTION
amp---------------------------------------------------------------------amp Form BUSCA_USER_EXIT_BADI_BTEamp--------------------------------------------------------------------- Busca EXITs BADIs y BTE en el coacutedigo fuente----------------------------------------------------------------------FORM busca_user_exit_badi_bte
- VERIFICA SI EN LOS INCLUDES SELECIONADOS EXISTEN EXITSLOOP AT ti_includes
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
- BORRA LA TABLA INTERNAREFRESH ti_programa
- REALIZA LECTURA DE INCLUDE ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa
LOOP AT ti_programa
IF p_ue EQ XPERFORM buscar_exitPERFORM busca_enhancementsENDIF
IF p_badi EQ XPERFORM buscar_badiENDIF
IF p_bte EQ XPERFORM buscar_bteENDIF
IF p_enh EQ XPERFORM buscar_punto_ampliacionENDIF
ENDLOOPENDLOOP
ENDFORM BUSCA_USER_EXIT_BADI_BTE
amp---------------------------------------------------------------------amp Form BUSCA_ENHANCEMENTSamp--------------------------------------------------------------------- Busca las llamadas a los USER-EXIT----------------------------------------------------------------------FORM busca_enhancements
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE EN ALGUN ENHANCEMENTSEARCH ti_programa-cf FOR c_enhance- SE ENCONTRO EL ENHANCEMENT Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentarioCLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM BUSCA_ENHANCEMENTS
amp---------------------------------------------------------------------amp Form EXIBE_USER_EXITamp--------------------------------------------------------------------- Muestra los datos----------------------------------------------------------------------FORM exibe_user_exit
PERFORM armar_alv
PERFORM mostrar_listado
ENDFORM EXIBE_USER_EXIT
amp---------------------------------------------------------------------amp Form PROCURA_INCLUDEamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_include
CLEAR vg_palavra
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_include- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN STRUCTURESEARCH ti_programa-cf FOR c_struct
IF sy-subrc IS INITIALEXITENDIF
- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_includeCLEAR vg_palavraENDIFENDIFENDDO- GRABA NOMBRE DEL INCLUDE PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF
ENDIF
ENDFORM PROCURA_INCLUDE
amp---------------------------------------------------------------------amp Form PROCURA_FUNCAOamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_funcao
CLEAR vg_conta_aspavg_palavra
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA FUNCIONSEARCH ti_programa-cf FOR c_funcao_2- SE ENCONTRO UNA FUNCION Y LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DE LA INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_aspaADD 1 TO vg_conta_aspaIF vg_conta_aspa EQ 2EXITENDIFENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_funcao_1CLEAR vg_palavraENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITCLEAR vg_pnameSELECT SINGLE pnameINTO vg_pnameFROM tfdirWHERE funcname EQ vg_palavraIF sy-subrc EQ 0
READ TABLE ti_includes WITH KEY nome = vg_pnameIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_pname TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF
ENDIF
ENDIF
ENDFORM PROCURA_FUNCAO
amp---------------------------------------------------------------------amp Form VERIFICA_INCLUDE_FUNCAO_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM verifica_include_funcao_submit
CHECK p_ue IS NOT INITIAL OR p_badi IS NOT INITIALOR p_bte IS NOT INITIAL OR p_enh IS NOT INITIAL
LOOP AT ti_includes
ADD 1 TO vg_contadorDESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfillMOVE ti_includes-nivel TO vg_nivelADD 1 TO vg_nivel
- BORRA TABLA INTERNAREFRESH ti_programa
- REALIZA LECTURA DE INCLUDEFUNCION ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa
LOOP AT ti_programa
- PROCURA POR INCLUDESIF p_incl EQ c_xPERFORM procura_includeENDIF- PROCURA POR FUNCIONIF p_func EQ c_xPERFORM procura_funcaoENDIF- PROCURA POR SUBMITIF p_submit EQ c_xPERFORM procura_submitENDIF
ENDLOOP
ENDLOOP
ENDFORM VERIFICA_INCLUDE_FUNCAO_SUBMIT
amp---------------------------------------------------------------------amp Form EVITAR_TIME_OUTamp--------------------------------------------------------------------- Evito el TIME OUT visualizando un mensaje----------------------------------------------------------------------FORM evitar_time_out USING p_tfill LIKE sy-tfill
DATAvl_total(10) TYPE n
vl_atual(10) TYPE nl_tout LIKE sy-timlol_time(10) TYPE c
GET TIME FIELD l_tout
l_tout = l_tout - w_tini
MOVEp_tfill TO vl_totalvg_contador TO vl_atual
SHIFT vl_total LEFT DELETING LEADING 0SHIFT vl_atual LEFT DELETING LEADING 0WRITE l_tout TO l_time
CONCATENATE Tpo l_time Total vl_total Actual vl_atualINTO vg_textoSEPARATED BY space
CALL FUNCTION SAPGUI_PROGRESS_INDICATOREXPORTINGtext = vg_texto
ENDFORM EVITAR_TIME_OUT
amp---------------------------------------------------------------------amp Form PROCURA_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_submit
CLEAR vg_conta_espaco vg_palavra vg_ini_contagem
- VERIFICA SI LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_submit- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF vg_ini_contagem EQ c_x AND vg_caracter IS INITIALADD 1 TO vg_conta_espacoENDIF
IF NOT vg_caracter IS INITIALMOVE c_x TO vg_ini_contagemIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRAIF vg_conta_espaco LT 2CONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACION
TRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_submitCLEAR vg_palavraENDIFELSEEXITENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIFENDIF
ENDFORM PROCURA_SUBMIT
amp---------------------------------------------------------------------amp Form CONSISTI_PARAMETROSamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM consisti_parametros
IF p_nivel IS INITIALMOVE 1 TO p_nivelENDIF
IF p_prog IS INITIAL AND p_tcode IS INITIAL- EL NOMBRE DEL PROGRAMA Y EL NOMBRE DE LA TRANSACCION NO PUEDEN SER- NULOS UNO DE ELLOS DEBE SER INFORMADOMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e01STOPENDIF
IF NOT p_prog IS INITIAL AND NOT p_tcode IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME NOMBRE DE PROGRAMA O TRANSACCIONMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e02STOPENDIF
IF p_ue IS INITIAL AND p_badi IS INITIAL AND p_bte IS INITIALAND p_sust IS INITIAL AND p_val IS INITIAL AND p_fdex IS INITIALAND p_enh IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME UN TIPO DE MEJORAMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e03STOPENDIF
ENDFORM CONSISTI_PARAMETROS
amp---------------------------------------------------------------------
amp Form INICIALIZA_TABELAamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM inicializa_tabela
DATAe_tstc TYPE tstcl_tcode TYPE sy-tcode
REFRESH ti_includes
IF NOT p_prog IS INITIAL
MOVE p_prog TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includes
- BUSCO EL PROGRAMAREAD REPORT ti_includes-nome INTO ti_programa
IF sy-subrc EQ 0REFRESH ti_programaELSE- EL PROGRAMA NO EXISTEMESSAGE s893(pz) WITH El programa p_prog no existeSTOPENDIF
ELSEIF NOT p_tcode IS INITIAL
SELECT SINGLE FROM tstcWHERE tcode EQ p_tcode
IF sy-subrc EQ 0
IF tstc-pgmna IS NOT INITIALMOVE tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includesELSE Se trata de una transaccioacuten de paraacutemetros Obtengo la transaccioacuten asociadaCALL FUNCTION RS_TRANSACTION_SINGLE_GETEXPORTINGparameter_tcode = p_tcodeIMPORTINGtcode = l_tcode
SELECT SINGLE INTO e_tstcFROM tstcWHERE tcode EQ l_tcode
IF sy-subrc EQ 0MOVE e_tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivel
APPEND ti_includesELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeENDIFENDIFELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeSTOPENDIFENDIF
ENDFORM INICIALIZA_TABELA
amp---------------------------------------------------------------------amp Form armar_alvamp--------------------------------------------------------------------- Armo el ALV----------------------------------------------------------------------FORM armar_alv
DATAl_repid TYPE sy-repid
MOVE sy-repid TO l_repid
CALL FUNCTION REUSE_ALV_BLOCK_LIST_INITEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMAND
IF p_ue IS NOT INITIALPERFORM construir_catalogo_exitPERFORM definir_layout USING TI_USER_EXITCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGEPERFORM sort TABLES ti_sortUSING TI_USER_EXIT
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_USER_EXITit_events = ti_eventsit_sort = ti_sorti_text = User-exitTABLESt_outtab = ti_user_exitEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
PERFORM construir_catalogo_uexitPERFORM definir_layout USING TI_FINAL
CHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_UEXITPERFORM sort TABLES ti_sortUSING TI_FINAL
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FINALit_events = ti_eventsit_sort = ti_sorti_text = User-exit TxCMODTABLESt_outtab = ti_finalEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_badi IS NOT INITIALPERFORM construir_catalogo_badiPERFORM definir_layout USING TI_BADICHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BADIPERFORM sort TABLES ti_sortUSING TI_BADI
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_BADIit_events = ti_eventsit_sort = ti_sorti_text = BadisTABLESt_outtab = ti_badiEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_bte IS NOT INITIALPERFORM construir_catalogo_btePERFORM definir_layout USING TI_BTECHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BTEPERFORM sort TABLES ti_sortUSING TI_BTE
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layout
it_fieldcat = ti_cati_tabname = TI_BTEit_events = ti_eventsit_sort = ti_sorti_text = BTETABLESt_outtab = ti_bteEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_enh IS NOT INITIALPERFORM construir_catalogo_enhPERFORM definir_layout USING TI_ENHCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHPERFORM sort TABLES ti_sortUSING TI_ENH
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHit_events = ti_eventsit_sort = ti_sorti_text = ENHTABLESt_outtab = ti_enhEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
PERFORM construir_catalogo_enhobjPERFORM definir_layout USING TI_ENHOBJCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHOBJPERFORM sort TABLES ti_sortUSING TI_ENHOBJ
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHOBJit_events = ti_eventsit_sort = ti_sorti_text = ENHOBJTABLESt_outtab = ti_enhobjEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX
PERFORM sort TABLES ti_sortUSING TI_FDEX
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
ENDFORM armar_alv
amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03
CF X c_text_04
ENDFORM construir_catalogo_EXIT
amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic
STATICS l_col_pos LIKE sy-cucol
Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname
CHECK sy-subrc EQ 0
IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF
IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF
wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon
MODIFY pt_cat FROM wa_cat INDEX sy-tabix
ENDFORM asignar_campo_a_catalogo
amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv
CLEAR p_layout
IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X
ENDFORM definir_layout
amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n
REFRESH ti_eventsCLEAR wa_events
ALV Simple Block appendl_type = 2
Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events
Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF
ENDFORM construir_eventos
amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit
ENDFORM top_of_page
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD
ENDFORM TOP_OF_PAGE_UEXIT
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs
ENDFORM TOP_OF_PAGE_FDEX
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs
ENDFORM TOP_OF_PAGE_BADI
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant
CONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs
ENDFORM TOP_OF_PAGE_BTE
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENH
amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any
CLEAR pt_sort wa_sortREFRESH pt_sort
CASE p_tabnameWHEN TI_SUST
wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_VAL
wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_ENHOBJ
wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN OTHERS
IF p_tabname NE TI_FINAL
wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
IF p_tabname NE TI_FDEX
wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
ENDIF
ELSE
wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE
ENDFORM sort
amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado
wa_print-reserve_lines = 2
CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY
EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM mostrar_listado
amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield
DATA l_break TYPE c
Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE
Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL
CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf
ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF 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-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF
WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF
WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF
WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea
ti_bte-breakMOVE X TO l_breakENDIF
WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF
WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF
WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF
WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF
WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf
CALL FUNCTION RS_NAVIGATION_MONITORENDIF
WHEN TI_CIMP Customer implementation
CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X
ENDFORM user_command
amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM visualizar_linea
amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0
CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM buscar_exit
amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi
DATAl_subrc LIKE sy-subrc
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF
IF l_subrc EQ 0CLEAR ti_badi
- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF
ENDFORM buscar_badi
amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform
CHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
ENDFORM buscar_bte
amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4
CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS
cancel = 1wrong_type = 2OTHERS = 3
ENDFORM repid_f4
amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf
DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
SEARCH p_cf FOR c_type_ref
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
SPLIT p_cf+sy-fdpos(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
READ TABLE lt_cf INDEX 4
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
CHECK sy-subrc IS INITIAL
Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten
textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer
CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4
IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF
WHEN OTHERS Do Nothing ENDCASE
ENDFORM visualizar_badi
amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf
DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
CLEAR d010inc modsap modact
Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid
IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF
SEARCH p_cf FOR c_enhance
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
MOVE p_cf+sy-fdpos(l_cf) TO l_linea
SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3
TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS
Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _
Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit
CHECK sy-subrc IS INITIAL
Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM
modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3
ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname
CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ENDIF
ENDFORM visualizar_exit
amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit
DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo
DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe
DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE
CHECK p_fdex IS NOT INITIAL
CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe
MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex
IF p_prog IS NOT INITIAL
MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF
Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog
LOOP AT lt_d020s
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
REFRESH lt_d021s
Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4
Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X
SEARCH lt_d021s-fnam FOR -
IF sy-subrc IS INITIAL
MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum
Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname
APPEND lt_campo
ENDIF
ENDLOOPENDLOOP
CHECK lt_campo[] IS NOT INITIAL
SORT lt_campo BY repid dnum tabname fieldname
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
----------------------------------------------------------------------- AT SELECTION-SCREEN-----------------------------------------------------------------------
AT SELECTION-SCREEN
CASE sscrfields-ucommWHEN FC01MOVE X TO p_ue p_badi p_bte p_sust p_val p_fdex p_enhWHEN FC02CLEAR p_ue p_badi p_bte p_sust p_val p_fdex p_enhWHEN FC03PERFORM breakpointWHEN EXTPERFORM visualizar_ampliacionWHEN EXT1PERFORM visualizar_proyectoWHEN EXT2PERFORM visualizar_fm_exitWHEN BADIPERFORM visualizar_interfaceWHEN OBBCALL TRANSACTION OBBHWHEN OB28CALL TRANSACTION OB28WHEN SUST OR VALPERFORM visualizar_programaWHEN FDEXSUBMIT rsmodprf AND RETURNWHEN BTE1CALL TRANSACTION FIBFWHEN BTE2PERFORM cargar_bte USING EWHEN BTE3PERFORM cargar_bte USING PWHEN SENHSUBMIT sapmsenh VIA SELECTION-SCREENAND RETURNWHEN CIMPPERFORM visualizar_imp_enhWHEN ALLMOVE X TO p_incl p_func p_submitWHEN DALCLEAR p_incl p_func p_submitWHEN OTHERS Do Nothing ENDCASE
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_prog
PERFORM repid_f4
---------------------------------------------------------------------- INICIO----------------------------------------------------------------------START-OF-SELECTION
GET TIME FIELD w_tini
- CONSISTENCIAS DE LOS PARAMETROSPERFORM consisti_parametros
- INICIALIZA TABLAPERFORM inicializa_tabela
- VERIFICA SI EN EL PROGRAMA EXISTE ALGUN INCLUDE FUNCION O SUBMITPERFORM verifica_include_funcao_submit
- ANALISA LOS INCLUDES Y BUSCA POR USER-EXIT BADIS Y BTEPERFORM busca_user_exit_badi_bte
- ANALISA LOS INCLUDES Y BUSCA LOS FIELD-EXITSPERFORM buscar_field_exit
- OBTENGO LOS EXITs DE LA TRANSACCIOacuteNPERFORM buscar_user_exit
- OBTENGO LAS PUNTOS DE AMPLIACIOacuteNPERFORM buscar_enh
- OBTENGO LAS SUSTITUCIONESPERFORM buscar_sustituciones
- OBTENGO LAS VALIDACIONESPERFORM buscar_validaciones
- CARGO LOS BREAKPOINTSPERFORM cargar_break
- VISUALIZA LAS AMPLIACIONES ENCONTRADASPERFORM exibe_user_exit
---------------------------------------------------------------------- FIN----------------------------------------------------------------------END-OF-SELECTION
amp---------------------------------------------------------------------amp Form BUSCA_USER_EXIT_BADI_BTEamp--------------------------------------------------------------------- Busca EXITs BADIs y BTE en el coacutedigo fuente----------------------------------------------------------------------FORM busca_user_exit_badi_bte
- VERIFICA SI EN LOS INCLUDES SELECIONADOS EXISTEN EXITSLOOP AT ti_includes
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
- BORRA LA TABLA INTERNAREFRESH ti_programa
- REALIZA LECTURA DE INCLUDE ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa
LOOP AT ti_programa
IF p_ue EQ XPERFORM buscar_exitPERFORM busca_enhancementsENDIF
IF p_badi EQ XPERFORM buscar_badiENDIF
IF p_bte EQ XPERFORM buscar_bteENDIF
IF p_enh EQ XPERFORM buscar_punto_ampliacionENDIF
ENDLOOPENDLOOP
ENDFORM BUSCA_USER_EXIT_BADI_BTE
amp---------------------------------------------------------------------amp Form BUSCA_ENHANCEMENTSamp--------------------------------------------------------------------- Busca las llamadas a los USER-EXIT----------------------------------------------------------------------FORM busca_enhancements
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE EN ALGUN ENHANCEMENTSEARCH ti_programa-cf FOR c_enhance- SE ENCONTRO EL ENHANCEMENT Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentarioCLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM BUSCA_ENHANCEMENTS
amp---------------------------------------------------------------------amp Form EXIBE_USER_EXITamp--------------------------------------------------------------------- Muestra los datos----------------------------------------------------------------------FORM exibe_user_exit
PERFORM armar_alv
PERFORM mostrar_listado
ENDFORM EXIBE_USER_EXIT
amp---------------------------------------------------------------------amp Form PROCURA_INCLUDEamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_include
CLEAR vg_palavra
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_include- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN STRUCTURESEARCH ti_programa-cf FOR c_struct
IF sy-subrc IS INITIALEXITENDIF
- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_includeCLEAR vg_palavraENDIFENDIFENDDO- GRABA NOMBRE DEL INCLUDE PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF
ENDIF
ENDFORM PROCURA_INCLUDE
amp---------------------------------------------------------------------amp Form PROCURA_FUNCAOamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_funcao
CLEAR vg_conta_aspavg_palavra
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA FUNCIONSEARCH ti_programa-cf FOR c_funcao_2- SE ENCONTRO UNA FUNCION Y LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DE LA INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_aspaADD 1 TO vg_conta_aspaIF vg_conta_aspa EQ 2EXITENDIFENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_funcao_1CLEAR vg_palavraENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITCLEAR vg_pnameSELECT SINGLE pnameINTO vg_pnameFROM tfdirWHERE funcname EQ vg_palavraIF sy-subrc EQ 0
READ TABLE ti_includes WITH KEY nome = vg_pnameIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_pname TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF
ENDIF
ENDIF
ENDFORM PROCURA_FUNCAO
amp---------------------------------------------------------------------amp Form VERIFICA_INCLUDE_FUNCAO_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM verifica_include_funcao_submit
CHECK p_ue IS NOT INITIAL OR p_badi IS NOT INITIALOR p_bte IS NOT INITIAL OR p_enh IS NOT INITIAL
LOOP AT ti_includes
ADD 1 TO vg_contadorDESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfillMOVE ti_includes-nivel TO vg_nivelADD 1 TO vg_nivel
- BORRA TABLA INTERNAREFRESH ti_programa
- REALIZA LECTURA DE INCLUDEFUNCION ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa
LOOP AT ti_programa
- PROCURA POR INCLUDESIF p_incl EQ c_xPERFORM procura_includeENDIF- PROCURA POR FUNCIONIF p_func EQ c_xPERFORM procura_funcaoENDIF- PROCURA POR SUBMITIF p_submit EQ c_xPERFORM procura_submitENDIF
ENDLOOP
ENDLOOP
ENDFORM VERIFICA_INCLUDE_FUNCAO_SUBMIT
amp---------------------------------------------------------------------amp Form EVITAR_TIME_OUTamp--------------------------------------------------------------------- Evito el TIME OUT visualizando un mensaje----------------------------------------------------------------------FORM evitar_time_out USING p_tfill LIKE sy-tfill
DATAvl_total(10) TYPE n
vl_atual(10) TYPE nl_tout LIKE sy-timlol_time(10) TYPE c
GET TIME FIELD l_tout
l_tout = l_tout - w_tini
MOVEp_tfill TO vl_totalvg_contador TO vl_atual
SHIFT vl_total LEFT DELETING LEADING 0SHIFT vl_atual LEFT DELETING LEADING 0WRITE l_tout TO l_time
CONCATENATE Tpo l_time Total vl_total Actual vl_atualINTO vg_textoSEPARATED BY space
CALL FUNCTION SAPGUI_PROGRESS_INDICATOREXPORTINGtext = vg_texto
ENDFORM EVITAR_TIME_OUT
amp---------------------------------------------------------------------amp Form PROCURA_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_submit
CLEAR vg_conta_espaco vg_palavra vg_ini_contagem
- VERIFICA SI LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_submit- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF vg_ini_contagem EQ c_x AND vg_caracter IS INITIALADD 1 TO vg_conta_espacoENDIF
IF NOT vg_caracter IS INITIALMOVE c_x TO vg_ini_contagemIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRAIF vg_conta_espaco LT 2CONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACION
TRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_submitCLEAR vg_palavraENDIFELSEEXITENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIFENDIF
ENDFORM PROCURA_SUBMIT
amp---------------------------------------------------------------------amp Form CONSISTI_PARAMETROSamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM consisti_parametros
IF p_nivel IS INITIALMOVE 1 TO p_nivelENDIF
IF p_prog IS INITIAL AND p_tcode IS INITIAL- EL NOMBRE DEL PROGRAMA Y EL NOMBRE DE LA TRANSACCION NO PUEDEN SER- NULOS UNO DE ELLOS DEBE SER INFORMADOMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e01STOPENDIF
IF NOT p_prog IS INITIAL AND NOT p_tcode IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME NOMBRE DE PROGRAMA O TRANSACCIONMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e02STOPENDIF
IF p_ue IS INITIAL AND p_badi IS INITIAL AND p_bte IS INITIALAND p_sust IS INITIAL AND p_val IS INITIAL AND p_fdex IS INITIALAND p_enh IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME UN TIPO DE MEJORAMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e03STOPENDIF
ENDFORM CONSISTI_PARAMETROS
amp---------------------------------------------------------------------
amp Form INICIALIZA_TABELAamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM inicializa_tabela
DATAe_tstc TYPE tstcl_tcode TYPE sy-tcode
REFRESH ti_includes
IF NOT p_prog IS INITIAL
MOVE p_prog TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includes
- BUSCO EL PROGRAMAREAD REPORT ti_includes-nome INTO ti_programa
IF sy-subrc EQ 0REFRESH ti_programaELSE- EL PROGRAMA NO EXISTEMESSAGE s893(pz) WITH El programa p_prog no existeSTOPENDIF
ELSEIF NOT p_tcode IS INITIAL
SELECT SINGLE FROM tstcWHERE tcode EQ p_tcode
IF sy-subrc EQ 0
IF tstc-pgmna IS NOT INITIALMOVE tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includesELSE Se trata de una transaccioacuten de paraacutemetros Obtengo la transaccioacuten asociadaCALL FUNCTION RS_TRANSACTION_SINGLE_GETEXPORTINGparameter_tcode = p_tcodeIMPORTINGtcode = l_tcode
SELECT SINGLE INTO e_tstcFROM tstcWHERE tcode EQ l_tcode
IF sy-subrc EQ 0MOVE e_tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivel
APPEND ti_includesELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeENDIFENDIFELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeSTOPENDIFENDIF
ENDFORM INICIALIZA_TABELA
amp---------------------------------------------------------------------amp Form armar_alvamp--------------------------------------------------------------------- Armo el ALV----------------------------------------------------------------------FORM armar_alv
DATAl_repid TYPE sy-repid
MOVE sy-repid TO l_repid
CALL FUNCTION REUSE_ALV_BLOCK_LIST_INITEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMAND
IF p_ue IS NOT INITIALPERFORM construir_catalogo_exitPERFORM definir_layout USING TI_USER_EXITCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGEPERFORM sort TABLES ti_sortUSING TI_USER_EXIT
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_USER_EXITit_events = ti_eventsit_sort = ti_sorti_text = User-exitTABLESt_outtab = ti_user_exitEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
PERFORM construir_catalogo_uexitPERFORM definir_layout USING TI_FINAL
CHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_UEXITPERFORM sort TABLES ti_sortUSING TI_FINAL
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FINALit_events = ti_eventsit_sort = ti_sorti_text = User-exit TxCMODTABLESt_outtab = ti_finalEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_badi IS NOT INITIALPERFORM construir_catalogo_badiPERFORM definir_layout USING TI_BADICHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BADIPERFORM sort TABLES ti_sortUSING TI_BADI
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_BADIit_events = ti_eventsit_sort = ti_sorti_text = BadisTABLESt_outtab = ti_badiEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_bte IS NOT INITIALPERFORM construir_catalogo_btePERFORM definir_layout USING TI_BTECHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BTEPERFORM sort TABLES ti_sortUSING TI_BTE
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layout
it_fieldcat = ti_cati_tabname = TI_BTEit_events = ti_eventsit_sort = ti_sorti_text = BTETABLESt_outtab = ti_bteEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_enh IS NOT INITIALPERFORM construir_catalogo_enhPERFORM definir_layout USING TI_ENHCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHPERFORM sort TABLES ti_sortUSING TI_ENH
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHit_events = ti_eventsit_sort = ti_sorti_text = ENHTABLESt_outtab = ti_enhEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
PERFORM construir_catalogo_enhobjPERFORM definir_layout USING TI_ENHOBJCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHOBJPERFORM sort TABLES ti_sortUSING TI_ENHOBJ
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHOBJit_events = ti_eventsit_sort = ti_sorti_text = ENHOBJTABLESt_outtab = ti_enhobjEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX
PERFORM sort TABLES ti_sortUSING TI_FDEX
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
ENDFORM armar_alv
amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03
CF X c_text_04
ENDFORM construir_catalogo_EXIT
amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic
STATICS l_col_pos LIKE sy-cucol
Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname
CHECK sy-subrc EQ 0
IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF
IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF
wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon
MODIFY pt_cat FROM wa_cat INDEX sy-tabix
ENDFORM asignar_campo_a_catalogo
amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv
CLEAR p_layout
IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X
ENDFORM definir_layout
amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n
REFRESH ti_eventsCLEAR wa_events
ALV Simple Block appendl_type = 2
Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events
Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF
ENDFORM construir_eventos
amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit
ENDFORM top_of_page
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD
ENDFORM TOP_OF_PAGE_UEXIT
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs
ENDFORM TOP_OF_PAGE_FDEX
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs
ENDFORM TOP_OF_PAGE_BADI
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant
CONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs
ENDFORM TOP_OF_PAGE_BTE
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENH
amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any
CLEAR pt_sort wa_sortREFRESH pt_sort
CASE p_tabnameWHEN TI_SUST
wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_VAL
wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_ENHOBJ
wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN OTHERS
IF p_tabname NE TI_FINAL
wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
IF p_tabname NE TI_FDEX
wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
ENDIF
ELSE
wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE
ENDFORM sort
amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado
wa_print-reserve_lines = 2
CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY
EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM mostrar_listado
amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield
DATA l_break TYPE c
Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE
Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL
CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf
ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF 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-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF
WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF
WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF
WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea
ti_bte-breakMOVE X TO l_breakENDIF
WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF
WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF
WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF
WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF
WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf
CALL FUNCTION RS_NAVIGATION_MONITORENDIF
WHEN TI_CIMP Customer implementation
CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X
ENDFORM user_command
amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM visualizar_linea
amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0
CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM buscar_exit
amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi
DATAl_subrc LIKE sy-subrc
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF
IF l_subrc EQ 0CLEAR ti_badi
- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF
ENDFORM buscar_badi
amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform
CHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
ENDFORM buscar_bte
amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4
CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS
cancel = 1wrong_type = 2OTHERS = 3
ENDFORM repid_f4
amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf
DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
SEARCH p_cf FOR c_type_ref
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
SPLIT p_cf+sy-fdpos(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
READ TABLE lt_cf INDEX 4
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
CHECK sy-subrc IS INITIAL
Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten
textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer
CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4
IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF
WHEN OTHERS Do Nothing ENDCASE
ENDFORM visualizar_badi
amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf
DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
CLEAR d010inc modsap modact
Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid
IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF
SEARCH p_cf FOR c_enhance
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
MOVE p_cf+sy-fdpos(l_cf) TO l_linea
SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3
TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS
Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _
Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit
CHECK sy-subrc IS INITIAL
Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM
modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3
ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname
CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ENDIF
ENDFORM visualizar_exit
amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit
DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo
DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe
DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE
CHECK p_fdex IS NOT INITIAL
CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe
MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex
IF p_prog IS NOT INITIAL
MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF
Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog
LOOP AT lt_d020s
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
REFRESH lt_d021s
Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4
Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X
SEARCH lt_d021s-fnam FOR -
IF sy-subrc IS INITIAL
MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum
Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname
APPEND lt_campo
ENDIF
ENDLOOPENDLOOP
CHECK lt_campo[] IS NOT INITIAL
SORT lt_campo BY repid dnum tabname fieldname
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
GET TIME FIELD w_tini
- CONSISTENCIAS DE LOS PARAMETROSPERFORM consisti_parametros
- INICIALIZA TABLAPERFORM inicializa_tabela
- VERIFICA SI EN EL PROGRAMA EXISTE ALGUN INCLUDE FUNCION O SUBMITPERFORM verifica_include_funcao_submit
- ANALISA LOS INCLUDES Y BUSCA POR USER-EXIT BADIS Y BTEPERFORM busca_user_exit_badi_bte
- ANALISA LOS INCLUDES Y BUSCA LOS FIELD-EXITSPERFORM buscar_field_exit
- OBTENGO LOS EXITs DE LA TRANSACCIOacuteNPERFORM buscar_user_exit
- OBTENGO LAS PUNTOS DE AMPLIACIOacuteNPERFORM buscar_enh
- OBTENGO LAS SUSTITUCIONESPERFORM buscar_sustituciones
- OBTENGO LAS VALIDACIONESPERFORM buscar_validaciones
- CARGO LOS BREAKPOINTSPERFORM cargar_break
- VISUALIZA LAS AMPLIACIONES ENCONTRADASPERFORM exibe_user_exit
---------------------------------------------------------------------- FIN----------------------------------------------------------------------END-OF-SELECTION
amp---------------------------------------------------------------------amp Form BUSCA_USER_EXIT_BADI_BTEamp--------------------------------------------------------------------- Busca EXITs BADIs y BTE en el coacutedigo fuente----------------------------------------------------------------------FORM busca_user_exit_badi_bte
- VERIFICA SI EN LOS INCLUDES SELECIONADOS EXISTEN EXITSLOOP AT ti_includes
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
- BORRA LA TABLA INTERNAREFRESH ti_programa
- REALIZA LECTURA DE INCLUDE ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa
LOOP AT ti_programa
IF p_ue EQ XPERFORM buscar_exitPERFORM busca_enhancementsENDIF
IF p_badi EQ XPERFORM buscar_badiENDIF
IF p_bte EQ XPERFORM buscar_bteENDIF
IF p_enh EQ XPERFORM buscar_punto_ampliacionENDIF
ENDLOOPENDLOOP
ENDFORM BUSCA_USER_EXIT_BADI_BTE
amp---------------------------------------------------------------------amp Form BUSCA_ENHANCEMENTSamp--------------------------------------------------------------------- Busca las llamadas a los USER-EXIT----------------------------------------------------------------------FORM busca_enhancements
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE EN ALGUN ENHANCEMENTSEARCH ti_programa-cf FOR c_enhance- SE ENCONTRO EL ENHANCEMENT Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentarioCLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM BUSCA_ENHANCEMENTS
amp---------------------------------------------------------------------amp Form EXIBE_USER_EXITamp--------------------------------------------------------------------- Muestra los datos----------------------------------------------------------------------FORM exibe_user_exit
PERFORM armar_alv
PERFORM mostrar_listado
ENDFORM EXIBE_USER_EXIT
amp---------------------------------------------------------------------amp Form PROCURA_INCLUDEamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_include
CLEAR vg_palavra
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_include- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN STRUCTURESEARCH ti_programa-cf FOR c_struct
IF sy-subrc IS INITIALEXITENDIF
- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_includeCLEAR vg_palavraENDIFENDIFENDDO- GRABA NOMBRE DEL INCLUDE PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF
ENDIF
ENDFORM PROCURA_INCLUDE
amp---------------------------------------------------------------------amp Form PROCURA_FUNCAOamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_funcao
CLEAR vg_conta_aspavg_palavra
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA FUNCIONSEARCH ti_programa-cf FOR c_funcao_2- SE ENCONTRO UNA FUNCION Y LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DE LA INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_aspaADD 1 TO vg_conta_aspaIF vg_conta_aspa EQ 2EXITENDIFENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_funcao_1CLEAR vg_palavraENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITCLEAR vg_pnameSELECT SINGLE pnameINTO vg_pnameFROM tfdirWHERE funcname EQ vg_palavraIF sy-subrc EQ 0
READ TABLE ti_includes WITH KEY nome = vg_pnameIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_pname TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF
ENDIF
ENDIF
ENDFORM PROCURA_FUNCAO
amp---------------------------------------------------------------------amp Form VERIFICA_INCLUDE_FUNCAO_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM verifica_include_funcao_submit
CHECK p_ue IS NOT INITIAL OR p_badi IS NOT INITIALOR p_bte IS NOT INITIAL OR p_enh IS NOT INITIAL
LOOP AT ti_includes
ADD 1 TO vg_contadorDESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfillMOVE ti_includes-nivel TO vg_nivelADD 1 TO vg_nivel
- BORRA TABLA INTERNAREFRESH ti_programa
- REALIZA LECTURA DE INCLUDEFUNCION ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa
LOOP AT ti_programa
- PROCURA POR INCLUDESIF p_incl EQ c_xPERFORM procura_includeENDIF- PROCURA POR FUNCIONIF p_func EQ c_xPERFORM procura_funcaoENDIF- PROCURA POR SUBMITIF p_submit EQ c_xPERFORM procura_submitENDIF
ENDLOOP
ENDLOOP
ENDFORM VERIFICA_INCLUDE_FUNCAO_SUBMIT
amp---------------------------------------------------------------------amp Form EVITAR_TIME_OUTamp--------------------------------------------------------------------- Evito el TIME OUT visualizando un mensaje----------------------------------------------------------------------FORM evitar_time_out USING p_tfill LIKE sy-tfill
DATAvl_total(10) TYPE n
vl_atual(10) TYPE nl_tout LIKE sy-timlol_time(10) TYPE c
GET TIME FIELD l_tout
l_tout = l_tout - w_tini
MOVEp_tfill TO vl_totalvg_contador TO vl_atual
SHIFT vl_total LEFT DELETING LEADING 0SHIFT vl_atual LEFT DELETING LEADING 0WRITE l_tout TO l_time
CONCATENATE Tpo l_time Total vl_total Actual vl_atualINTO vg_textoSEPARATED BY space
CALL FUNCTION SAPGUI_PROGRESS_INDICATOREXPORTINGtext = vg_texto
ENDFORM EVITAR_TIME_OUT
amp---------------------------------------------------------------------amp Form PROCURA_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_submit
CLEAR vg_conta_espaco vg_palavra vg_ini_contagem
- VERIFICA SI LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_submit- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF vg_ini_contagem EQ c_x AND vg_caracter IS INITIALADD 1 TO vg_conta_espacoENDIF
IF NOT vg_caracter IS INITIALMOVE c_x TO vg_ini_contagemIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRAIF vg_conta_espaco LT 2CONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACION
TRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_submitCLEAR vg_palavraENDIFELSEEXITENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIFENDIF
ENDFORM PROCURA_SUBMIT
amp---------------------------------------------------------------------amp Form CONSISTI_PARAMETROSamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM consisti_parametros
IF p_nivel IS INITIALMOVE 1 TO p_nivelENDIF
IF p_prog IS INITIAL AND p_tcode IS INITIAL- EL NOMBRE DEL PROGRAMA Y EL NOMBRE DE LA TRANSACCION NO PUEDEN SER- NULOS UNO DE ELLOS DEBE SER INFORMADOMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e01STOPENDIF
IF NOT p_prog IS INITIAL AND NOT p_tcode IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME NOMBRE DE PROGRAMA O TRANSACCIONMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e02STOPENDIF
IF p_ue IS INITIAL AND p_badi IS INITIAL AND p_bte IS INITIALAND p_sust IS INITIAL AND p_val IS INITIAL AND p_fdex IS INITIALAND p_enh IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME UN TIPO DE MEJORAMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e03STOPENDIF
ENDFORM CONSISTI_PARAMETROS
amp---------------------------------------------------------------------
amp Form INICIALIZA_TABELAamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM inicializa_tabela
DATAe_tstc TYPE tstcl_tcode TYPE sy-tcode
REFRESH ti_includes
IF NOT p_prog IS INITIAL
MOVE p_prog TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includes
- BUSCO EL PROGRAMAREAD REPORT ti_includes-nome INTO ti_programa
IF sy-subrc EQ 0REFRESH ti_programaELSE- EL PROGRAMA NO EXISTEMESSAGE s893(pz) WITH El programa p_prog no existeSTOPENDIF
ELSEIF NOT p_tcode IS INITIAL
SELECT SINGLE FROM tstcWHERE tcode EQ p_tcode
IF sy-subrc EQ 0
IF tstc-pgmna IS NOT INITIALMOVE tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includesELSE Se trata de una transaccioacuten de paraacutemetros Obtengo la transaccioacuten asociadaCALL FUNCTION RS_TRANSACTION_SINGLE_GETEXPORTINGparameter_tcode = p_tcodeIMPORTINGtcode = l_tcode
SELECT SINGLE INTO e_tstcFROM tstcWHERE tcode EQ l_tcode
IF sy-subrc EQ 0MOVE e_tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivel
APPEND ti_includesELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeENDIFENDIFELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeSTOPENDIFENDIF
ENDFORM INICIALIZA_TABELA
amp---------------------------------------------------------------------amp Form armar_alvamp--------------------------------------------------------------------- Armo el ALV----------------------------------------------------------------------FORM armar_alv
DATAl_repid TYPE sy-repid
MOVE sy-repid TO l_repid
CALL FUNCTION REUSE_ALV_BLOCK_LIST_INITEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMAND
IF p_ue IS NOT INITIALPERFORM construir_catalogo_exitPERFORM definir_layout USING TI_USER_EXITCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGEPERFORM sort TABLES ti_sortUSING TI_USER_EXIT
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_USER_EXITit_events = ti_eventsit_sort = ti_sorti_text = User-exitTABLESt_outtab = ti_user_exitEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
PERFORM construir_catalogo_uexitPERFORM definir_layout USING TI_FINAL
CHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_UEXITPERFORM sort TABLES ti_sortUSING TI_FINAL
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FINALit_events = ti_eventsit_sort = ti_sorti_text = User-exit TxCMODTABLESt_outtab = ti_finalEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_badi IS NOT INITIALPERFORM construir_catalogo_badiPERFORM definir_layout USING TI_BADICHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BADIPERFORM sort TABLES ti_sortUSING TI_BADI
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_BADIit_events = ti_eventsit_sort = ti_sorti_text = BadisTABLESt_outtab = ti_badiEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_bte IS NOT INITIALPERFORM construir_catalogo_btePERFORM definir_layout USING TI_BTECHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BTEPERFORM sort TABLES ti_sortUSING TI_BTE
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layout
it_fieldcat = ti_cati_tabname = TI_BTEit_events = ti_eventsit_sort = ti_sorti_text = BTETABLESt_outtab = ti_bteEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_enh IS NOT INITIALPERFORM construir_catalogo_enhPERFORM definir_layout USING TI_ENHCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHPERFORM sort TABLES ti_sortUSING TI_ENH
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHit_events = ti_eventsit_sort = ti_sorti_text = ENHTABLESt_outtab = ti_enhEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
PERFORM construir_catalogo_enhobjPERFORM definir_layout USING TI_ENHOBJCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHOBJPERFORM sort TABLES ti_sortUSING TI_ENHOBJ
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHOBJit_events = ti_eventsit_sort = ti_sorti_text = ENHOBJTABLESt_outtab = ti_enhobjEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX
PERFORM sort TABLES ti_sortUSING TI_FDEX
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
ENDFORM armar_alv
amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03
CF X c_text_04
ENDFORM construir_catalogo_EXIT
amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic
STATICS l_col_pos LIKE sy-cucol
Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname
CHECK sy-subrc EQ 0
IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF
IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF
wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon
MODIFY pt_cat FROM wa_cat INDEX sy-tabix
ENDFORM asignar_campo_a_catalogo
amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv
CLEAR p_layout
IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X
ENDFORM definir_layout
amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n
REFRESH ti_eventsCLEAR wa_events
ALV Simple Block appendl_type = 2
Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events
Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF
ENDFORM construir_eventos
amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit
ENDFORM top_of_page
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD
ENDFORM TOP_OF_PAGE_UEXIT
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs
ENDFORM TOP_OF_PAGE_FDEX
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs
ENDFORM TOP_OF_PAGE_BADI
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant
CONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs
ENDFORM TOP_OF_PAGE_BTE
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENH
amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any
CLEAR pt_sort wa_sortREFRESH pt_sort
CASE p_tabnameWHEN TI_SUST
wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_VAL
wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_ENHOBJ
wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN OTHERS
IF p_tabname NE TI_FINAL
wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
IF p_tabname NE TI_FDEX
wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
ENDIF
ELSE
wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE
ENDFORM sort
amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado
wa_print-reserve_lines = 2
CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY
EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM mostrar_listado
amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield
DATA l_break TYPE c
Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE
Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL
CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf
ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF 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-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF
WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF
WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF
WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea
ti_bte-breakMOVE X TO l_breakENDIF
WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF
WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF
WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF
WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF
WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf
CALL FUNCTION RS_NAVIGATION_MONITORENDIF
WHEN TI_CIMP Customer implementation
CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X
ENDFORM user_command
amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM visualizar_linea
amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0
CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM buscar_exit
amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi
DATAl_subrc LIKE sy-subrc
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF
IF l_subrc EQ 0CLEAR ti_badi
- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF
ENDFORM buscar_badi
amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform
CHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
ENDFORM buscar_bte
amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4
CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS
cancel = 1wrong_type = 2OTHERS = 3
ENDFORM repid_f4
amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf
DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
SEARCH p_cf FOR c_type_ref
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
SPLIT p_cf+sy-fdpos(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
READ TABLE lt_cf INDEX 4
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
CHECK sy-subrc IS INITIAL
Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten
textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer
CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4
IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF
WHEN OTHERS Do Nothing ENDCASE
ENDFORM visualizar_badi
amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf
DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
CLEAR d010inc modsap modact
Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid
IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF
SEARCH p_cf FOR c_enhance
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
MOVE p_cf+sy-fdpos(l_cf) TO l_linea
SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3
TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS
Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _
Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit
CHECK sy-subrc IS INITIAL
Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM
modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3
ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname
CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ENDIF
ENDFORM visualizar_exit
amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit
DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo
DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe
DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE
CHECK p_fdex IS NOT INITIAL
CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe
MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex
IF p_prog IS NOT INITIAL
MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF
Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog
LOOP AT lt_d020s
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
REFRESH lt_d021s
Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4
Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X
SEARCH lt_d021s-fnam FOR -
IF sy-subrc IS INITIAL
MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum
Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname
APPEND lt_campo
ENDIF
ENDLOOPENDLOOP
CHECK lt_campo[] IS NOT INITIAL
SORT lt_campo BY repid dnum tabname fieldname
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
LOOP AT ti_programa
IF p_ue EQ XPERFORM buscar_exitPERFORM busca_enhancementsENDIF
IF p_badi EQ XPERFORM buscar_badiENDIF
IF p_bte EQ XPERFORM buscar_bteENDIF
IF p_enh EQ XPERFORM buscar_punto_ampliacionENDIF
ENDLOOPENDLOOP
ENDFORM BUSCA_USER_EXIT_BADI_BTE
amp---------------------------------------------------------------------amp Form BUSCA_ENHANCEMENTSamp--------------------------------------------------------------------- Busca las llamadas a los USER-EXIT----------------------------------------------------------------------FORM busca_enhancements
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE EN ALGUN ENHANCEMENTSEARCH ti_programa-cf FOR c_enhance- SE ENCONTRO EL ENHANCEMENT Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentarioCLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM BUSCA_ENHANCEMENTS
amp---------------------------------------------------------------------amp Form EXIBE_USER_EXITamp--------------------------------------------------------------------- Muestra los datos----------------------------------------------------------------------FORM exibe_user_exit
PERFORM armar_alv
PERFORM mostrar_listado
ENDFORM EXIBE_USER_EXIT
amp---------------------------------------------------------------------amp Form PROCURA_INCLUDEamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_include
CLEAR vg_palavra
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_include- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN STRUCTURESEARCH ti_programa-cf FOR c_struct
IF sy-subrc IS INITIALEXITENDIF
- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_includeCLEAR vg_palavraENDIFENDIFENDDO- GRABA NOMBRE DEL INCLUDE PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF
ENDIF
ENDFORM PROCURA_INCLUDE
amp---------------------------------------------------------------------amp Form PROCURA_FUNCAOamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_funcao
CLEAR vg_conta_aspavg_palavra
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA FUNCIONSEARCH ti_programa-cf FOR c_funcao_2- SE ENCONTRO UNA FUNCION Y LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DE LA INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_aspaADD 1 TO vg_conta_aspaIF vg_conta_aspa EQ 2EXITENDIFENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_funcao_1CLEAR vg_palavraENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITCLEAR vg_pnameSELECT SINGLE pnameINTO vg_pnameFROM tfdirWHERE funcname EQ vg_palavraIF sy-subrc EQ 0
READ TABLE ti_includes WITH KEY nome = vg_pnameIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_pname TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF
ENDIF
ENDIF
ENDFORM PROCURA_FUNCAO
amp---------------------------------------------------------------------amp Form VERIFICA_INCLUDE_FUNCAO_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM verifica_include_funcao_submit
CHECK p_ue IS NOT INITIAL OR p_badi IS NOT INITIALOR p_bte IS NOT INITIAL OR p_enh IS NOT INITIAL
LOOP AT ti_includes
ADD 1 TO vg_contadorDESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfillMOVE ti_includes-nivel TO vg_nivelADD 1 TO vg_nivel
- BORRA TABLA INTERNAREFRESH ti_programa
- REALIZA LECTURA DE INCLUDEFUNCION ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa
LOOP AT ti_programa
- PROCURA POR INCLUDESIF p_incl EQ c_xPERFORM procura_includeENDIF- PROCURA POR FUNCIONIF p_func EQ c_xPERFORM procura_funcaoENDIF- PROCURA POR SUBMITIF p_submit EQ c_xPERFORM procura_submitENDIF
ENDLOOP
ENDLOOP
ENDFORM VERIFICA_INCLUDE_FUNCAO_SUBMIT
amp---------------------------------------------------------------------amp Form EVITAR_TIME_OUTamp--------------------------------------------------------------------- Evito el TIME OUT visualizando un mensaje----------------------------------------------------------------------FORM evitar_time_out USING p_tfill LIKE sy-tfill
DATAvl_total(10) TYPE n
vl_atual(10) TYPE nl_tout LIKE sy-timlol_time(10) TYPE c
GET TIME FIELD l_tout
l_tout = l_tout - w_tini
MOVEp_tfill TO vl_totalvg_contador TO vl_atual
SHIFT vl_total LEFT DELETING LEADING 0SHIFT vl_atual LEFT DELETING LEADING 0WRITE l_tout TO l_time
CONCATENATE Tpo l_time Total vl_total Actual vl_atualINTO vg_textoSEPARATED BY space
CALL FUNCTION SAPGUI_PROGRESS_INDICATOREXPORTINGtext = vg_texto
ENDFORM EVITAR_TIME_OUT
amp---------------------------------------------------------------------amp Form PROCURA_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_submit
CLEAR vg_conta_espaco vg_palavra vg_ini_contagem
- VERIFICA SI LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_submit- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF vg_ini_contagem EQ c_x AND vg_caracter IS INITIALADD 1 TO vg_conta_espacoENDIF
IF NOT vg_caracter IS INITIALMOVE c_x TO vg_ini_contagemIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRAIF vg_conta_espaco LT 2CONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACION
TRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_submitCLEAR vg_palavraENDIFELSEEXITENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIFENDIF
ENDFORM PROCURA_SUBMIT
amp---------------------------------------------------------------------amp Form CONSISTI_PARAMETROSamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM consisti_parametros
IF p_nivel IS INITIALMOVE 1 TO p_nivelENDIF
IF p_prog IS INITIAL AND p_tcode IS INITIAL- EL NOMBRE DEL PROGRAMA Y EL NOMBRE DE LA TRANSACCION NO PUEDEN SER- NULOS UNO DE ELLOS DEBE SER INFORMADOMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e01STOPENDIF
IF NOT p_prog IS INITIAL AND NOT p_tcode IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME NOMBRE DE PROGRAMA O TRANSACCIONMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e02STOPENDIF
IF p_ue IS INITIAL AND p_badi IS INITIAL AND p_bte IS INITIALAND p_sust IS INITIAL AND p_val IS INITIAL AND p_fdex IS INITIALAND p_enh IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME UN TIPO DE MEJORAMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e03STOPENDIF
ENDFORM CONSISTI_PARAMETROS
amp---------------------------------------------------------------------
amp Form INICIALIZA_TABELAamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM inicializa_tabela
DATAe_tstc TYPE tstcl_tcode TYPE sy-tcode
REFRESH ti_includes
IF NOT p_prog IS INITIAL
MOVE p_prog TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includes
- BUSCO EL PROGRAMAREAD REPORT ti_includes-nome INTO ti_programa
IF sy-subrc EQ 0REFRESH ti_programaELSE- EL PROGRAMA NO EXISTEMESSAGE s893(pz) WITH El programa p_prog no existeSTOPENDIF
ELSEIF NOT p_tcode IS INITIAL
SELECT SINGLE FROM tstcWHERE tcode EQ p_tcode
IF sy-subrc EQ 0
IF tstc-pgmna IS NOT INITIALMOVE tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includesELSE Se trata de una transaccioacuten de paraacutemetros Obtengo la transaccioacuten asociadaCALL FUNCTION RS_TRANSACTION_SINGLE_GETEXPORTINGparameter_tcode = p_tcodeIMPORTINGtcode = l_tcode
SELECT SINGLE INTO e_tstcFROM tstcWHERE tcode EQ l_tcode
IF sy-subrc EQ 0MOVE e_tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivel
APPEND ti_includesELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeENDIFENDIFELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeSTOPENDIFENDIF
ENDFORM INICIALIZA_TABELA
amp---------------------------------------------------------------------amp Form armar_alvamp--------------------------------------------------------------------- Armo el ALV----------------------------------------------------------------------FORM armar_alv
DATAl_repid TYPE sy-repid
MOVE sy-repid TO l_repid
CALL FUNCTION REUSE_ALV_BLOCK_LIST_INITEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMAND
IF p_ue IS NOT INITIALPERFORM construir_catalogo_exitPERFORM definir_layout USING TI_USER_EXITCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGEPERFORM sort TABLES ti_sortUSING TI_USER_EXIT
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_USER_EXITit_events = ti_eventsit_sort = ti_sorti_text = User-exitTABLESt_outtab = ti_user_exitEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
PERFORM construir_catalogo_uexitPERFORM definir_layout USING TI_FINAL
CHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_UEXITPERFORM sort TABLES ti_sortUSING TI_FINAL
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FINALit_events = ti_eventsit_sort = ti_sorti_text = User-exit TxCMODTABLESt_outtab = ti_finalEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_badi IS NOT INITIALPERFORM construir_catalogo_badiPERFORM definir_layout USING TI_BADICHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BADIPERFORM sort TABLES ti_sortUSING TI_BADI
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_BADIit_events = ti_eventsit_sort = ti_sorti_text = BadisTABLESt_outtab = ti_badiEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_bte IS NOT INITIALPERFORM construir_catalogo_btePERFORM definir_layout USING TI_BTECHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BTEPERFORM sort TABLES ti_sortUSING TI_BTE
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layout
it_fieldcat = ti_cati_tabname = TI_BTEit_events = ti_eventsit_sort = ti_sorti_text = BTETABLESt_outtab = ti_bteEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_enh IS NOT INITIALPERFORM construir_catalogo_enhPERFORM definir_layout USING TI_ENHCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHPERFORM sort TABLES ti_sortUSING TI_ENH
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHit_events = ti_eventsit_sort = ti_sorti_text = ENHTABLESt_outtab = ti_enhEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
PERFORM construir_catalogo_enhobjPERFORM definir_layout USING TI_ENHOBJCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHOBJPERFORM sort TABLES ti_sortUSING TI_ENHOBJ
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHOBJit_events = ti_eventsit_sort = ti_sorti_text = ENHOBJTABLESt_outtab = ti_enhobjEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX
PERFORM sort TABLES ti_sortUSING TI_FDEX
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
ENDFORM armar_alv
amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03
CF X c_text_04
ENDFORM construir_catalogo_EXIT
amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic
STATICS l_col_pos LIKE sy-cucol
Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname
CHECK sy-subrc EQ 0
IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF
IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF
wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon
MODIFY pt_cat FROM wa_cat INDEX sy-tabix
ENDFORM asignar_campo_a_catalogo
amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv
CLEAR p_layout
IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X
ENDFORM definir_layout
amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n
REFRESH ti_eventsCLEAR wa_events
ALV Simple Block appendl_type = 2
Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events
Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF
ENDFORM construir_eventos
amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit
ENDFORM top_of_page
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD
ENDFORM TOP_OF_PAGE_UEXIT
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs
ENDFORM TOP_OF_PAGE_FDEX
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs
ENDFORM TOP_OF_PAGE_BADI
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant
CONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs
ENDFORM TOP_OF_PAGE_BTE
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENH
amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any
CLEAR pt_sort wa_sortREFRESH pt_sort
CASE p_tabnameWHEN TI_SUST
wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_VAL
wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_ENHOBJ
wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN OTHERS
IF p_tabname NE TI_FINAL
wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
IF p_tabname NE TI_FDEX
wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
ENDIF
ELSE
wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE
ENDFORM sort
amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado
wa_print-reserve_lines = 2
CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY
EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM mostrar_listado
amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield
DATA l_break TYPE c
Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE
Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL
CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf
ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF 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-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF
WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF
WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF
WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea
ti_bte-breakMOVE X TO l_breakENDIF
WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF
WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF
WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF
WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF
WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf
CALL FUNCTION RS_NAVIGATION_MONITORENDIF
WHEN TI_CIMP Customer implementation
CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X
ENDFORM user_command
amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM visualizar_linea
amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0
CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM buscar_exit
amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi
DATAl_subrc LIKE sy-subrc
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF
IF l_subrc EQ 0CLEAR ti_badi
- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF
ENDFORM buscar_badi
amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform
CHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
ENDFORM buscar_bte
amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4
CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS
cancel = 1wrong_type = 2OTHERS = 3
ENDFORM repid_f4
amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf
DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
SEARCH p_cf FOR c_type_ref
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
SPLIT p_cf+sy-fdpos(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
READ TABLE lt_cf INDEX 4
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
CHECK sy-subrc IS INITIAL
Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten
textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer
CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4
IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF
WHEN OTHERS Do Nothing ENDCASE
ENDFORM visualizar_badi
amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf
DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
CLEAR d010inc modsap modact
Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid
IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF
SEARCH p_cf FOR c_enhance
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
MOVE p_cf+sy-fdpos(l_cf) TO l_linea
SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3
TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS
Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _
Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit
CHECK sy-subrc IS INITIAL
Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM
modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3
ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname
CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ENDIF
ENDFORM visualizar_exit
amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit
DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo
DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe
DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE
CHECK p_fdex IS NOT INITIAL
CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe
MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex
IF p_prog IS NOT INITIAL
MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF
Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog
LOOP AT lt_d020s
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
REFRESH lt_d021s
Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4
Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X
SEARCH lt_d021s-fnam FOR -
IF sy-subrc IS INITIAL
MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum
Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname
APPEND lt_campo
ENDIF
ENDLOOPENDLOOP
CHECK lt_campo[] IS NOT INITIAL
SORT lt_campo BY repid dnum tabname fieldname
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
PERFORM mostrar_listado
ENDFORM EXIBE_USER_EXIT
amp---------------------------------------------------------------------amp Form PROCURA_INCLUDEamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_include
CLEAR vg_palavra
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_include- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN STRUCTURESEARCH ti_programa-cf FOR c_struct
IF sy-subrc IS INITIALEXITENDIF
- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_includeCLEAR vg_palavraENDIFENDIFENDDO- GRABA NOMBRE DEL INCLUDE PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF
ENDIF
ENDFORM PROCURA_INCLUDE
amp---------------------------------------------------------------------amp Form PROCURA_FUNCAOamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_funcao
CLEAR vg_conta_aspavg_palavra
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA FUNCIONSEARCH ti_programa-cf FOR c_funcao_2- SE ENCONTRO UNA FUNCION Y LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DE LA INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_aspaADD 1 TO vg_conta_aspaIF vg_conta_aspa EQ 2EXITENDIFENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_funcao_1CLEAR vg_palavraENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITCLEAR vg_pnameSELECT SINGLE pnameINTO vg_pnameFROM tfdirWHERE funcname EQ vg_palavraIF sy-subrc EQ 0
READ TABLE ti_includes WITH KEY nome = vg_pnameIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_pname TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF
ENDIF
ENDIF
ENDFORM PROCURA_FUNCAO
amp---------------------------------------------------------------------amp Form VERIFICA_INCLUDE_FUNCAO_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM verifica_include_funcao_submit
CHECK p_ue IS NOT INITIAL OR p_badi IS NOT INITIALOR p_bte IS NOT INITIAL OR p_enh IS NOT INITIAL
LOOP AT ti_includes
ADD 1 TO vg_contadorDESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfillMOVE ti_includes-nivel TO vg_nivelADD 1 TO vg_nivel
- BORRA TABLA INTERNAREFRESH ti_programa
- REALIZA LECTURA DE INCLUDEFUNCION ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa
LOOP AT ti_programa
- PROCURA POR INCLUDESIF p_incl EQ c_xPERFORM procura_includeENDIF- PROCURA POR FUNCIONIF p_func EQ c_xPERFORM procura_funcaoENDIF- PROCURA POR SUBMITIF p_submit EQ c_xPERFORM procura_submitENDIF
ENDLOOP
ENDLOOP
ENDFORM VERIFICA_INCLUDE_FUNCAO_SUBMIT
amp---------------------------------------------------------------------amp Form EVITAR_TIME_OUTamp--------------------------------------------------------------------- Evito el TIME OUT visualizando un mensaje----------------------------------------------------------------------FORM evitar_time_out USING p_tfill LIKE sy-tfill
DATAvl_total(10) TYPE n
vl_atual(10) TYPE nl_tout LIKE sy-timlol_time(10) TYPE c
GET TIME FIELD l_tout
l_tout = l_tout - w_tini
MOVEp_tfill TO vl_totalvg_contador TO vl_atual
SHIFT vl_total LEFT DELETING LEADING 0SHIFT vl_atual LEFT DELETING LEADING 0WRITE l_tout TO l_time
CONCATENATE Tpo l_time Total vl_total Actual vl_atualINTO vg_textoSEPARATED BY space
CALL FUNCTION SAPGUI_PROGRESS_INDICATOREXPORTINGtext = vg_texto
ENDFORM EVITAR_TIME_OUT
amp---------------------------------------------------------------------amp Form PROCURA_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_submit
CLEAR vg_conta_espaco vg_palavra vg_ini_contagem
- VERIFICA SI LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_submit- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF vg_ini_contagem EQ c_x AND vg_caracter IS INITIALADD 1 TO vg_conta_espacoENDIF
IF NOT vg_caracter IS INITIALMOVE c_x TO vg_ini_contagemIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRAIF vg_conta_espaco LT 2CONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACION
TRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_submitCLEAR vg_palavraENDIFELSEEXITENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIFENDIF
ENDFORM PROCURA_SUBMIT
amp---------------------------------------------------------------------amp Form CONSISTI_PARAMETROSamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM consisti_parametros
IF p_nivel IS INITIALMOVE 1 TO p_nivelENDIF
IF p_prog IS INITIAL AND p_tcode IS INITIAL- EL NOMBRE DEL PROGRAMA Y EL NOMBRE DE LA TRANSACCION NO PUEDEN SER- NULOS UNO DE ELLOS DEBE SER INFORMADOMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e01STOPENDIF
IF NOT p_prog IS INITIAL AND NOT p_tcode IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME NOMBRE DE PROGRAMA O TRANSACCIONMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e02STOPENDIF
IF p_ue IS INITIAL AND p_badi IS INITIAL AND p_bte IS INITIALAND p_sust IS INITIAL AND p_val IS INITIAL AND p_fdex IS INITIALAND p_enh IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME UN TIPO DE MEJORAMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e03STOPENDIF
ENDFORM CONSISTI_PARAMETROS
amp---------------------------------------------------------------------
amp Form INICIALIZA_TABELAamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM inicializa_tabela
DATAe_tstc TYPE tstcl_tcode TYPE sy-tcode
REFRESH ti_includes
IF NOT p_prog IS INITIAL
MOVE p_prog TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includes
- BUSCO EL PROGRAMAREAD REPORT ti_includes-nome INTO ti_programa
IF sy-subrc EQ 0REFRESH ti_programaELSE- EL PROGRAMA NO EXISTEMESSAGE s893(pz) WITH El programa p_prog no existeSTOPENDIF
ELSEIF NOT p_tcode IS INITIAL
SELECT SINGLE FROM tstcWHERE tcode EQ p_tcode
IF sy-subrc EQ 0
IF tstc-pgmna IS NOT INITIALMOVE tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includesELSE Se trata de una transaccioacuten de paraacutemetros Obtengo la transaccioacuten asociadaCALL FUNCTION RS_TRANSACTION_SINGLE_GETEXPORTINGparameter_tcode = p_tcodeIMPORTINGtcode = l_tcode
SELECT SINGLE INTO e_tstcFROM tstcWHERE tcode EQ l_tcode
IF sy-subrc EQ 0MOVE e_tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivel
APPEND ti_includesELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeENDIFENDIFELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeSTOPENDIFENDIF
ENDFORM INICIALIZA_TABELA
amp---------------------------------------------------------------------amp Form armar_alvamp--------------------------------------------------------------------- Armo el ALV----------------------------------------------------------------------FORM armar_alv
DATAl_repid TYPE sy-repid
MOVE sy-repid TO l_repid
CALL FUNCTION REUSE_ALV_BLOCK_LIST_INITEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMAND
IF p_ue IS NOT INITIALPERFORM construir_catalogo_exitPERFORM definir_layout USING TI_USER_EXITCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGEPERFORM sort TABLES ti_sortUSING TI_USER_EXIT
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_USER_EXITit_events = ti_eventsit_sort = ti_sorti_text = User-exitTABLESt_outtab = ti_user_exitEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
PERFORM construir_catalogo_uexitPERFORM definir_layout USING TI_FINAL
CHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_UEXITPERFORM sort TABLES ti_sortUSING TI_FINAL
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FINALit_events = ti_eventsit_sort = ti_sorti_text = User-exit TxCMODTABLESt_outtab = ti_finalEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_badi IS NOT INITIALPERFORM construir_catalogo_badiPERFORM definir_layout USING TI_BADICHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BADIPERFORM sort TABLES ti_sortUSING TI_BADI
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_BADIit_events = ti_eventsit_sort = ti_sorti_text = BadisTABLESt_outtab = ti_badiEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_bte IS NOT INITIALPERFORM construir_catalogo_btePERFORM definir_layout USING TI_BTECHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BTEPERFORM sort TABLES ti_sortUSING TI_BTE
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layout
it_fieldcat = ti_cati_tabname = TI_BTEit_events = ti_eventsit_sort = ti_sorti_text = BTETABLESt_outtab = ti_bteEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_enh IS NOT INITIALPERFORM construir_catalogo_enhPERFORM definir_layout USING TI_ENHCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHPERFORM sort TABLES ti_sortUSING TI_ENH
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHit_events = ti_eventsit_sort = ti_sorti_text = ENHTABLESt_outtab = ti_enhEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
PERFORM construir_catalogo_enhobjPERFORM definir_layout USING TI_ENHOBJCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHOBJPERFORM sort TABLES ti_sortUSING TI_ENHOBJ
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHOBJit_events = ti_eventsit_sort = ti_sorti_text = ENHOBJTABLESt_outtab = ti_enhobjEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX
PERFORM sort TABLES ti_sortUSING TI_FDEX
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
ENDFORM armar_alv
amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03
CF X c_text_04
ENDFORM construir_catalogo_EXIT
amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic
STATICS l_col_pos LIKE sy-cucol
Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname
CHECK sy-subrc EQ 0
IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF
IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF
wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon
MODIFY pt_cat FROM wa_cat INDEX sy-tabix
ENDFORM asignar_campo_a_catalogo
amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv
CLEAR p_layout
IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X
ENDFORM definir_layout
amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n
REFRESH ti_eventsCLEAR wa_events
ALV Simple Block appendl_type = 2
Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events
Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF
ENDFORM construir_eventos
amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit
ENDFORM top_of_page
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD
ENDFORM TOP_OF_PAGE_UEXIT
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs
ENDFORM TOP_OF_PAGE_FDEX
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs
ENDFORM TOP_OF_PAGE_BADI
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant
CONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs
ENDFORM TOP_OF_PAGE_BTE
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENH
amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any
CLEAR pt_sort wa_sortREFRESH pt_sort
CASE p_tabnameWHEN TI_SUST
wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_VAL
wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_ENHOBJ
wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN OTHERS
IF p_tabname NE TI_FINAL
wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
IF p_tabname NE TI_FDEX
wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
ENDIF
ELSE
wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE
ENDFORM sort
amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado
wa_print-reserve_lines = 2
CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY
EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM mostrar_listado
amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield
DATA l_break TYPE c
Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE
Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL
CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf
ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF 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-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF
WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF
WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF
WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea
ti_bte-breakMOVE X TO l_breakENDIF
WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF
WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF
WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF
WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF
WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf
CALL FUNCTION RS_NAVIGATION_MONITORENDIF
WHEN TI_CIMP Customer implementation
CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X
ENDFORM user_command
amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM visualizar_linea
amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0
CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM buscar_exit
amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi
DATAl_subrc LIKE sy-subrc
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF
IF l_subrc EQ 0CLEAR ti_badi
- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF
ENDFORM buscar_badi
amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform
CHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
ENDFORM buscar_bte
amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4
CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS
cancel = 1wrong_type = 2OTHERS = 3
ENDFORM repid_f4
amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf
DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
SEARCH p_cf FOR c_type_ref
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
SPLIT p_cf+sy-fdpos(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
READ TABLE lt_cf INDEX 4
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
CHECK sy-subrc IS INITIAL
Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten
textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer
CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4
IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF
WHEN OTHERS Do Nothing ENDCASE
ENDFORM visualizar_badi
amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf
DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
CLEAR d010inc modsap modact
Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid
IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF
SEARCH p_cf FOR c_enhance
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
MOVE p_cf+sy-fdpos(l_cf) TO l_linea
SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3
TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS
Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _
Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit
CHECK sy-subrc IS INITIAL
Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM
modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3
ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname
CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ENDIF
ENDFORM visualizar_exit
amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit
DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo
DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe
DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE
CHECK p_fdex IS NOT INITIAL
CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe
MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex
IF p_prog IS NOT INITIAL
MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF
Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog
LOOP AT lt_d020s
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
REFRESH lt_d021s
Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4
Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X
SEARCH lt_d021s-fnam FOR -
IF sy-subrc IS INITIAL
MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum
Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname
APPEND lt_campo
ENDIF
ENDLOOPENDLOOP
CHECK lt_campo[] IS NOT INITIAL
SORT lt_campo BY repid dnum tabname fieldname
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
ENDFORM PROCURA_INCLUDE
amp---------------------------------------------------------------------amp Form PROCURA_FUNCAOamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_funcao
CLEAR vg_conta_aspavg_palavra
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA FUNCIONSEARCH ti_programa-cf FOR c_funcao_2- SE ENCONTRO UNA FUNCION Y LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DE LA INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_aspaADD 1 TO vg_conta_aspaIF vg_conta_aspa EQ 2EXITENDIFENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_funcao_1CLEAR vg_palavraENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITCLEAR vg_pnameSELECT SINGLE pnameINTO vg_pnameFROM tfdirWHERE funcname EQ vg_palavraIF sy-subrc EQ 0
READ TABLE ti_includes WITH KEY nome = vg_pnameIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_pname TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF
ENDIF
ENDIF
ENDFORM PROCURA_FUNCAO
amp---------------------------------------------------------------------amp Form VERIFICA_INCLUDE_FUNCAO_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM verifica_include_funcao_submit
CHECK p_ue IS NOT INITIAL OR p_badi IS NOT INITIALOR p_bte IS NOT INITIAL OR p_enh IS NOT INITIAL
LOOP AT ti_includes
ADD 1 TO vg_contadorDESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfillMOVE ti_includes-nivel TO vg_nivelADD 1 TO vg_nivel
- BORRA TABLA INTERNAREFRESH ti_programa
- REALIZA LECTURA DE INCLUDEFUNCION ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa
LOOP AT ti_programa
- PROCURA POR INCLUDESIF p_incl EQ c_xPERFORM procura_includeENDIF- PROCURA POR FUNCIONIF p_func EQ c_xPERFORM procura_funcaoENDIF- PROCURA POR SUBMITIF p_submit EQ c_xPERFORM procura_submitENDIF
ENDLOOP
ENDLOOP
ENDFORM VERIFICA_INCLUDE_FUNCAO_SUBMIT
amp---------------------------------------------------------------------amp Form EVITAR_TIME_OUTamp--------------------------------------------------------------------- Evito el TIME OUT visualizando un mensaje----------------------------------------------------------------------FORM evitar_time_out USING p_tfill LIKE sy-tfill
DATAvl_total(10) TYPE n
vl_atual(10) TYPE nl_tout LIKE sy-timlol_time(10) TYPE c
GET TIME FIELD l_tout
l_tout = l_tout - w_tini
MOVEp_tfill TO vl_totalvg_contador TO vl_atual
SHIFT vl_total LEFT DELETING LEADING 0SHIFT vl_atual LEFT DELETING LEADING 0WRITE l_tout TO l_time
CONCATENATE Tpo l_time Total vl_total Actual vl_atualINTO vg_textoSEPARATED BY space
CALL FUNCTION SAPGUI_PROGRESS_INDICATOREXPORTINGtext = vg_texto
ENDFORM EVITAR_TIME_OUT
amp---------------------------------------------------------------------amp Form PROCURA_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_submit
CLEAR vg_conta_espaco vg_palavra vg_ini_contagem
- VERIFICA SI LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_submit- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF vg_ini_contagem EQ c_x AND vg_caracter IS INITIALADD 1 TO vg_conta_espacoENDIF
IF NOT vg_caracter IS INITIALMOVE c_x TO vg_ini_contagemIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRAIF vg_conta_espaco LT 2CONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACION
TRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_submitCLEAR vg_palavraENDIFELSEEXITENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIFENDIF
ENDFORM PROCURA_SUBMIT
amp---------------------------------------------------------------------amp Form CONSISTI_PARAMETROSamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM consisti_parametros
IF p_nivel IS INITIALMOVE 1 TO p_nivelENDIF
IF p_prog IS INITIAL AND p_tcode IS INITIAL- EL NOMBRE DEL PROGRAMA Y EL NOMBRE DE LA TRANSACCION NO PUEDEN SER- NULOS UNO DE ELLOS DEBE SER INFORMADOMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e01STOPENDIF
IF NOT p_prog IS INITIAL AND NOT p_tcode IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME NOMBRE DE PROGRAMA O TRANSACCIONMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e02STOPENDIF
IF p_ue IS INITIAL AND p_badi IS INITIAL AND p_bte IS INITIALAND p_sust IS INITIAL AND p_val IS INITIAL AND p_fdex IS INITIALAND p_enh IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME UN TIPO DE MEJORAMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e03STOPENDIF
ENDFORM CONSISTI_PARAMETROS
amp---------------------------------------------------------------------
amp Form INICIALIZA_TABELAamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM inicializa_tabela
DATAe_tstc TYPE tstcl_tcode TYPE sy-tcode
REFRESH ti_includes
IF NOT p_prog IS INITIAL
MOVE p_prog TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includes
- BUSCO EL PROGRAMAREAD REPORT ti_includes-nome INTO ti_programa
IF sy-subrc EQ 0REFRESH ti_programaELSE- EL PROGRAMA NO EXISTEMESSAGE s893(pz) WITH El programa p_prog no existeSTOPENDIF
ELSEIF NOT p_tcode IS INITIAL
SELECT SINGLE FROM tstcWHERE tcode EQ p_tcode
IF sy-subrc EQ 0
IF tstc-pgmna IS NOT INITIALMOVE tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includesELSE Se trata de una transaccioacuten de paraacutemetros Obtengo la transaccioacuten asociadaCALL FUNCTION RS_TRANSACTION_SINGLE_GETEXPORTINGparameter_tcode = p_tcodeIMPORTINGtcode = l_tcode
SELECT SINGLE INTO e_tstcFROM tstcWHERE tcode EQ l_tcode
IF sy-subrc EQ 0MOVE e_tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivel
APPEND ti_includesELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeENDIFENDIFELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeSTOPENDIFENDIF
ENDFORM INICIALIZA_TABELA
amp---------------------------------------------------------------------amp Form armar_alvamp--------------------------------------------------------------------- Armo el ALV----------------------------------------------------------------------FORM armar_alv
DATAl_repid TYPE sy-repid
MOVE sy-repid TO l_repid
CALL FUNCTION REUSE_ALV_BLOCK_LIST_INITEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMAND
IF p_ue IS NOT INITIALPERFORM construir_catalogo_exitPERFORM definir_layout USING TI_USER_EXITCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGEPERFORM sort TABLES ti_sortUSING TI_USER_EXIT
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_USER_EXITit_events = ti_eventsit_sort = ti_sorti_text = User-exitTABLESt_outtab = ti_user_exitEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
PERFORM construir_catalogo_uexitPERFORM definir_layout USING TI_FINAL
CHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_UEXITPERFORM sort TABLES ti_sortUSING TI_FINAL
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FINALit_events = ti_eventsit_sort = ti_sorti_text = User-exit TxCMODTABLESt_outtab = ti_finalEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_badi IS NOT INITIALPERFORM construir_catalogo_badiPERFORM definir_layout USING TI_BADICHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BADIPERFORM sort TABLES ti_sortUSING TI_BADI
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_BADIit_events = ti_eventsit_sort = ti_sorti_text = BadisTABLESt_outtab = ti_badiEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_bte IS NOT INITIALPERFORM construir_catalogo_btePERFORM definir_layout USING TI_BTECHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BTEPERFORM sort TABLES ti_sortUSING TI_BTE
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layout
it_fieldcat = ti_cati_tabname = TI_BTEit_events = ti_eventsit_sort = ti_sorti_text = BTETABLESt_outtab = ti_bteEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_enh IS NOT INITIALPERFORM construir_catalogo_enhPERFORM definir_layout USING TI_ENHCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHPERFORM sort TABLES ti_sortUSING TI_ENH
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHit_events = ti_eventsit_sort = ti_sorti_text = ENHTABLESt_outtab = ti_enhEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
PERFORM construir_catalogo_enhobjPERFORM definir_layout USING TI_ENHOBJCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHOBJPERFORM sort TABLES ti_sortUSING TI_ENHOBJ
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHOBJit_events = ti_eventsit_sort = ti_sorti_text = ENHOBJTABLESt_outtab = ti_enhobjEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX
PERFORM sort TABLES ti_sortUSING TI_FDEX
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
ENDFORM armar_alv
amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03
CF X c_text_04
ENDFORM construir_catalogo_EXIT
amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic
STATICS l_col_pos LIKE sy-cucol
Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname
CHECK sy-subrc EQ 0
IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF
IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF
wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon
MODIFY pt_cat FROM wa_cat INDEX sy-tabix
ENDFORM asignar_campo_a_catalogo
amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv
CLEAR p_layout
IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X
ENDFORM definir_layout
amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n
REFRESH ti_eventsCLEAR wa_events
ALV Simple Block appendl_type = 2
Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events
Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF
ENDFORM construir_eventos
amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit
ENDFORM top_of_page
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD
ENDFORM TOP_OF_PAGE_UEXIT
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs
ENDFORM TOP_OF_PAGE_FDEX
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs
ENDFORM TOP_OF_PAGE_BADI
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant
CONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs
ENDFORM TOP_OF_PAGE_BTE
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENH
amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any
CLEAR pt_sort wa_sortREFRESH pt_sort
CASE p_tabnameWHEN TI_SUST
wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_VAL
wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_ENHOBJ
wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN OTHERS
IF p_tabname NE TI_FINAL
wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
IF p_tabname NE TI_FDEX
wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
ENDIF
ELSE
wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE
ENDFORM sort
amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado
wa_print-reserve_lines = 2
CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY
EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM mostrar_listado
amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield
DATA l_break TYPE c
Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE
Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL
CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf
ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF 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-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF
WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF
WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF
WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea
ti_bte-breakMOVE X TO l_breakENDIF
WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF
WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF
WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF
WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF
WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf
CALL FUNCTION RS_NAVIGATION_MONITORENDIF
WHEN TI_CIMP Customer implementation
CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X
ENDFORM user_command
amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM visualizar_linea
amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0
CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM buscar_exit
amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi
DATAl_subrc LIKE sy-subrc
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF
IF l_subrc EQ 0CLEAR ti_badi
- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF
ENDFORM buscar_badi
amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform
CHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
ENDFORM buscar_bte
amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4
CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS
cancel = 1wrong_type = 2OTHERS = 3
ENDFORM repid_f4
amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf
DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
SEARCH p_cf FOR c_type_ref
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
SPLIT p_cf+sy-fdpos(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
READ TABLE lt_cf INDEX 4
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
CHECK sy-subrc IS INITIAL
Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten
textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer
CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4
IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF
WHEN OTHERS Do Nothing ENDCASE
ENDFORM visualizar_badi
amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf
DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
CLEAR d010inc modsap modact
Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid
IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF
SEARCH p_cf FOR c_enhance
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
MOVE p_cf+sy-fdpos(l_cf) TO l_linea
SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3
TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS
Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _
Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit
CHECK sy-subrc IS INITIAL
Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM
modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3
ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname
CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ENDIF
ENDFORM visualizar_exit
amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit
DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo
DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe
DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE
CHECK p_fdex IS NOT INITIAL
CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe
MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex
IF p_prog IS NOT INITIAL
MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF
Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog
LOOP AT lt_d020s
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
REFRESH lt_d021s
Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4
Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X
SEARCH lt_d021s-fnam FOR -
IF sy-subrc IS INITIAL
MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum
Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname
APPEND lt_campo
ENDIF
ENDLOOPENDLOOP
CHECK lt_campo[] IS NOT INITIAL
SORT lt_campo BY repid dnum tabname fieldname
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
ENDIF
ENDFORM PROCURA_FUNCAO
amp---------------------------------------------------------------------amp Form VERIFICA_INCLUDE_FUNCAO_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM verifica_include_funcao_submit
CHECK p_ue IS NOT INITIAL OR p_badi IS NOT INITIALOR p_bte IS NOT INITIAL OR p_enh IS NOT INITIAL
LOOP AT ti_includes
ADD 1 TO vg_contadorDESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfillMOVE ti_includes-nivel TO vg_nivelADD 1 TO vg_nivel
- BORRA TABLA INTERNAREFRESH ti_programa
- REALIZA LECTURA DE INCLUDEFUNCION ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa
LOOP AT ti_programa
- PROCURA POR INCLUDESIF p_incl EQ c_xPERFORM procura_includeENDIF- PROCURA POR FUNCIONIF p_func EQ c_xPERFORM procura_funcaoENDIF- PROCURA POR SUBMITIF p_submit EQ c_xPERFORM procura_submitENDIF
ENDLOOP
ENDLOOP
ENDFORM VERIFICA_INCLUDE_FUNCAO_SUBMIT
amp---------------------------------------------------------------------amp Form EVITAR_TIME_OUTamp--------------------------------------------------------------------- Evito el TIME OUT visualizando un mensaje----------------------------------------------------------------------FORM evitar_time_out USING p_tfill LIKE sy-tfill
DATAvl_total(10) TYPE n
vl_atual(10) TYPE nl_tout LIKE sy-timlol_time(10) TYPE c
GET TIME FIELD l_tout
l_tout = l_tout - w_tini
MOVEp_tfill TO vl_totalvg_contador TO vl_atual
SHIFT vl_total LEFT DELETING LEADING 0SHIFT vl_atual LEFT DELETING LEADING 0WRITE l_tout TO l_time
CONCATENATE Tpo l_time Total vl_total Actual vl_atualINTO vg_textoSEPARATED BY space
CALL FUNCTION SAPGUI_PROGRESS_INDICATOREXPORTINGtext = vg_texto
ENDFORM EVITAR_TIME_OUT
amp---------------------------------------------------------------------amp Form PROCURA_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_submit
CLEAR vg_conta_espaco vg_palavra vg_ini_contagem
- VERIFICA SI LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_submit- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF vg_ini_contagem EQ c_x AND vg_caracter IS INITIALADD 1 TO vg_conta_espacoENDIF
IF NOT vg_caracter IS INITIALMOVE c_x TO vg_ini_contagemIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRAIF vg_conta_espaco LT 2CONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACION
TRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_submitCLEAR vg_palavraENDIFELSEEXITENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIFENDIF
ENDFORM PROCURA_SUBMIT
amp---------------------------------------------------------------------amp Form CONSISTI_PARAMETROSamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM consisti_parametros
IF p_nivel IS INITIALMOVE 1 TO p_nivelENDIF
IF p_prog IS INITIAL AND p_tcode IS INITIAL- EL NOMBRE DEL PROGRAMA Y EL NOMBRE DE LA TRANSACCION NO PUEDEN SER- NULOS UNO DE ELLOS DEBE SER INFORMADOMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e01STOPENDIF
IF NOT p_prog IS INITIAL AND NOT p_tcode IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME NOMBRE DE PROGRAMA O TRANSACCIONMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e02STOPENDIF
IF p_ue IS INITIAL AND p_badi IS INITIAL AND p_bte IS INITIALAND p_sust IS INITIAL AND p_val IS INITIAL AND p_fdex IS INITIALAND p_enh IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME UN TIPO DE MEJORAMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e03STOPENDIF
ENDFORM CONSISTI_PARAMETROS
amp---------------------------------------------------------------------
amp Form INICIALIZA_TABELAamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM inicializa_tabela
DATAe_tstc TYPE tstcl_tcode TYPE sy-tcode
REFRESH ti_includes
IF NOT p_prog IS INITIAL
MOVE p_prog TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includes
- BUSCO EL PROGRAMAREAD REPORT ti_includes-nome INTO ti_programa
IF sy-subrc EQ 0REFRESH ti_programaELSE- EL PROGRAMA NO EXISTEMESSAGE s893(pz) WITH El programa p_prog no existeSTOPENDIF
ELSEIF NOT p_tcode IS INITIAL
SELECT SINGLE FROM tstcWHERE tcode EQ p_tcode
IF sy-subrc EQ 0
IF tstc-pgmna IS NOT INITIALMOVE tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includesELSE Se trata de una transaccioacuten de paraacutemetros Obtengo la transaccioacuten asociadaCALL FUNCTION RS_TRANSACTION_SINGLE_GETEXPORTINGparameter_tcode = p_tcodeIMPORTINGtcode = l_tcode
SELECT SINGLE INTO e_tstcFROM tstcWHERE tcode EQ l_tcode
IF sy-subrc EQ 0MOVE e_tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivel
APPEND ti_includesELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeENDIFENDIFELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeSTOPENDIFENDIF
ENDFORM INICIALIZA_TABELA
amp---------------------------------------------------------------------amp Form armar_alvamp--------------------------------------------------------------------- Armo el ALV----------------------------------------------------------------------FORM armar_alv
DATAl_repid TYPE sy-repid
MOVE sy-repid TO l_repid
CALL FUNCTION REUSE_ALV_BLOCK_LIST_INITEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMAND
IF p_ue IS NOT INITIALPERFORM construir_catalogo_exitPERFORM definir_layout USING TI_USER_EXITCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGEPERFORM sort TABLES ti_sortUSING TI_USER_EXIT
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_USER_EXITit_events = ti_eventsit_sort = ti_sorti_text = User-exitTABLESt_outtab = ti_user_exitEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
PERFORM construir_catalogo_uexitPERFORM definir_layout USING TI_FINAL
CHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_UEXITPERFORM sort TABLES ti_sortUSING TI_FINAL
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FINALit_events = ti_eventsit_sort = ti_sorti_text = User-exit TxCMODTABLESt_outtab = ti_finalEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_badi IS NOT INITIALPERFORM construir_catalogo_badiPERFORM definir_layout USING TI_BADICHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BADIPERFORM sort TABLES ti_sortUSING TI_BADI
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_BADIit_events = ti_eventsit_sort = ti_sorti_text = BadisTABLESt_outtab = ti_badiEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_bte IS NOT INITIALPERFORM construir_catalogo_btePERFORM definir_layout USING TI_BTECHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BTEPERFORM sort TABLES ti_sortUSING TI_BTE
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layout
it_fieldcat = ti_cati_tabname = TI_BTEit_events = ti_eventsit_sort = ti_sorti_text = BTETABLESt_outtab = ti_bteEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_enh IS NOT INITIALPERFORM construir_catalogo_enhPERFORM definir_layout USING TI_ENHCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHPERFORM sort TABLES ti_sortUSING TI_ENH
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHit_events = ti_eventsit_sort = ti_sorti_text = ENHTABLESt_outtab = ti_enhEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
PERFORM construir_catalogo_enhobjPERFORM definir_layout USING TI_ENHOBJCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHOBJPERFORM sort TABLES ti_sortUSING TI_ENHOBJ
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHOBJit_events = ti_eventsit_sort = ti_sorti_text = ENHOBJTABLESt_outtab = ti_enhobjEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX
PERFORM sort TABLES ti_sortUSING TI_FDEX
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
ENDFORM armar_alv
amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03
CF X c_text_04
ENDFORM construir_catalogo_EXIT
amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic
STATICS l_col_pos LIKE sy-cucol
Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname
CHECK sy-subrc EQ 0
IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF
IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF
wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon
MODIFY pt_cat FROM wa_cat INDEX sy-tabix
ENDFORM asignar_campo_a_catalogo
amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv
CLEAR p_layout
IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X
ENDFORM definir_layout
amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n
REFRESH ti_eventsCLEAR wa_events
ALV Simple Block appendl_type = 2
Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events
Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF
ENDFORM construir_eventos
amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit
ENDFORM top_of_page
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD
ENDFORM TOP_OF_PAGE_UEXIT
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs
ENDFORM TOP_OF_PAGE_FDEX
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs
ENDFORM TOP_OF_PAGE_BADI
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant
CONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs
ENDFORM TOP_OF_PAGE_BTE
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENH
amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any
CLEAR pt_sort wa_sortREFRESH pt_sort
CASE p_tabnameWHEN TI_SUST
wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_VAL
wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_ENHOBJ
wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN OTHERS
IF p_tabname NE TI_FINAL
wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
IF p_tabname NE TI_FDEX
wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
ENDIF
ELSE
wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE
ENDFORM sort
amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado
wa_print-reserve_lines = 2
CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY
EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM mostrar_listado
amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield
DATA l_break TYPE c
Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE
Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL
CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf
ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF 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-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF
WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF
WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF
WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea
ti_bte-breakMOVE X TO l_breakENDIF
WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF
WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF
WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF
WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF
WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf
CALL FUNCTION RS_NAVIGATION_MONITORENDIF
WHEN TI_CIMP Customer implementation
CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X
ENDFORM user_command
amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM visualizar_linea
amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0
CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM buscar_exit
amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi
DATAl_subrc LIKE sy-subrc
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF
IF l_subrc EQ 0CLEAR ti_badi
- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF
ENDFORM buscar_badi
amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform
CHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
ENDFORM buscar_bte
amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4
CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS
cancel = 1wrong_type = 2OTHERS = 3
ENDFORM repid_f4
amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf
DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
SEARCH p_cf FOR c_type_ref
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
SPLIT p_cf+sy-fdpos(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
READ TABLE lt_cf INDEX 4
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
CHECK sy-subrc IS INITIAL
Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten
textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer
CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4
IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF
WHEN OTHERS Do Nothing ENDCASE
ENDFORM visualizar_badi
amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf
DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
CLEAR d010inc modsap modact
Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid
IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF
SEARCH p_cf FOR c_enhance
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
MOVE p_cf+sy-fdpos(l_cf) TO l_linea
SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3
TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS
Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _
Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit
CHECK sy-subrc IS INITIAL
Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM
modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3
ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname
CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ENDIF
ENDFORM visualizar_exit
amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit
DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo
DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe
DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE
CHECK p_fdex IS NOT INITIAL
CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe
MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex
IF p_prog IS NOT INITIAL
MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF
Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog
LOOP AT lt_d020s
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
REFRESH lt_d021s
Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4
Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X
SEARCH lt_d021s-fnam FOR -
IF sy-subrc IS INITIAL
MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum
Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname
APPEND lt_campo
ENDIF
ENDLOOPENDLOOP
CHECK lt_campo[] IS NOT INITIAL
SORT lt_campo BY repid dnum tabname fieldname
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
vl_atual(10) TYPE nl_tout LIKE sy-timlol_time(10) TYPE c
GET TIME FIELD l_tout
l_tout = l_tout - w_tini
MOVEp_tfill TO vl_totalvg_contador TO vl_atual
SHIFT vl_total LEFT DELETING LEADING 0SHIFT vl_atual LEFT DELETING LEADING 0WRITE l_tout TO l_time
CONCATENATE Tpo l_time Total vl_total Actual vl_atualINTO vg_textoSEPARATED BY space
CALL FUNCTION SAPGUI_PROGRESS_INDICATOREXPORTINGtext = vg_texto
ENDFORM EVITAR_TIME_OUT
amp---------------------------------------------------------------------amp Form PROCURA_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_submit
CLEAR vg_conta_espaco vg_palavra vg_ini_contagem
- VERIFICA SI LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_submit- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF vg_ini_contagem EQ c_x AND vg_caracter IS INITIALADD 1 TO vg_conta_espacoENDIF
IF NOT vg_caracter IS INITIALMOVE c_x TO vg_ini_contagemIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRAIF vg_conta_espaco LT 2CONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACION
TRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_submitCLEAR vg_palavraENDIFELSEEXITENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIFENDIF
ENDFORM PROCURA_SUBMIT
amp---------------------------------------------------------------------amp Form CONSISTI_PARAMETROSamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM consisti_parametros
IF p_nivel IS INITIALMOVE 1 TO p_nivelENDIF
IF p_prog IS INITIAL AND p_tcode IS INITIAL- EL NOMBRE DEL PROGRAMA Y EL NOMBRE DE LA TRANSACCION NO PUEDEN SER- NULOS UNO DE ELLOS DEBE SER INFORMADOMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e01STOPENDIF
IF NOT p_prog IS INITIAL AND NOT p_tcode IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME NOMBRE DE PROGRAMA O TRANSACCIONMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e02STOPENDIF
IF p_ue IS INITIAL AND p_badi IS INITIAL AND p_bte IS INITIALAND p_sust IS INITIAL AND p_val IS INITIAL AND p_fdex IS INITIALAND p_enh IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME UN TIPO DE MEJORAMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e03STOPENDIF
ENDFORM CONSISTI_PARAMETROS
amp---------------------------------------------------------------------
amp Form INICIALIZA_TABELAamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM inicializa_tabela
DATAe_tstc TYPE tstcl_tcode TYPE sy-tcode
REFRESH ti_includes
IF NOT p_prog IS INITIAL
MOVE p_prog TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includes
- BUSCO EL PROGRAMAREAD REPORT ti_includes-nome INTO ti_programa
IF sy-subrc EQ 0REFRESH ti_programaELSE- EL PROGRAMA NO EXISTEMESSAGE s893(pz) WITH El programa p_prog no existeSTOPENDIF
ELSEIF NOT p_tcode IS INITIAL
SELECT SINGLE FROM tstcWHERE tcode EQ p_tcode
IF sy-subrc EQ 0
IF tstc-pgmna IS NOT INITIALMOVE tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includesELSE Se trata de una transaccioacuten de paraacutemetros Obtengo la transaccioacuten asociadaCALL FUNCTION RS_TRANSACTION_SINGLE_GETEXPORTINGparameter_tcode = p_tcodeIMPORTINGtcode = l_tcode
SELECT SINGLE INTO e_tstcFROM tstcWHERE tcode EQ l_tcode
IF sy-subrc EQ 0MOVE e_tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivel
APPEND ti_includesELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeENDIFENDIFELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeSTOPENDIFENDIF
ENDFORM INICIALIZA_TABELA
amp---------------------------------------------------------------------amp Form armar_alvamp--------------------------------------------------------------------- Armo el ALV----------------------------------------------------------------------FORM armar_alv
DATAl_repid TYPE sy-repid
MOVE sy-repid TO l_repid
CALL FUNCTION REUSE_ALV_BLOCK_LIST_INITEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMAND
IF p_ue IS NOT INITIALPERFORM construir_catalogo_exitPERFORM definir_layout USING TI_USER_EXITCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGEPERFORM sort TABLES ti_sortUSING TI_USER_EXIT
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_USER_EXITit_events = ti_eventsit_sort = ti_sorti_text = User-exitTABLESt_outtab = ti_user_exitEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
PERFORM construir_catalogo_uexitPERFORM definir_layout USING TI_FINAL
CHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_UEXITPERFORM sort TABLES ti_sortUSING TI_FINAL
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FINALit_events = ti_eventsit_sort = ti_sorti_text = User-exit TxCMODTABLESt_outtab = ti_finalEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_badi IS NOT INITIALPERFORM construir_catalogo_badiPERFORM definir_layout USING TI_BADICHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BADIPERFORM sort TABLES ti_sortUSING TI_BADI
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_BADIit_events = ti_eventsit_sort = ti_sorti_text = BadisTABLESt_outtab = ti_badiEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_bte IS NOT INITIALPERFORM construir_catalogo_btePERFORM definir_layout USING TI_BTECHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BTEPERFORM sort TABLES ti_sortUSING TI_BTE
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layout
it_fieldcat = ti_cati_tabname = TI_BTEit_events = ti_eventsit_sort = ti_sorti_text = BTETABLESt_outtab = ti_bteEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_enh IS NOT INITIALPERFORM construir_catalogo_enhPERFORM definir_layout USING TI_ENHCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHPERFORM sort TABLES ti_sortUSING TI_ENH
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHit_events = ti_eventsit_sort = ti_sorti_text = ENHTABLESt_outtab = ti_enhEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
PERFORM construir_catalogo_enhobjPERFORM definir_layout USING TI_ENHOBJCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHOBJPERFORM sort TABLES ti_sortUSING TI_ENHOBJ
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHOBJit_events = ti_eventsit_sort = ti_sorti_text = ENHOBJTABLESt_outtab = ti_enhobjEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX
PERFORM sort TABLES ti_sortUSING TI_FDEX
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
ENDFORM armar_alv
amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03
CF X c_text_04
ENDFORM construir_catalogo_EXIT
amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic
STATICS l_col_pos LIKE sy-cucol
Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname
CHECK sy-subrc EQ 0
IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF
IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF
wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon
MODIFY pt_cat FROM wa_cat INDEX sy-tabix
ENDFORM asignar_campo_a_catalogo
amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv
CLEAR p_layout
IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X
ENDFORM definir_layout
amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n
REFRESH ti_eventsCLEAR wa_events
ALV Simple Block appendl_type = 2
Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events
Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF
ENDFORM construir_eventos
amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit
ENDFORM top_of_page
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD
ENDFORM TOP_OF_PAGE_UEXIT
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs
ENDFORM TOP_OF_PAGE_FDEX
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs
ENDFORM TOP_OF_PAGE_BADI
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant
CONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs
ENDFORM TOP_OF_PAGE_BTE
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENH
amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any
CLEAR pt_sort wa_sortREFRESH pt_sort
CASE p_tabnameWHEN TI_SUST
wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_VAL
wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_ENHOBJ
wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN OTHERS
IF p_tabname NE TI_FINAL
wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
IF p_tabname NE TI_FDEX
wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
ENDIF
ELSE
wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE
ENDFORM sort
amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado
wa_print-reserve_lines = 2
CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY
EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM mostrar_listado
amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield
DATA l_break TYPE c
Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE
Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL
CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf
ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF 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-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF
WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF
WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF
WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea
ti_bte-breakMOVE X TO l_breakENDIF
WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF
WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF
WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF
WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF
WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf
CALL FUNCTION RS_NAVIGATION_MONITORENDIF
WHEN TI_CIMP Customer implementation
CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X
ENDFORM user_command
amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM visualizar_linea
amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0
CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM buscar_exit
amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi
DATAl_subrc LIKE sy-subrc
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF
IF l_subrc EQ 0CLEAR ti_badi
- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF
ENDFORM buscar_badi
amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform
CHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
ENDFORM buscar_bte
amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4
CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS
cancel = 1wrong_type = 2OTHERS = 3
ENDFORM repid_f4
amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf
DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
SEARCH p_cf FOR c_type_ref
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
SPLIT p_cf+sy-fdpos(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
READ TABLE lt_cf INDEX 4
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
CHECK sy-subrc IS INITIAL
Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten
textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer
CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4
IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF
WHEN OTHERS Do Nothing ENDCASE
ENDFORM visualizar_badi
amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf
DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
CLEAR d010inc modsap modact
Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid
IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF
SEARCH p_cf FOR c_enhance
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
MOVE p_cf+sy-fdpos(l_cf) TO l_linea
SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3
TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS
Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _
Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit
CHECK sy-subrc IS INITIAL
Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM
modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3
ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname
CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ENDIF
ENDFORM visualizar_exit
amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit
DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo
DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe
DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE
CHECK p_fdex IS NOT INITIAL
CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe
MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex
IF p_prog IS NOT INITIAL
MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF
Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog
LOOP AT lt_d020s
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
REFRESH lt_d021s
Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4
Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X
SEARCH lt_d021s-fnam FOR -
IF sy-subrc IS INITIAL
MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum
Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname
APPEND lt_campo
ENDIF
ENDLOOPENDLOOP
CHECK lt_campo[] IS NOT INITIAL
SORT lt_campo BY repid dnum tabname fieldname
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
TRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_submitCLEAR vg_palavraENDIFELSEEXITENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIFENDIF
ENDFORM PROCURA_SUBMIT
amp---------------------------------------------------------------------amp Form CONSISTI_PARAMETROSamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM consisti_parametros
IF p_nivel IS INITIALMOVE 1 TO p_nivelENDIF
IF p_prog IS INITIAL AND p_tcode IS INITIAL- EL NOMBRE DEL PROGRAMA Y EL NOMBRE DE LA TRANSACCION NO PUEDEN SER- NULOS UNO DE ELLOS DEBE SER INFORMADOMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e01STOPENDIF
IF NOT p_prog IS INITIAL AND NOT p_tcode IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME NOMBRE DE PROGRAMA O TRANSACCIONMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e02STOPENDIF
IF p_ue IS INITIAL AND p_badi IS INITIAL AND p_bte IS INITIALAND p_sust IS INITIAL AND p_val IS INITIAL AND p_fdex IS INITIALAND p_enh IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME UN TIPO DE MEJORAMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e03STOPENDIF
ENDFORM CONSISTI_PARAMETROS
amp---------------------------------------------------------------------
amp Form INICIALIZA_TABELAamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM inicializa_tabela
DATAe_tstc TYPE tstcl_tcode TYPE sy-tcode
REFRESH ti_includes
IF NOT p_prog IS INITIAL
MOVE p_prog TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includes
- BUSCO EL PROGRAMAREAD REPORT ti_includes-nome INTO ti_programa
IF sy-subrc EQ 0REFRESH ti_programaELSE- EL PROGRAMA NO EXISTEMESSAGE s893(pz) WITH El programa p_prog no existeSTOPENDIF
ELSEIF NOT p_tcode IS INITIAL
SELECT SINGLE FROM tstcWHERE tcode EQ p_tcode
IF sy-subrc EQ 0
IF tstc-pgmna IS NOT INITIALMOVE tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includesELSE Se trata de una transaccioacuten de paraacutemetros Obtengo la transaccioacuten asociadaCALL FUNCTION RS_TRANSACTION_SINGLE_GETEXPORTINGparameter_tcode = p_tcodeIMPORTINGtcode = l_tcode
SELECT SINGLE INTO e_tstcFROM tstcWHERE tcode EQ l_tcode
IF sy-subrc EQ 0MOVE e_tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivel
APPEND ti_includesELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeENDIFENDIFELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeSTOPENDIFENDIF
ENDFORM INICIALIZA_TABELA
amp---------------------------------------------------------------------amp Form armar_alvamp--------------------------------------------------------------------- Armo el ALV----------------------------------------------------------------------FORM armar_alv
DATAl_repid TYPE sy-repid
MOVE sy-repid TO l_repid
CALL FUNCTION REUSE_ALV_BLOCK_LIST_INITEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMAND
IF p_ue IS NOT INITIALPERFORM construir_catalogo_exitPERFORM definir_layout USING TI_USER_EXITCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGEPERFORM sort TABLES ti_sortUSING TI_USER_EXIT
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_USER_EXITit_events = ti_eventsit_sort = ti_sorti_text = User-exitTABLESt_outtab = ti_user_exitEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
PERFORM construir_catalogo_uexitPERFORM definir_layout USING TI_FINAL
CHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_UEXITPERFORM sort TABLES ti_sortUSING TI_FINAL
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FINALit_events = ti_eventsit_sort = ti_sorti_text = User-exit TxCMODTABLESt_outtab = ti_finalEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_badi IS NOT INITIALPERFORM construir_catalogo_badiPERFORM definir_layout USING TI_BADICHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BADIPERFORM sort TABLES ti_sortUSING TI_BADI
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_BADIit_events = ti_eventsit_sort = ti_sorti_text = BadisTABLESt_outtab = ti_badiEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_bte IS NOT INITIALPERFORM construir_catalogo_btePERFORM definir_layout USING TI_BTECHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BTEPERFORM sort TABLES ti_sortUSING TI_BTE
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layout
it_fieldcat = ti_cati_tabname = TI_BTEit_events = ti_eventsit_sort = ti_sorti_text = BTETABLESt_outtab = ti_bteEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_enh IS NOT INITIALPERFORM construir_catalogo_enhPERFORM definir_layout USING TI_ENHCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHPERFORM sort TABLES ti_sortUSING TI_ENH
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHit_events = ti_eventsit_sort = ti_sorti_text = ENHTABLESt_outtab = ti_enhEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
PERFORM construir_catalogo_enhobjPERFORM definir_layout USING TI_ENHOBJCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHOBJPERFORM sort TABLES ti_sortUSING TI_ENHOBJ
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHOBJit_events = ti_eventsit_sort = ti_sorti_text = ENHOBJTABLESt_outtab = ti_enhobjEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX
PERFORM sort TABLES ti_sortUSING TI_FDEX
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
ENDFORM armar_alv
amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03
CF X c_text_04
ENDFORM construir_catalogo_EXIT
amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic
STATICS l_col_pos LIKE sy-cucol
Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname
CHECK sy-subrc EQ 0
IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF
IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF
wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon
MODIFY pt_cat FROM wa_cat INDEX sy-tabix
ENDFORM asignar_campo_a_catalogo
amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv
CLEAR p_layout
IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X
ENDFORM definir_layout
amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n
REFRESH ti_eventsCLEAR wa_events
ALV Simple Block appendl_type = 2
Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events
Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF
ENDFORM construir_eventos
amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit
ENDFORM top_of_page
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD
ENDFORM TOP_OF_PAGE_UEXIT
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs
ENDFORM TOP_OF_PAGE_FDEX
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs
ENDFORM TOP_OF_PAGE_BADI
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant
CONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs
ENDFORM TOP_OF_PAGE_BTE
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENH
amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any
CLEAR pt_sort wa_sortREFRESH pt_sort
CASE p_tabnameWHEN TI_SUST
wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_VAL
wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_ENHOBJ
wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN OTHERS
IF p_tabname NE TI_FINAL
wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
IF p_tabname NE TI_FDEX
wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
ENDIF
ELSE
wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE
ENDFORM sort
amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado
wa_print-reserve_lines = 2
CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY
EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM mostrar_listado
amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield
DATA l_break TYPE c
Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE
Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL
CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf
ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF 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-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF
WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF
WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF
WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea
ti_bte-breakMOVE X TO l_breakENDIF
WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF
WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF
WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF
WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF
WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf
CALL FUNCTION RS_NAVIGATION_MONITORENDIF
WHEN TI_CIMP Customer implementation
CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X
ENDFORM user_command
amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM visualizar_linea
amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0
CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM buscar_exit
amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi
DATAl_subrc LIKE sy-subrc
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF
IF l_subrc EQ 0CLEAR ti_badi
- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF
ENDFORM buscar_badi
amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform
CHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
ENDFORM buscar_bte
amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4
CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS
cancel = 1wrong_type = 2OTHERS = 3
ENDFORM repid_f4
amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf
DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
SEARCH p_cf FOR c_type_ref
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
SPLIT p_cf+sy-fdpos(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
READ TABLE lt_cf INDEX 4
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
CHECK sy-subrc IS INITIAL
Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten
textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer
CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4
IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF
WHEN OTHERS Do Nothing ENDCASE
ENDFORM visualizar_badi
amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf
DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
CLEAR d010inc modsap modact
Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid
IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF
SEARCH p_cf FOR c_enhance
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
MOVE p_cf+sy-fdpos(l_cf) TO l_linea
SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3
TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS
Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _
Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit
CHECK sy-subrc IS INITIAL
Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM
modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3
ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname
CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ENDIF
ENDFORM visualizar_exit
amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit
DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo
DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe
DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE
CHECK p_fdex IS NOT INITIAL
CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe
MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex
IF p_prog IS NOT INITIAL
MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF
Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog
LOOP AT lt_d020s
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
REFRESH lt_d021s
Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4
Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X
SEARCH lt_d021s-fnam FOR -
IF sy-subrc IS INITIAL
MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum
Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname
APPEND lt_campo
ENDIF
ENDLOOPENDLOOP
CHECK lt_campo[] IS NOT INITIAL
SORT lt_campo BY repid dnum tabname fieldname
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
amp Form INICIALIZA_TABELAamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM inicializa_tabela
DATAe_tstc TYPE tstcl_tcode TYPE sy-tcode
REFRESH ti_includes
IF NOT p_prog IS INITIAL
MOVE p_prog TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includes
- BUSCO EL PROGRAMAREAD REPORT ti_includes-nome INTO ti_programa
IF sy-subrc EQ 0REFRESH ti_programaELSE- EL PROGRAMA NO EXISTEMESSAGE s893(pz) WITH El programa p_prog no existeSTOPENDIF
ELSEIF NOT p_tcode IS INITIAL
SELECT SINGLE FROM tstcWHERE tcode EQ p_tcode
IF sy-subrc EQ 0
IF tstc-pgmna IS NOT INITIALMOVE tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includesELSE Se trata de una transaccioacuten de paraacutemetros Obtengo la transaccioacuten asociadaCALL FUNCTION RS_TRANSACTION_SINGLE_GETEXPORTINGparameter_tcode = p_tcodeIMPORTINGtcode = l_tcode
SELECT SINGLE INTO e_tstcFROM tstcWHERE tcode EQ l_tcode
IF sy-subrc EQ 0MOVE e_tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivel
APPEND ti_includesELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeENDIFENDIFELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeSTOPENDIFENDIF
ENDFORM INICIALIZA_TABELA
amp---------------------------------------------------------------------amp Form armar_alvamp--------------------------------------------------------------------- Armo el ALV----------------------------------------------------------------------FORM armar_alv
DATAl_repid TYPE sy-repid
MOVE sy-repid TO l_repid
CALL FUNCTION REUSE_ALV_BLOCK_LIST_INITEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMAND
IF p_ue IS NOT INITIALPERFORM construir_catalogo_exitPERFORM definir_layout USING TI_USER_EXITCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGEPERFORM sort TABLES ti_sortUSING TI_USER_EXIT
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_USER_EXITit_events = ti_eventsit_sort = ti_sorti_text = User-exitTABLESt_outtab = ti_user_exitEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
PERFORM construir_catalogo_uexitPERFORM definir_layout USING TI_FINAL
CHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_UEXITPERFORM sort TABLES ti_sortUSING TI_FINAL
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FINALit_events = ti_eventsit_sort = ti_sorti_text = User-exit TxCMODTABLESt_outtab = ti_finalEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_badi IS NOT INITIALPERFORM construir_catalogo_badiPERFORM definir_layout USING TI_BADICHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BADIPERFORM sort TABLES ti_sortUSING TI_BADI
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_BADIit_events = ti_eventsit_sort = ti_sorti_text = BadisTABLESt_outtab = ti_badiEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_bte IS NOT INITIALPERFORM construir_catalogo_btePERFORM definir_layout USING TI_BTECHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BTEPERFORM sort TABLES ti_sortUSING TI_BTE
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layout
it_fieldcat = ti_cati_tabname = TI_BTEit_events = ti_eventsit_sort = ti_sorti_text = BTETABLESt_outtab = ti_bteEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_enh IS NOT INITIALPERFORM construir_catalogo_enhPERFORM definir_layout USING TI_ENHCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHPERFORM sort TABLES ti_sortUSING TI_ENH
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHit_events = ti_eventsit_sort = ti_sorti_text = ENHTABLESt_outtab = ti_enhEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
PERFORM construir_catalogo_enhobjPERFORM definir_layout USING TI_ENHOBJCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHOBJPERFORM sort TABLES ti_sortUSING TI_ENHOBJ
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHOBJit_events = ti_eventsit_sort = ti_sorti_text = ENHOBJTABLESt_outtab = ti_enhobjEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX
PERFORM sort TABLES ti_sortUSING TI_FDEX
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
ENDFORM armar_alv
amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03
CF X c_text_04
ENDFORM construir_catalogo_EXIT
amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic
STATICS l_col_pos LIKE sy-cucol
Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname
CHECK sy-subrc EQ 0
IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF
IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF
wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon
MODIFY pt_cat FROM wa_cat INDEX sy-tabix
ENDFORM asignar_campo_a_catalogo
amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv
CLEAR p_layout
IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X
ENDFORM definir_layout
amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n
REFRESH ti_eventsCLEAR wa_events
ALV Simple Block appendl_type = 2
Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events
Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF
ENDFORM construir_eventos
amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit
ENDFORM top_of_page
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD
ENDFORM TOP_OF_PAGE_UEXIT
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs
ENDFORM TOP_OF_PAGE_FDEX
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs
ENDFORM TOP_OF_PAGE_BADI
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant
CONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs
ENDFORM TOP_OF_PAGE_BTE
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENH
amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any
CLEAR pt_sort wa_sortREFRESH pt_sort
CASE p_tabnameWHEN TI_SUST
wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_VAL
wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_ENHOBJ
wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN OTHERS
IF p_tabname NE TI_FINAL
wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
IF p_tabname NE TI_FDEX
wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
ENDIF
ELSE
wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE
ENDFORM sort
amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado
wa_print-reserve_lines = 2
CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY
EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM mostrar_listado
amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield
DATA l_break TYPE c
Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE
Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL
CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf
ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF 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-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF
WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF
WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF
WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea
ti_bte-breakMOVE X TO l_breakENDIF
WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF
WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF
WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF
WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF
WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf
CALL FUNCTION RS_NAVIGATION_MONITORENDIF
WHEN TI_CIMP Customer implementation
CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X
ENDFORM user_command
amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM visualizar_linea
amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0
CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM buscar_exit
amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi
DATAl_subrc LIKE sy-subrc
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF
IF l_subrc EQ 0CLEAR ti_badi
- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF
ENDFORM buscar_badi
amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform
CHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
ENDFORM buscar_bte
amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4
CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS
cancel = 1wrong_type = 2OTHERS = 3
ENDFORM repid_f4
amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf
DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
SEARCH p_cf FOR c_type_ref
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
SPLIT p_cf+sy-fdpos(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
READ TABLE lt_cf INDEX 4
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
CHECK sy-subrc IS INITIAL
Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten
textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer
CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4
IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF
WHEN OTHERS Do Nothing ENDCASE
ENDFORM visualizar_badi
amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf
DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
CLEAR d010inc modsap modact
Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid
IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF
SEARCH p_cf FOR c_enhance
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
MOVE p_cf+sy-fdpos(l_cf) TO l_linea
SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3
TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS
Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _
Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit
CHECK sy-subrc IS INITIAL
Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM
modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3
ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname
CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ENDIF
ENDFORM visualizar_exit
amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit
DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo
DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe
DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE
CHECK p_fdex IS NOT INITIAL
CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe
MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex
IF p_prog IS NOT INITIAL
MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF
Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog
LOOP AT lt_d020s
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
REFRESH lt_d021s
Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4
Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X
SEARCH lt_d021s-fnam FOR -
IF sy-subrc IS INITIAL
MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum
Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname
APPEND lt_campo
ENDIF
ENDLOOPENDLOOP
CHECK lt_campo[] IS NOT INITIAL
SORT lt_campo BY repid dnum tabname fieldname
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
APPEND ti_includesELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeENDIFENDIFELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeSTOPENDIFENDIF
ENDFORM INICIALIZA_TABELA
amp---------------------------------------------------------------------amp Form armar_alvamp--------------------------------------------------------------------- Armo el ALV----------------------------------------------------------------------FORM armar_alv
DATAl_repid TYPE sy-repid
MOVE sy-repid TO l_repid
CALL FUNCTION REUSE_ALV_BLOCK_LIST_INITEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMAND
IF p_ue IS NOT INITIALPERFORM construir_catalogo_exitPERFORM definir_layout USING TI_USER_EXITCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGEPERFORM sort TABLES ti_sortUSING TI_USER_EXIT
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_USER_EXITit_events = ti_eventsit_sort = ti_sorti_text = User-exitTABLESt_outtab = ti_user_exitEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
PERFORM construir_catalogo_uexitPERFORM definir_layout USING TI_FINAL
CHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_UEXITPERFORM sort TABLES ti_sortUSING TI_FINAL
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FINALit_events = ti_eventsit_sort = ti_sorti_text = User-exit TxCMODTABLESt_outtab = ti_finalEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_badi IS NOT INITIALPERFORM construir_catalogo_badiPERFORM definir_layout USING TI_BADICHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BADIPERFORM sort TABLES ti_sortUSING TI_BADI
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_BADIit_events = ti_eventsit_sort = ti_sorti_text = BadisTABLESt_outtab = ti_badiEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_bte IS NOT INITIALPERFORM construir_catalogo_btePERFORM definir_layout USING TI_BTECHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BTEPERFORM sort TABLES ti_sortUSING TI_BTE
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layout
it_fieldcat = ti_cati_tabname = TI_BTEit_events = ti_eventsit_sort = ti_sorti_text = BTETABLESt_outtab = ti_bteEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_enh IS NOT INITIALPERFORM construir_catalogo_enhPERFORM definir_layout USING TI_ENHCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHPERFORM sort TABLES ti_sortUSING TI_ENH
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHit_events = ti_eventsit_sort = ti_sorti_text = ENHTABLESt_outtab = ti_enhEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
PERFORM construir_catalogo_enhobjPERFORM definir_layout USING TI_ENHOBJCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHOBJPERFORM sort TABLES ti_sortUSING TI_ENHOBJ
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHOBJit_events = ti_eventsit_sort = ti_sorti_text = ENHOBJTABLESt_outtab = ti_enhobjEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX
PERFORM sort TABLES ti_sortUSING TI_FDEX
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
ENDFORM armar_alv
amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03
CF X c_text_04
ENDFORM construir_catalogo_EXIT
amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic
STATICS l_col_pos LIKE sy-cucol
Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname
CHECK sy-subrc EQ 0
IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF
IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF
wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon
MODIFY pt_cat FROM wa_cat INDEX sy-tabix
ENDFORM asignar_campo_a_catalogo
amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv
CLEAR p_layout
IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X
ENDFORM definir_layout
amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n
REFRESH ti_eventsCLEAR wa_events
ALV Simple Block appendl_type = 2
Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events
Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF
ENDFORM construir_eventos
amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit
ENDFORM top_of_page
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD
ENDFORM TOP_OF_PAGE_UEXIT
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs
ENDFORM TOP_OF_PAGE_FDEX
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs
ENDFORM TOP_OF_PAGE_BADI
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant
CONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs
ENDFORM TOP_OF_PAGE_BTE
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENH
amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any
CLEAR pt_sort wa_sortREFRESH pt_sort
CASE p_tabnameWHEN TI_SUST
wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_VAL
wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_ENHOBJ
wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN OTHERS
IF p_tabname NE TI_FINAL
wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
IF p_tabname NE TI_FDEX
wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
ENDIF
ELSE
wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE
ENDFORM sort
amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado
wa_print-reserve_lines = 2
CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY
EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM mostrar_listado
amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield
DATA l_break TYPE c
Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE
Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL
CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf
ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF 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-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF
WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF
WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF
WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea
ti_bte-breakMOVE X TO l_breakENDIF
WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF
WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF
WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF
WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF
WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf
CALL FUNCTION RS_NAVIGATION_MONITORENDIF
WHEN TI_CIMP Customer implementation
CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X
ENDFORM user_command
amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM visualizar_linea
amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0
CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM buscar_exit
amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi
DATAl_subrc LIKE sy-subrc
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF
IF l_subrc EQ 0CLEAR ti_badi
- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF
ENDFORM buscar_badi
amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform
CHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
ENDFORM buscar_bte
amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4
CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS
cancel = 1wrong_type = 2OTHERS = 3
ENDFORM repid_f4
amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf
DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
SEARCH p_cf FOR c_type_ref
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
SPLIT p_cf+sy-fdpos(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
READ TABLE lt_cf INDEX 4
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
CHECK sy-subrc IS INITIAL
Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten
textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer
CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4
IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF
WHEN OTHERS Do Nothing ENDCASE
ENDFORM visualizar_badi
amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf
DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
CLEAR d010inc modsap modact
Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid
IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF
SEARCH p_cf FOR c_enhance
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
MOVE p_cf+sy-fdpos(l_cf) TO l_linea
SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3
TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS
Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _
Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit
CHECK sy-subrc IS INITIAL
Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM
modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3
ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname
CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ENDIF
ENDFORM visualizar_exit
amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit
DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo
DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe
DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE
CHECK p_fdex IS NOT INITIAL
CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe
MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex
IF p_prog IS NOT INITIAL
MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF
Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog
LOOP AT lt_d020s
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
REFRESH lt_d021s
Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4
Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X
SEARCH lt_d021s-fnam FOR -
IF sy-subrc IS INITIAL
MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum
Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname
APPEND lt_campo
ENDIF
ENDLOOPENDLOOP
CHECK lt_campo[] IS NOT INITIAL
SORT lt_campo BY repid dnum tabname fieldname
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
CHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_UEXITPERFORM sort TABLES ti_sortUSING TI_FINAL
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FINALit_events = ti_eventsit_sort = ti_sorti_text = User-exit TxCMODTABLESt_outtab = ti_finalEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_badi IS NOT INITIALPERFORM construir_catalogo_badiPERFORM definir_layout USING TI_BADICHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BADIPERFORM sort TABLES ti_sortUSING TI_BADI
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_BADIit_events = ti_eventsit_sort = ti_sorti_text = BadisTABLESt_outtab = ti_badiEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_bte IS NOT INITIALPERFORM construir_catalogo_btePERFORM definir_layout USING TI_BTECHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BTEPERFORM sort TABLES ti_sortUSING TI_BTE
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layout
it_fieldcat = ti_cati_tabname = TI_BTEit_events = ti_eventsit_sort = ti_sorti_text = BTETABLESt_outtab = ti_bteEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_enh IS NOT INITIALPERFORM construir_catalogo_enhPERFORM definir_layout USING TI_ENHCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHPERFORM sort TABLES ti_sortUSING TI_ENH
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHit_events = ti_eventsit_sort = ti_sorti_text = ENHTABLESt_outtab = ti_enhEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
PERFORM construir_catalogo_enhobjPERFORM definir_layout USING TI_ENHOBJCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHOBJPERFORM sort TABLES ti_sortUSING TI_ENHOBJ
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHOBJit_events = ti_eventsit_sort = ti_sorti_text = ENHOBJTABLESt_outtab = ti_enhobjEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX
PERFORM sort TABLES ti_sortUSING TI_FDEX
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
ENDFORM armar_alv
amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03
CF X c_text_04
ENDFORM construir_catalogo_EXIT
amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic
STATICS l_col_pos LIKE sy-cucol
Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname
CHECK sy-subrc EQ 0
IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF
IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF
wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon
MODIFY pt_cat FROM wa_cat INDEX sy-tabix
ENDFORM asignar_campo_a_catalogo
amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv
CLEAR p_layout
IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X
ENDFORM definir_layout
amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n
REFRESH ti_eventsCLEAR wa_events
ALV Simple Block appendl_type = 2
Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events
Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF
ENDFORM construir_eventos
amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit
ENDFORM top_of_page
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD
ENDFORM TOP_OF_PAGE_UEXIT
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs
ENDFORM TOP_OF_PAGE_FDEX
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs
ENDFORM TOP_OF_PAGE_BADI
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant
CONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs
ENDFORM TOP_OF_PAGE_BTE
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENH
amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any
CLEAR pt_sort wa_sortREFRESH pt_sort
CASE p_tabnameWHEN TI_SUST
wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_VAL
wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_ENHOBJ
wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN OTHERS
IF p_tabname NE TI_FINAL
wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
IF p_tabname NE TI_FDEX
wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
ENDIF
ELSE
wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE
ENDFORM sort
amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado
wa_print-reserve_lines = 2
CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY
EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM mostrar_listado
amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield
DATA l_break TYPE c
Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE
Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL
CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf
ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF 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-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF
WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF
WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF
WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea
ti_bte-breakMOVE X TO l_breakENDIF
WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF
WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF
WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF
WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF
WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf
CALL FUNCTION RS_NAVIGATION_MONITORENDIF
WHEN TI_CIMP Customer implementation
CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X
ENDFORM user_command
amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM visualizar_linea
amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0
CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM buscar_exit
amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi
DATAl_subrc LIKE sy-subrc
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF
IF l_subrc EQ 0CLEAR ti_badi
- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF
ENDFORM buscar_badi
amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform
CHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
ENDFORM buscar_bte
amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4
CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS
cancel = 1wrong_type = 2OTHERS = 3
ENDFORM repid_f4
amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf
DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
SEARCH p_cf FOR c_type_ref
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
SPLIT p_cf+sy-fdpos(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
READ TABLE lt_cf INDEX 4
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
CHECK sy-subrc IS INITIAL
Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten
textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer
CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4
IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF
WHEN OTHERS Do Nothing ENDCASE
ENDFORM visualizar_badi
amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf
DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
CLEAR d010inc modsap modact
Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid
IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF
SEARCH p_cf FOR c_enhance
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
MOVE p_cf+sy-fdpos(l_cf) TO l_linea
SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3
TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS
Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _
Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit
CHECK sy-subrc IS INITIAL
Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM
modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3
ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname
CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ENDIF
ENDFORM visualizar_exit
amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit
DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo
DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe
DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE
CHECK p_fdex IS NOT INITIAL
CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe
MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex
IF p_prog IS NOT INITIAL
MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF
Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog
LOOP AT lt_d020s
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
REFRESH lt_d021s
Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4
Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X
SEARCH lt_d021s-fnam FOR -
IF sy-subrc IS INITIAL
MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum
Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname
APPEND lt_campo
ENDIF
ENDLOOPENDLOOP
CHECK lt_campo[] IS NOT INITIAL
SORT lt_campo BY repid dnum tabname fieldname
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
it_fieldcat = ti_cati_tabname = TI_BTEit_events = ti_eventsit_sort = ti_sorti_text = BTETABLESt_outtab = ti_bteEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_enh IS NOT INITIALPERFORM construir_catalogo_enhPERFORM definir_layout USING TI_ENHCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHPERFORM sort TABLES ti_sortUSING TI_ENH
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHit_events = ti_eventsit_sort = ti_sorti_text = ENHTABLESt_outtab = ti_enhEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
PERFORM construir_catalogo_enhobjPERFORM definir_layout USING TI_ENHOBJCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHOBJPERFORM sort TABLES ti_sortUSING TI_ENHOBJ
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHOBJit_events = ti_eventsit_sort = ti_sorti_text = ENHOBJTABLESt_outtab = ti_enhobjEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX
PERFORM sort TABLES ti_sortUSING TI_FDEX
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
ENDFORM armar_alv
amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03
CF X c_text_04
ENDFORM construir_catalogo_EXIT
amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic
STATICS l_col_pos LIKE sy-cucol
Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname
CHECK sy-subrc EQ 0
IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF
IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF
wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon
MODIFY pt_cat FROM wa_cat INDEX sy-tabix
ENDFORM asignar_campo_a_catalogo
amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv
CLEAR p_layout
IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X
ENDFORM definir_layout
amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n
REFRESH ti_eventsCLEAR wa_events
ALV Simple Block appendl_type = 2
Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events
Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF
ENDFORM construir_eventos
amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit
ENDFORM top_of_page
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD
ENDFORM TOP_OF_PAGE_UEXIT
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs
ENDFORM TOP_OF_PAGE_FDEX
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs
ENDFORM TOP_OF_PAGE_BADI
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant
CONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs
ENDFORM TOP_OF_PAGE_BTE
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENH
amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any
CLEAR pt_sort wa_sortREFRESH pt_sort
CASE p_tabnameWHEN TI_SUST
wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_VAL
wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_ENHOBJ
wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN OTHERS
IF p_tabname NE TI_FINAL
wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
IF p_tabname NE TI_FDEX
wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
ENDIF
ELSE
wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE
ENDFORM sort
amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado
wa_print-reserve_lines = 2
CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY
EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM mostrar_listado
amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield
DATA l_break TYPE c
Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE
Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL
CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf
ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF 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-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF
WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF
WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF
WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea
ti_bte-breakMOVE X TO l_breakENDIF
WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF
WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF
WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF
WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF
WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf
CALL FUNCTION RS_NAVIGATION_MONITORENDIF
WHEN TI_CIMP Customer implementation
CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X
ENDFORM user_command
amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM visualizar_linea
amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0
CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM buscar_exit
amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi
DATAl_subrc LIKE sy-subrc
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF
IF l_subrc EQ 0CLEAR ti_badi
- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF
ENDFORM buscar_badi
amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform
CHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
ENDFORM buscar_bte
amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4
CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS
cancel = 1wrong_type = 2OTHERS = 3
ENDFORM repid_f4
amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf
DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
SEARCH p_cf FOR c_type_ref
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
SPLIT p_cf+sy-fdpos(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
READ TABLE lt_cf INDEX 4
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
CHECK sy-subrc IS INITIAL
Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten
textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer
CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4
IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF
WHEN OTHERS Do Nothing ENDCASE
ENDFORM visualizar_badi
amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf
DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
CLEAR d010inc modsap modact
Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid
IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF
SEARCH p_cf FOR c_enhance
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
MOVE p_cf+sy-fdpos(l_cf) TO l_linea
SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3
TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS
Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _
Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit
CHECK sy-subrc IS INITIAL
Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM
modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3
ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname
CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ENDIF
ENDFORM visualizar_exit
amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit
DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo
DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe
DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE
CHECK p_fdex IS NOT INITIAL
CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe
MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex
IF p_prog IS NOT INITIAL
MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF
Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog
LOOP AT lt_d020s
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
REFRESH lt_d021s
Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4
Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X
SEARCH lt_d021s-fnam FOR -
IF sy-subrc IS INITIAL
MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum
Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname
APPEND lt_campo
ENDIF
ENDLOOPENDLOOP
CHECK lt_campo[] IS NOT INITIAL
SORT lt_campo BY repid dnum tabname fieldname
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
ENDIF
IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX
PERFORM sort TABLES ti_sortUSING TI_FDEX
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
ENDFORM armar_alv
amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03
CF X c_text_04
ENDFORM construir_catalogo_EXIT
amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic
STATICS l_col_pos LIKE sy-cucol
Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname
CHECK sy-subrc EQ 0
IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF
IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF
wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon
MODIFY pt_cat FROM wa_cat INDEX sy-tabix
ENDFORM asignar_campo_a_catalogo
amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv
CLEAR p_layout
IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X
ENDFORM definir_layout
amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n
REFRESH ti_eventsCLEAR wa_events
ALV Simple Block appendl_type = 2
Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events
Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF
ENDFORM construir_eventos
amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit
ENDFORM top_of_page
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD
ENDFORM TOP_OF_PAGE_UEXIT
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs
ENDFORM TOP_OF_PAGE_FDEX
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs
ENDFORM TOP_OF_PAGE_BADI
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant
CONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs
ENDFORM TOP_OF_PAGE_BTE
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENH
amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any
CLEAR pt_sort wa_sortREFRESH pt_sort
CASE p_tabnameWHEN TI_SUST
wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_VAL
wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_ENHOBJ
wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN OTHERS
IF p_tabname NE TI_FINAL
wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
IF p_tabname NE TI_FDEX
wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
ENDIF
ELSE
wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE
ENDFORM sort
amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado
wa_print-reserve_lines = 2
CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY
EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM mostrar_listado
amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield
DATA l_break TYPE c
Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE
Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL
CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf
ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF 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-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF
WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF
WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF
WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea
ti_bte-breakMOVE X TO l_breakENDIF
WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF
WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF
WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF
WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF
WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf
CALL FUNCTION RS_NAVIGATION_MONITORENDIF
WHEN TI_CIMP Customer implementation
CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X
ENDFORM user_command
amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM visualizar_linea
amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0
CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM buscar_exit
amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi
DATAl_subrc LIKE sy-subrc
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF
IF l_subrc EQ 0CLEAR ti_badi
- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF
ENDFORM buscar_badi
amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform
CHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
ENDFORM buscar_bte
amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4
CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS
cancel = 1wrong_type = 2OTHERS = 3
ENDFORM repid_f4
amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf
DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
SEARCH p_cf FOR c_type_ref
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
SPLIT p_cf+sy-fdpos(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
READ TABLE lt_cf INDEX 4
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
CHECK sy-subrc IS INITIAL
Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten
textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer
CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4
IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF
WHEN OTHERS Do Nothing ENDCASE
ENDFORM visualizar_badi
amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf
DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
CLEAR d010inc modsap modact
Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid
IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF
SEARCH p_cf FOR c_enhance
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
MOVE p_cf+sy-fdpos(l_cf) TO l_linea
SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3
TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS
Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _
Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit
CHECK sy-subrc IS INITIAL
Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM
modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3
ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname
CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ENDIF
ENDFORM visualizar_exit
amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit
DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo
DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe
DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE
CHECK p_fdex IS NOT INITIAL
CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe
MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex
IF p_prog IS NOT INITIAL
MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF
Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog
LOOP AT lt_d020s
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
REFRESH lt_d021s
Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4
Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X
SEARCH lt_d021s-fnam FOR -
IF sy-subrc IS INITIAL
MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum
Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname
APPEND lt_campo
ENDIF
ENDLOOPENDLOOP
CHECK lt_campo[] IS NOT INITIAL
SORT lt_campo BY repid dnum tabname fieldname
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
PERFORM sort TABLES ti_sortUSING TI_FDEX
CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3
ENDIF
ENDFORM armar_alv
amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03
CF X c_text_04
ENDFORM construir_catalogo_EXIT
amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic
STATICS l_col_pos LIKE sy-cucol
Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname
CHECK sy-subrc EQ 0
IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF
IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF
wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon
MODIFY pt_cat FROM wa_cat INDEX sy-tabix
ENDFORM asignar_campo_a_catalogo
amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv
CLEAR p_layout
IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X
ENDFORM definir_layout
amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n
REFRESH ti_eventsCLEAR wa_events
ALV Simple Block appendl_type = 2
Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events
Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF
ENDFORM construir_eventos
amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit
ENDFORM top_of_page
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD
ENDFORM TOP_OF_PAGE_UEXIT
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs
ENDFORM TOP_OF_PAGE_FDEX
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs
ENDFORM TOP_OF_PAGE_BADI
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant
CONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs
ENDFORM TOP_OF_PAGE_BTE
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENH
amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any
CLEAR pt_sort wa_sortREFRESH pt_sort
CASE p_tabnameWHEN TI_SUST
wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_VAL
wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_ENHOBJ
wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN OTHERS
IF p_tabname NE TI_FINAL
wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
IF p_tabname NE TI_FDEX
wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
ENDIF
ELSE
wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE
ENDFORM sort
amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado
wa_print-reserve_lines = 2
CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY
EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM mostrar_listado
amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield
DATA l_break TYPE c
Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE
Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL
CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf
ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF 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-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF
WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF
WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF
WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea
ti_bte-breakMOVE X TO l_breakENDIF
WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF
WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF
WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF
WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF
WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf
CALL FUNCTION RS_NAVIGATION_MONITORENDIF
WHEN TI_CIMP Customer implementation
CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X
ENDFORM user_command
amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM visualizar_linea
amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0
CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM buscar_exit
amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi
DATAl_subrc LIKE sy-subrc
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF
IF l_subrc EQ 0CLEAR ti_badi
- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF
ENDFORM buscar_badi
amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform
CHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
ENDFORM buscar_bte
amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4
CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS
cancel = 1wrong_type = 2OTHERS = 3
ENDFORM repid_f4
amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf
DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
SEARCH p_cf FOR c_type_ref
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
SPLIT p_cf+sy-fdpos(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
READ TABLE lt_cf INDEX 4
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
CHECK sy-subrc IS INITIAL
Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten
textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer
CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4
IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF
WHEN OTHERS Do Nothing ENDCASE
ENDFORM visualizar_badi
amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf
DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
CLEAR d010inc modsap modact
Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid
IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF
SEARCH p_cf FOR c_enhance
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
MOVE p_cf+sy-fdpos(l_cf) TO l_linea
SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3
TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS
Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _
Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit
CHECK sy-subrc IS INITIAL
Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM
modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3
ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname
CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ENDIF
ENDFORM visualizar_exit
amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit
DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo
DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe
DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE
CHECK p_fdex IS NOT INITIAL
CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe
MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex
IF p_prog IS NOT INITIAL
MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF
Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog
LOOP AT lt_d020s
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
REFRESH lt_d021s
Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4
Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X
SEARCH lt_d021s-fnam FOR -
IF sy-subrc IS INITIAL
MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum
Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname
APPEND lt_campo
ENDIF
ENDLOOPENDLOOP
CHECK lt_campo[] IS NOT INITIAL
SORT lt_campo BY repid dnum tabname fieldname
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
CF X c_text_04
ENDFORM construir_catalogo_EXIT
amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic
STATICS l_col_pos LIKE sy-cucol
Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname
CHECK sy-subrc EQ 0
IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF
IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF
wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon
MODIFY pt_cat FROM wa_cat INDEX sy-tabix
ENDFORM asignar_campo_a_catalogo
amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv
CLEAR p_layout
IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X
ENDFORM definir_layout
amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n
REFRESH ti_eventsCLEAR wa_events
ALV Simple Block appendl_type = 2
Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events
Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF
ENDFORM construir_eventos
amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit
ENDFORM top_of_page
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD
ENDFORM TOP_OF_PAGE_UEXIT
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs
ENDFORM TOP_OF_PAGE_FDEX
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs
ENDFORM TOP_OF_PAGE_BADI
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant
CONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs
ENDFORM TOP_OF_PAGE_BTE
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENH
amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any
CLEAR pt_sort wa_sortREFRESH pt_sort
CASE p_tabnameWHEN TI_SUST
wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_VAL
wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_ENHOBJ
wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN OTHERS
IF p_tabname NE TI_FINAL
wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
IF p_tabname NE TI_FDEX
wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
ENDIF
ELSE
wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE
ENDFORM sort
amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado
wa_print-reserve_lines = 2
CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY
EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM mostrar_listado
amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield
DATA l_break TYPE c
Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE
Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL
CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf
ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF 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-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF
WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF
WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF
WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea
ti_bte-breakMOVE X TO l_breakENDIF
WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF
WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF
WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF
WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF
WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf
CALL FUNCTION RS_NAVIGATION_MONITORENDIF
WHEN TI_CIMP Customer implementation
CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X
ENDFORM user_command
amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM visualizar_linea
amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0
CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM buscar_exit
amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi
DATAl_subrc LIKE sy-subrc
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF
IF l_subrc EQ 0CLEAR ti_badi
- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF
ENDFORM buscar_badi
amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform
CHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
ENDFORM buscar_bte
amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4
CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS
cancel = 1wrong_type = 2OTHERS = 3
ENDFORM repid_f4
amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf
DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
SEARCH p_cf FOR c_type_ref
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
SPLIT p_cf+sy-fdpos(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
READ TABLE lt_cf INDEX 4
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
CHECK sy-subrc IS INITIAL
Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten
textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer
CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4
IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF
WHEN OTHERS Do Nothing ENDCASE
ENDFORM visualizar_badi
amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf
DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
CLEAR d010inc modsap modact
Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid
IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF
SEARCH p_cf FOR c_enhance
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
MOVE p_cf+sy-fdpos(l_cf) TO l_linea
SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3
TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS
Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _
Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit
CHECK sy-subrc IS INITIAL
Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM
modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3
ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname
CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ENDIF
ENDFORM visualizar_exit
amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit
DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo
DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe
DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE
CHECK p_fdex IS NOT INITIAL
CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe
MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex
IF p_prog IS NOT INITIAL
MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF
Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog
LOOP AT lt_d020s
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
REFRESH lt_d021s
Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4
Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X
SEARCH lt_d021s-fnam FOR -
IF sy-subrc IS INITIAL
MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum
Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname
APPEND lt_campo
ENDIF
ENDLOOPENDLOOP
CHECK lt_campo[] IS NOT INITIAL
SORT lt_campo BY repid dnum tabname fieldname
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv
CLEAR p_layout
IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X
ENDFORM definir_layout
amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n
REFRESH ti_eventsCLEAR wa_events
ALV Simple Block appendl_type = 2
Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events
Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF
ENDFORM construir_eventos
amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit
ENDFORM top_of_page
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD
ENDFORM TOP_OF_PAGE_UEXIT
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs
ENDFORM TOP_OF_PAGE_FDEX
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs
ENDFORM TOP_OF_PAGE_BADI
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant
CONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs
ENDFORM TOP_OF_PAGE_BTE
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENH
amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any
CLEAR pt_sort wa_sortREFRESH pt_sort
CASE p_tabnameWHEN TI_SUST
wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_VAL
wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_ENHOBJ
wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN OTHERS
IF p_tabname NE TI_FINAL
wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
IF p_tabname NE TI_FDEX
wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
ENDIF
ELSE
wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE
ENDFORM sort
amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado
wa_print-reserve_lines = 2
CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY
EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM mostrar_listado
amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield
DATA l_break TYPE c
Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE
Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL
CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf
ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF 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-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF
WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF
WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF
WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea
ti_bte-breakMOVE X TO l_breakENDIF
WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF
WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF
WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF
WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF
WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf
CALL FUNCTION RS_NAVIGATION_MONITORENDIF
WHEN TI_CIMP Customer implementation
CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X
ENDFORM user_command
amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM visualizar_linea
amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0
CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM buscar_exit
amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi
DATAl_subrc LIKE sy-subrc
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF
IF l_subrc EQ 0CLEAR ti_badi
- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF
ENDFORM buscar_badi
amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform
CHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
ENDFORM buscar_bte
amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4
CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS
cancel = 1wrong_type = 2OTHERS = 3
ENDFORM repid_f4
amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf
DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
SEARCH p_cf FOR c_type_ref
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
SPLIT p_cf+sy-fdpos(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
READ TABLE lt_cf INDEX 4
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
CHECK sy-subrc IS INITIAL
Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten
textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer
CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4
IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF
WHEN OTHERS Do Nothing ENDCASE
ENDFORM visualizar_badi
amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf
DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
CLEAR d010inc modsap modact
Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid
IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF
SEARCH p_cf FOR c_enhance
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
MOVE p_cf+sy-fdpos(l_cf) TO l_linea
SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3
TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS
Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _
Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit
CHECK sy-subrc IS INITIAL
Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM
modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3
ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname
CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ENDIF
ENDFORM visualizar_exit
amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit
DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo
DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe
DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE
CHECK p_fdex IS NOT INITIAL
CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe
MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex
IF p_prog IS NOT INITIAL
MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF
Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog
LOOP AT lt_d020s
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
REFRESH lt_d021s
Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4
Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X
SEARCH lt_d021s-fnam FOR -
IF sy-subrc IS INITIAL
MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum
Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname
APPEND lt_campo
ENDIF
ENDLOOPENDLOOP
CHECK lt_campo[] IS NOT INITIAL
SORT lt_campo BY repid dnum tabname fieldname
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
ENDFORM construir_eventos
amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit
ENDFORM top_of_page
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD
ENDFORM TOP_OF_PAGE_UEXIT
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs
ENDFORM TOP_OF_PAGE_FDEX
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs
ENDFORM TOP_OF_PAGE_BADI
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant
CONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs
ENDFORM TOP_OF_PAGE_BTE
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENH
amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any
CLEAR pt_sort wa_sortREFRESH pt_sort
CASE p_tabnameWHEN TI_SUST
wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_VAL
wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_ENHOBJ
wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN OTHERS
IF p_tabname NE TI_FINAL
wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
IF p_tabname NE TI_FDEX
wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
ENDIF
ELSE
wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE
ENDFORM sort
amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado
wa_print-reserve_lines = 2
CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY
EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM mostrar_listado
amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield
DATA l_break TYPE c
Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE
Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL
CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf
ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF 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-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF
WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF
WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF
WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea
ti_bte-breakMOVE X TO l_breakENDIF
WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF
WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF
WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF
WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF
WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf
CALL FUNCTION RS_NAVIGATION_MONITORENDIF
WHEN TI_CIMP Customer implementation
CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X
ENDFORM user_command
amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM visualizar_linea
amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0
CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM buscar_exit
amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi
DATAl_subrc LIKE sy-subrc
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF
IF l_subrc EQ 0CLEAR ti_badi
- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF
ENDFORM buscar_badi
amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform
CHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
ENDFORM buscar_bte
amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4
CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS
cancel = 1wrong_type = 2OTHERS = 3
ENDFORM repid_f4
amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf
DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
SEARCH p_cf FOR c_type_ref
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
SPLIT p_cf+sy-fdpos(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
READ TABLE lt_cf INDEX 4
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
CHECK sy-subrc IS INITIAL
Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten
textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer
CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4
IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF
WHEN OTHERS Do Nothing ENDCASE
ENDFORM visualizar_badi
amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf
DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
CLEAR d010inc modsap modact
Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid
IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF
SEARCH p_cf FOR c_enhance
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
MOVE p_cf+sy-fdpos(l_cf) TO l_linea
SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3
TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS
Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _
Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit
CHECK sy-subrc IS INITIAL
Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM
modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3
ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname
CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ENDIF
ENDFORM visualizar_exit
amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit
DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo
DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe
DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE
CHECK p_fdex IS NOT INITIAL
CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe
MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex
IF p_prog IS NOT INITIAL
MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF
Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog
LOOP AT lt_d020s
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
REFRESH lt_d021s
Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4
Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X
SEARCH lt_d021s-fnam FOR -
IF sy-subrc IS INITIAL
MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum
Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname
APPEND lt_campo
ENDIF
ENDLOOPENDLOOP
CHECK lt_campo[] IS NOT INITIAL
SORT lt_campo BY repid dnum tabname fieldname
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs
ENDFORM TOP_OF_PAGE_FDEX
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs
ENDFORM TOP_OF_PAGE_BADI
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant
CONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs
ENDFORM TOP_OF_PAGE_BTE
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENH
amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any
CLEAR pt_sort wa_sortREFRESH pt_sort
CASE p_tabnameWHEN TI_SUST
wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_VAL
wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_ENHOBJ
wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN OTHERS
IF p_tabname NE TI_FINAL
wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
IF p_tabname NE TI_FDEX
wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
ENDIF
ELSE
wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE
ENDFORM sort
amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado
wa_print-reserve_lines = 2
CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY
EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM mostrar_listado
amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield
DATA l_break TYPE c
Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE
Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL
CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf
ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF 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-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF
WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF
WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF
WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea
ti_bte-breakMOVE X TO l_breakENDIF
WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF
WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF
WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF
WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF
WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf
CALL FUNCTION RS_NAVIGATION_MONITORENDIF
WHEN TI_CIMP Customer implementation
CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X
ENDFORM user_command
amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM visualizar_linea
amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0
CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM buscar_exit
amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi
DATAl_subrc LIKE sy-subrc
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF
IF l_subrc EQ 0CLEAR ti_badi
- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF
ENDFORM buscar_badi
amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform
CHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
ENDFORM buscar_bte
amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4
CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS
cancel = 1wrong_type = 2OTHERS = 3
ENDFORM repid_f4
amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf
DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
SEARCH p_cf FOR c_type_ref
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
SPLIT p_cf+sy-fdpos(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
READ TABLE lt_cf INDEX 4
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
CHECK sy-subrc IS INITIAL
Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten
textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer
CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4
IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF
WHEN OTHERS Do Nothing ENDCASE
ENDFORM visualizar_badi
amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf
DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
CLEAR d010inc modsap modact
Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid
IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF
SEARCH p_cf FOR c_enhance
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
MOVE p_cf+sy-fdpos(l_cf) TO l_linea
SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3
TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS
Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _
Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit
CHECK sy-subrc IS INITIAL
Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM
modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3
ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname
CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ENDIF
ENDFORM visualizar_exit
amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit
DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo
DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe
DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE
CHECK p_fdex IS NOT INITIAL
CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe
MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex
IF p_prog IS NOT INITIAL
MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF
Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog
LOOP AT lt_d020s
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
REFRESH lt_d021s
Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4
Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X
SEARCH lt_d021s-fnam FOR -
IF sy-subrc IS INITIAL
MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum
Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname
APPEND lt_campo
ENDIF
ENDLOOPENDLOOP
CHECK lt_campo[] IS NOT INITIAL
SORT lt_campo BY repid dnum tabname fieldname
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
CONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs
ENDFORM TOP_OF_PAGE_BTE
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS
DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENH
amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any
CLEAR pt_sort wa_sortREFRESH pt_sort
CASE p_tabnameWHEN TI_SUST
wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_VAL
wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_ENHOBJ
wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN OTHERS
IF p_tabname NE TI_FINAL
wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
IF p_tabname NE TI_FDEX
wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
ENDIF
ELSE
wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE
ENDFORM sort
amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado
wa_print-reserve_lines = 2
CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY
EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM mostrar_listado
amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield
DATA l_break TYPE c
Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE
Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL
CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf
ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF 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-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF
WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF
WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF
WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea
ti_bte-breakMOVE X TO l_breakENDIF
WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF
WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF
WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF
WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF
WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf
CALL FUNCTION RS_NAVIGATION_MONITORENDIF
WHEN TI_CIMP Customer implementation
CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X
ENDFORM user_command
amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM visualizar_linea
amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0
CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM buscar_exit
amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi
DATAl_subrc LIKE sy-subrc
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF
IF l_subrc EQ 0CLEAR ti_badi
- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF
ENDFORM buscar_badi
amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform
CHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
ENDFORM buscar_bte
amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4
CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS
cancel = 1wrong_type = 2OTHERS = 3
ENDFORM repid_f4
amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf
DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
SEARCH p_cf FOR c_type_ref
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
SPLIT p_cf+sy-fdpos(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
READ TABLE lt_cf INDEX 4
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
CHECK sy-subrc IS INITIAL
Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten
textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer
CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4
IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF
WHEN OTHERS Do Nothing ENDCASE
ENDFORM visualizar_badi
amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf
DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
CLEAR d010inc modsap modact
Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid
IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF
SEARCH p_cf FOR c_enhance
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
MOVE p_cf+sy-fdpos(l_cf) TO l_linea
SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3
TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS
Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _
Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit
CHECK sy-subrc IS INITIAL
Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM
modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3
ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname
CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ENDIF
ENDFORM visualizar_exit
amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit
DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo
DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe
DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE
CHECK p_fdex IS NOT INITIAL
CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe
MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex
IF p_prog IS NOT INITIAL
MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF
Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog
LOOP AT lt_d020s
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
REFRESH lt_d021s
Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4
Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X
SEARCH lt_d021s-fnam FOR -
IF sy-subrc IS INITIAL
MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum
Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname
APPEND lt_campo
ENDIF
ENDLOOPENDLOOP
CHECK lt_campo[] IS NOT INITIAL
SORT lt_campo BY repid dnum tabname fieldname
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
CLEAR pt_sort wa_sort
wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_VAL
wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN TI_ENHOBJ
wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
WHEN OTHERS
IF p_tabname NE TI_FINAL
wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
IF p_tabname NE TI_FDEX
wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
ENDIF
ELSE
wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE
ENDFORM sort
amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado
wa_print-reserve_lines = 2
CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY
EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM mostrar_listado
amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield
DATA l_break TYPE c
Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE
Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL
CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf
ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF 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-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF
WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF
WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF
WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea
ti_bte-breakMOVE X TO l_breakENDIF
WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF
WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF
WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF
WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF
WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf
CALL FUNCTION RS_NAVIGATION_MONITORENDIF
WHEN TI_CIMP Customer implementation
CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X
ENDFORM user_command
amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM visualizar_linea
amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0
CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM buscar_exit
amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi
DATAl_subrc LIKE sy-subrc
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF
IF l_subrc EQ 0CLEAR ti_badi
- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF
ENDFORM buscar_badi
amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform
CHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
ENDFORM buscar_bte
amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4
CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS
cancel = 1wrong_type = 2OTHERS = 3
ENDFORM repid_f4
amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf
DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
SEARCH p_cf FOR c_type_ref
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
SPLIT p_cf+sy-fdpos(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
READ TABLE lt_cf INDEX 4
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
CHECK sy-subrc IS INITIAL
Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten
textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer
CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4
IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF
WHEN OTHERS Do Nothing ENDCASE
ENDFORM visualizar_badi
amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf
DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
CLEAR d010inc modsap modact
Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid
IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF
SEARCH p_cf FOR c_enhance
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
MOVE p_cf+sy-fdpos(l_cf) TO l_linea
SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3
TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS
Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _
Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit
CHECK sy-subrc IS INITIAL
Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM
modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3
ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname
CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ENDIF
ENDFORM visualizar_exit
amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit
DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo
DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe
DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE
CHECK p_fdex IS NOT INITIAL
CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe
MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex
IF p_prog IS NOT INITIAL
MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF
Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog
LOOP AT lt_d020s
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
REFRESH lt_d021s
Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4
Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X
SEARCH lt_d021s-fnam FOR -
IF sy-subrc IS INITIAL
MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum
Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname
APPEND lt_campo
ENDIF
ENDLOOPENDLOOP
CHECK lt_campo[] IS NOT INITIAL
SORT lt_campo BY repid dnum tabname fieldname
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
CLEAR pt_sort wa_sort
IF p_tabname NE TI_FDEX
wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
ENDIF
ELSE
wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort
CLEAR pt_sort wa_sort
wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE
ENDFORM sort
amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado
wa_print-reserve_lines = 2
CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY
EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM mostrar_listado
amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield
DATA l_break TYPE c
Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE
Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL
CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf
ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF 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-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF
WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF
WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF
WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea
ti_bte-breakMOVE X TO l_breakENDIF
WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF
WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF
WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF
WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF
WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf
CALL FUNCTION RS_NAVIGATION_MONITORENDIF
WHEN TI_CIMP Customer implementation
CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X
ENDFORM user_command
amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM visualizar_linea
amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0
CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM buscar_exit
amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi
DATAl_subrc LIKE sy-subrc
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF
IF l_subrc EQ 0CLEAR ti_badi
- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF
ENDFORM buscar_badi
amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform
CHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
ENDFORM buscar_bte
amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4
CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS
cancel = 1wrong_type = 2OTHERS = 3
ENDFORM repid_f4
amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf
DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
SEARCH p_cf FOR c_type_ref
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
SPLIT p_cf+sy-fdpos(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
READ TABLE lt_cf INDEX 4
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
CHECK sy-subrc IS INITIAL
Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten
textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer
CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4
IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF
WHEN OTHERS Do Nothing ENDCASE
ENDFORM visualizar_badi
amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf
DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
CLEAR d010inc modsap modact
Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid
IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF
SEARCH p_cf FOR c_enhance
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
MOVE p_cf+sy-fdpos(l_cf) TO l_linea
SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3
TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS
Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _
Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit
CHECK sy-subrc IS INITIAL
Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM
modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3
ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname
CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ENDIF
ENDFORM visualizar_exit
amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit
DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo
DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe
DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE
CHECK p_fdex IS NOT INITIAL
CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe
MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex
IF p_prog IS NOT INITIAL
MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF
Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog
LOOP AT lt_d020s
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
REFRESH lt_d021s
Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4
Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X
SEARCH lt_d021s-fnam FOR -
IF sy-subrc IS INITIAL
MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum
Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname
APPEND lt_campo
ENDIF
ENDLOOPENDLOOP
CHECK lt_campo[] IS NOT INITIAL
SORT lt_campo BY repid dnum tabname fieldname
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM mostrar_listado
amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield
DATA l_break TYPE c
Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE
Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL
CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf
ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF 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-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF
WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF
WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF
WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea
ti_bte-breakMOVE X TO l_breakENDIF
WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF
WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF
WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF
WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF
WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf
CALL FUNCTION RS_NAVIGATION_MONITORENDIF
WHEN TI_CIMP Customer implementation
CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X
ENDFORM user_command
amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM visualizar_linea
amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0
CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM buscar_exit
amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi
DATAl_subrc LIKE sy-subrc
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF
IF l_subrc EQ 0CLEAR ti_badi
- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF
ENDFORM buscar_badi
amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform
CHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
ENDFORM buscar_bte
amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4
CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS
cancel = 1wrong_type = 2OTHERS = 3
ENDFORM repid_f4
amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf
DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
SEARCH p_cf FOR c_type_ref
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
SPLIT p_cf+sy-fdpos(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
READ TABLE lt_cf INDEX 4
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
CHECK sy-subrc IS INITIAL
Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten
textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer
CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4
IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF
WHEN OTHERS Do Nothing ENDCASE
ENDFORM visualizar_badi
amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf
DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
CLEAR d010inc modsap modact
Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid
IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF
SEARCH p_cf FOR c_enhance
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
MOVE p_cf+sy-fdpos(l_cf) TO l_linea
SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3
TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS
Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _
Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit
CHECK sy-subrc IS INITIAL
Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM
modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3
ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname
CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ENDIF
ENDFORM visualizar_exit
amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit
DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo
DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe
DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE
CHECK p_fdex IS NOT INITIAL
CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe
MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex
IF p_prog IS NOT INITIAL
MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF
Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog
LOOP AT lt_d020s
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
REFRESH lt_d021s
Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4
Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X
SEARCH lt_d021s-fnam FOR -
IF sy-subrc IS INITIAL
MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum
Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname
APPEND lt_campo
ENDIF
ENDLOOPENDLOOP
CHECK lt_campo[] IS NOT INITIAL
SORT lt_campo BY repid dnum tabname fieldname
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF 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-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF
WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF
WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF
WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea
ti_bte-breakMOVE X TO l_breakENDIF
WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF
WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF
WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF
WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF
WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf
CALL FUNCTION RS_NAVIGATION_MONITORENDIF
WHEN TI_CIMP Customer implementation
CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X
ENDFORM user_command
amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM visualizar_linea
amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0
CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM buscar_exit
amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi
DATAl_subrc LIKE sy-subrc
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF
IF l_subrc EQ 0CLEAR ti_badi
- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF
ENDFORM buscar_badi
amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform
CHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
ENDFORM buscar_bte
amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4
CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS
cancel = 1wrong_type = 2OTHERS = 3
ENDFORM repid_f4
amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf
DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
SEARCH p_cf FOR c_type_ref
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
SPLIT p_cf+sy-fdpos(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
READ TABLE lt_cf INDEX 4
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
CHECK sy-subrc IS INITIAL
Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten
textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer
CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4
IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF
WHEN OTHERS Do Nothing ENDCASE
ENDFORM visualizar_badi
amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf
DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
CLEAR d010inc modsap modact
Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid
IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF
SEARCH p_cf FOR c_enhance
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
MOVE p_cf+sy-fdpos(l_cf) TO l_linea
SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3
TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS
Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _
Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit
CHECK sy-subrc IS INITIAL
Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM
modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3
ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname
CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ENDIF
ENDFORM visualizar_exit
amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit
DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo
DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe
DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE
CHECK p_fdex IS NOT INITIAL
CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe
MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex
IF p_prog IS NOT INITIAL
MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF
Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog
LOOP AT lt_d020s
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
REFRESH lt_d021s
Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4
Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X
SEARCH lt_d021s-fnam FOR -
IF sy-subrc IS INITIAL
MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum
Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname
APPEND lt_campo
ENDIF
ENDLOOPENDLOOP
CHECK lt_campo[] IS NOT INITIAL
SORT lt_campo BY repid dnum tabname fieldname
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
ti_bte-breakMOVE X TO l_breakENDIF
WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF
WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF
WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF
WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF
WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf
CALL FUNCTION RS_NAVIGATION_MONITORENDIF
WHEN TI_CIMP Customer implementation
CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X
ENDFORM user_command
amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM visualizar_linea
amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0
CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM buscar_exit
amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi
DATAl_subrc LIKE sy-subrc
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF
IF l_subrc EQ 0CLEAR ti_badi
- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF
ENDFORM buscar_badi
amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform
CHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
ENDFORM buscar_bte
amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4
CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS
cancel = 1wrong_type = 2OTHERS = 3
ENDFORM repid_f4
amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf
DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
SEARCH p_cf FOR c_type_ref
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
SPLIT p_cf+sy-fdpos(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
READ TABLE lt_cf INDEX 4
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
CHECK sy-subrc IS INITIAL
Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten
textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer
CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4
IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF
WHEN OTHERS Do Nothing ENDCASE
ENDFORM visualizar_badi
amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf
DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
CLEAR d010inc modsap modact
Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid
IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF
SEARCH p_cf FOR c_enhance
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
MOVE p_cf+sy-fdpos(l_cf) TO l_linea
SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3
TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS
Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _
Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit
CHECK sy-subrc IS INITIAL
Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM
modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3
ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname
CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ENDIF
ENDFORM visualizar_exit
amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit
DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo
DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe
DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE
CHECK p_fdex IS NOT INITIAL
CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe
MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex
IF p_prog IS NOT INITIAL
MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF
Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog
LOOP AT lt_d020s
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
REFRESH lt_d021s
Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4
Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X
SEARCH lt_d021s-fnam FOR -
IF sy-subrc IS INITIAL
MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum
Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname
APPEND lt_campo
ENDIF
ENDLOOPENDLOOP
CHECK lt_campo[] IS NOT INITIAL
SORT lt_campo BY repid dnum tabname fieldname
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
WHEN OTHERS DO NOTHING ENDCASE
IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X
ENDFORM user_command
amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM visualizar_linea
amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0
CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM buscar_exit
amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi
DATAl_subrc LIKE sy-subrc
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF
IF l_subrc EQ 0CLEAR ti_badi
- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF
ENDFORM buscar_badi
amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform
CHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
ENDFORM buscar_bte
amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4
CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS
cancel = 1wrong_type = 2OTHERS = 3
ENDFORM repid_f4
amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf
DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
SEARCH p_cf FOR c_type_ref
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
SPLIT p_cf+sy-fdpos(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
READ TABLE lt_cf INDEX 4
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
CHECK sy-subrc IS INITIAL
Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten
textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer
CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4
IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF
WHEN OTHERS Do Nothing ENDCASE
ENDFORM visualizar_badi
amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf
DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
CLEAR d010inc modsap modact
Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid
IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF
SEARCH p_cf FOR c_enhance
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
MOVE p_cf+sy-fdpos(l_cf) TO l_linea
SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3
TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS
Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _
Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit
CHECK sy-subrc IS INITIAL
Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM
modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3
ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname
CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ENDIF
ENDFORM visualizar_exit
amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit
DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo
DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe
DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE
CHECK p_fdex IS NOT INITIAL
CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe
MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex
IF p_prog IS NOT INITIAL
MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF
Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog
LOOP AT lt_d020s
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
REFRESH lt_d021s
Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4
Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X
SEARCH lt_d021s-fnam FOR -
IF sy-subrc IS INITIAL
MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum
Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname
APPEND lt_campo
ENDIF
ENDLOOPENDLOOP
CHECK lt_campo[] IS NOT INITIAL
SORT lt_campo BY repid dnum tabname fieldname
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0
CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF
ENDFORM buscar_exit
amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi
DATAl_subrc LIKE sy-subrc
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF
IF l_subrc EQ 0CLEAR ti_badi
- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF
ENDFORM buscar_badi
amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform
CHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
ENDFORM buscar_bte
amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4
CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS
cancel = 1wrong_type = 2OTHERS = 3
ENDFORM repid_f4
amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf
DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
SEARCH p_cf FOR c_type_ref
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
SPLIT p_cf+sy-fdpos(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
READ TABLE lt_cf INDEX 4
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
CHECK sy-subrc IS INITIAL
Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten
textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer
CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4
IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF
WHEN OTHERS Do Nothing ENDCASE
ENDFORM visualizar_badi
amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf
DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
CLEAR d010inc modsap modact
Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid
IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF
SEARCH p_cf FOR c_enhance
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
MOVE p_cf+sy-fdpos(l_cf) TO l_linea
SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3
TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS
Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _
Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit
CHECK sy-subrc IS INITIAL
Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM
modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3
ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname
CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ENDIF
ENDFORM visualizar_exit
amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit
DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo
DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe
DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE
CHECK p_fdex IS NOT INITIAL
CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe
MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex
IF p_prog IS NOT INITIAL
MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF
Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog
LOOP AT lt_d020s
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
REFRESH lt_d021s
Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4
Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X
SEARCH lt_d021s-fnam FOR -
IF sy-subrc IS INITIAL
MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum
Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname
APPEND lt_campo
ENDIF
ENDLOOPENDLOOP
CHECK lt_campo[] IS NOT INITIAL
SORT lt_campo BY repid dnum tabname fieldname
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF
ENDFORM buscar_badi
amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform
CHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
ENDFORM buscar_bte
amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4
CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS
cancel = 1wrong_type = 2OTHERS = 3
ENDFORM repid_f4
amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf
DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
SEARCH p_cf FOR c_type_ref
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
SPLIT p_cf+sy-fdpos(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
READ TABLE lt_cf INDEX 4
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
CHECK sy-subrc IS INITIAL
Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten
textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer
CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4
IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF
WHEN OTHERS Do Nothing ENDCASE
ENDFORM visualizar_badi
amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf
DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
CLEAR d010inc modsap modact
Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid
IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF
SEARCH p_cf FOR c_enhance
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
MOVE p_cf+sy-fdpos(l_cf) TO l_linea
SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3
TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS
Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _
Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit
CHECK sy-subrc IS INITIAL
Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM
modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3
ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname
CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ENDIF
ENDFORM visualizar_exit
amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit
DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo
DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe
DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE
CHECK p_fdex IS NOT INITIAL
CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe
MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex
IF p_prog IS NOT INITIAL
MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF
Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog
LOOP AT lt_d020s
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
REFRESH lt_d021s
Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4
Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X
SEARCH lt_d021s-fnam FOR -
IF sy-subrc IS INITIAL
MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum
Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname
APPEND lt_campo
ENDIF
ENDLOOPENDLOOP
CHECK lt_campo[] IS NOT INITIAL
SORT lt_campo BY repid dnum tabname fieldname
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
CHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL
- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0
CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF
ENDFORM buscar_bte
amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4
CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS
cancel = 1wrong_type = 2OTHERS = 3
ENDFORM repid_f4
amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf
DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
SEARCH p_cf FOR c_type_ref
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
SPLIT p_cf+sy-fdpos(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
READ TABLE lt_cf INDEX 4
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
CHECK sy-subrc IS INITIAL
Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten
textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer
CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4
IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF
WHEN OTHERS Do Nothing ENDCASE
ENDFORM visualizar_badi
amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf
DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
CLEAR d010inc modsap modact
Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid
IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF
SEARCH p_cf FOR c_enhance
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
MOVE p_cf+sy-fdpos(l_cf) TO l_linea
SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3
TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS
Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _
Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit
CHECK sy-subrc IS INITIAL
Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM
modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3
ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname
CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ENDIF
ENDFORM visualizar_exit
amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit
DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo
DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe
DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE
CHECK p_fdex IS NOT INITIAL
CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe
MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex
IF p_prog IS NOT INITIAL
MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF
Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog
LOOP AT lt_d020s
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
REFRESH lt_d021s
Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4
Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X
SEARCH lt_d021s-fnam FOR -
IF sy-subrc IS INITIAL
MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum
Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname
APPEND lt_campo
ENDIF
ENDLOOPENDLOOP
CHECK lt_campo[] IS NOT INITIAL
SORT lt_campo BY repid dnum tabname fieldname
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
cancel = 1wrong_type = 2OTHERS = 3
ENDFORM repid_f4
amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf
DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
SEARCH p_cf FOR c_type_ref
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
SPLIT p_cf+sy-fdpos(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
READ TABLE lt_cf INDEX 4
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
CHECK sy-subrc IS INITIAL
Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten
textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer
CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4
IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF
WHEN OTHERS Do Nothing ENDCASE
ENDFORM visualizar_badi
amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf
DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
CLEAR d010inc modsap modact
Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid
IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF
SEARCH p_cf FOR c_enhance
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
MOVE p_cf+sy-fdpos(l_cf) TO l_linea
SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3
TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS
Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _
Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit
CHECK sy-subrc IS INITIAL
Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM
modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3
ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname
CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ENDIF
ENDFORM visualizar_exit
amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit
DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo
DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe
DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE
CHECK p_fdex IS NOT INITIAL
CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe
MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex
IF p_prog IS NOT INITIAL
MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF
Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog
LOOP AT lt_d020s
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
REFRESH lt_d021s
Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4
Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X
SEARCH lt_d021s-fnam FOR -
IF sy-subrc IS INITIAL
MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum
Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname
APPEND lt_campo
ENDIF
ENDLOOPENDLOOP
CHECK lt_campo[] IS NOT INITIAL
SORT lt_campo BY repid dnum tabname fieldname
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer
CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4
IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF
WHEN OTHERS Do Nothing ENDCASE
ENDFORM visualizar_badi
amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf
DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
CLEAR d010inc modsap modact
Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid
IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF
SEARCH p_cf FOR c_enhance
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
MOVE p_cf+sy-fdpos(l_cf) TO l_linea
SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3
TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS
Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _
Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit
CHECK sy-subrc IS INITIAL
Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM
modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3
ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname
CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ENDIF
ENDFORM visualizar_exit
amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit
DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo
DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe
DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE
CHECK p_fdex IS NOT INITIAL
CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe
MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex
IF p_prog IS NOT INITIAL
MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF
Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog
LOOP AT lt_d020s
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
REFRESH lt_d021s
Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4
Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X
SEARCH lt_d021s-fnam FOR -
IF sy-subrc IS INITIAL
MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum
Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname
APPEND lt_campo
ENDIF
ENDLOOPENDLOOP
CHECK lt_campo[] IS NOT INITIAL
SORT lt_campo BY repid dnum tabname fieldname
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
CLEAR d010inc modsap modact
Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid
IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF
SEARCH p_cf FOR c_enhance
CHECK sy-subrc IS INITIAL
REFRESH lt_cf
l_cf = 500 - sy-fdpos
MOVE p_cf+sy-fdpos(l_cf) TO l_linea
SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3
TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS
Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _
Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit
CHECK sy-subrc IS INITIAL
Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM
modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3
ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname
CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ENDIF
ENDFORM visualizar_exit
amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit
DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo
DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe
DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE
CHECK p_fdex IS NOT INITIAL
CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe
MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex
IF p_prog IS NOT INITIAL
MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF
Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog
LOOP AT lt_d020s
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
REFRESH lt_d021s
Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4
Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X
SEARCH lt_d021s-fnam FOR -
IF sy-subrc IS INITIAL
MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum
Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname
APPEND lt_campo
ENDIF
ENDLOOPENDLOOP
CHECK lt_campo[] IS NOT INITIAL
SORT lt_campo BY repid dnum tabname fieldname
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3
ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname
CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ENDIF
ENDFORM visualizar_exit
amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit
DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo
DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe
DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE
CHECK p_fdex IS NOT INITIAL
CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe
MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex
IF p_prog IS NOT INITIAL
MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF
Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog
LOOP AT lt_d020s
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
REFRESH lt_d021s
Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4
Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X
SEARCH lt_d021s-fnam FOR -
IF sy-subrc IS INITIAL
MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum
Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname
APPEND lt_campo
ENDIF
ENDLOOPENDLOOP
CHECK lt_campo[] IS NOT INITIAL
SORT lt_campo BY repid dnum tabname fieldname
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF
Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog
LOOP AT lt_d020s
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
REFRESH lt_d021s
Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4
Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X
SEARCH lt_d021s-fnam FOR -
IF sy-subrc IS INITIAL
MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum
Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname
APPEND lt_campo
ENDIF
ENDLOOPENDLOOP
CHECK lt_campo[] IS NOT INITIAL
SORT lt_campo BY repid dnum tabname fieldname
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
DELETE ADJACENT DUPLICATES FROM lt_campo
Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname
SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l
LOOP AT lt_dd03l
CLEAR tddir tddirs
SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname
CHECK sy-subrc IS INITIAL
DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill
IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog
CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF
Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf
IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF
READ TABLE lt_fe WITH KEY cf = lt_fe-cf
CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP
LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
ENDLOOP
ENDFORM buscar_field_exit
amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf
DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c
SEARCH p_cf FOR c_bte
IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ELSE
SEARCH p_cf FOR c_bte1
CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14
l_cf = 500 - l_fdpos
MOVE p_cf+l_fdpos(l_cf) TO l_linea
MOVE l_linea+9(1) TO l_tipo
ENDIF
IF l_tipo IS NOT INITIAL
PERFORM visualizar_bte USING l_tipol_linea
ELSECALL TRANSACTION FIBFENDIF
ENDFORM fibf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2
Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM breakpoint
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_badi
amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_bte
amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X TIPO X X c_text_05CF X c_text_04
ENDFORM construir_catalogo_FDEX
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc
DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
CHECK lt_break[] IS NOT INITIAL
IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix
MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF
IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix
MOVEti_badi-linea TO l_lineti_badi-programa TO l_program
READ TABLE lt_break INTO wa_break
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
WITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF
IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix
MOVEti_bte-linea TO l_lineti_bte-programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF
ENDFORM cargar_break
amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id
TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc
DATAl_tabix TYPE sy-tabix
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc
Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break
SELECT SINGLE FROM d010incWHERE include = p_programa
IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF
MOVEp_linea TO l_linep_programa TO l_program
READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line
IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF
Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab
ENDFORM asignar_break
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit
IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF
PERFORM get_objects Get Objects
ENDFORM buscar_user_exit
amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects
DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area
DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix
SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog
IF sy-subrc = 0
SORT ti_tadir BY obj_name devclass
SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass
IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
- Get UserExit namesLOOP AT ti_jtab
SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E
APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area
l_fname = ti_final-member
CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include
LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP
ENDFORM get_objects
amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X
ENDFORM construir_catalogo_uexit
amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
FORM visualizar_ampliacion
DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF
SELECT SINGLE FROM modsapWHERE member EQ l_member
IF sy-subrc IS INITIAL
Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3
ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
ENDIF
ENDFORM visualizar_ampliacion
amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea
RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs
REFRESH r_event r_procs
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event
SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs
SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE
ENDFORM visualizar_bte
amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c
DATAl_linea(500) TYPE c
DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
MOVE lt_fields-value TO l_linea
PERFORM visualizar_bte USING p_tipol_linea
ENDFORM cargar_bte
amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
DATAl_linea(500) TYPE c
DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE
InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name
Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name
IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4
ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF
ENDFORM visualizar_interface
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones
CHECK p_sust IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922
ENDFORM buscar_sustituciones
amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST
ENDFORM construir_catalogo_sust
amp---------------------------------------------------------------------
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones
ENDFORM TOP_OF_PAGE_SUST
amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4
CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
not_found = 1OTHERS = 2
ENDFORM visualizar_sust
amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones
CHECK p_val IS NOT INITIAL
SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931
ENDFORM buscar_validaciones
amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID
ENDFORM construir_catalogo_val
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones
ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr
DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent
CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2
CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
not_found = 1OTHERS = 2
ENDFORM visualizar_val
amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto
DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE
MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF
SELECT SINGLE FROM modsapWHERE name EQ l_name
IF sy-subrc IS INITIAL
MOVE l_name TO l_member
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
SELECT SINGLE FROM modactWHERE member EQ l_member
IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard
CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF
ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF
ENDFORM visualizar_proyecto
amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0
- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE
- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario
- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh
CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
APPEND ti_enh
ENDIFENDIFENDIF
ENDFORM buscar_punto_ampliacioacuten
amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04
ENDFORM construir_catalogo_enh
amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh
DATA l_obj_name TYPE enhobj-obj_name
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name
CHECK p_enh IS NOT INITIAL
IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF
REFRESH lt_obj_name
LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP
SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name
ENDFORM buscar_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
SEL X X X X X
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME
ENDFORM construir_catalogo_enhobj
amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj
DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c
DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS
Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten
ENDFORM TOP_OF_PAGE_ENHOBJ
amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3
ENDFORM bi_se19
amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro
CLEAR ti_bdcdatati_bdcdata-program = program
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata
ENDFORM BDC_DYNPRO
amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval
CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata
ENDFORM BDC_FIELD
amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa
DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)
CHECK ti_gb31t[] IS NOT INITIAL
DO
Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2
IF l_exit EQ XEXITENDIF
CHECK l_exit IS INITIAL
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND
CHECK l_boolpool IS NOT INITIAL
MOVE l_boolpool TO l_repid
Visualizo el programaPERFORM visualizar_linea USING l_repid01
ENDDO
ENDFORM visualizar_programa
amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope
STATICS l_flag TYPE c
DATA l_tit(65) TYPE c
CHECK l_flag IS INITIAL
l_flag = X
WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM texto_tope
amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf
DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i
DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf
FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off
CHECK l_off IS NOT INITIAL
ADD 7 TO l_offl_cf = 500 - l_off
SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf
CHECK sy-subrc IS INITIAL
Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1
TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING
MOVE lt_cf-linea TO l_enhspotname
Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
invalid_object_type = 2OTHERS = 3
ENDFORM bi_se18
amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit
DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE
DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE
MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext
APPEND lt_fields
CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2
Verifico que no haya canceladoCHECK l_ret NE A
READ TABLE lt_fields INDEX 1
CHECK sy-subrc IS INITIAL
IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
MOVE lt_fields-value TO l_nameENDIF
Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_
LOOP AT lt_tfdir
CLEARl_group l_include l_namespace l_str_area
l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2
IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl
IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl
CHECK sy-subrc IS INITIAL
Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP
CHECK l_flag IS INITIAL
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value
ENDFORM visualizar_fm_exit
amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter
tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten
ENDFORM def_text_parameter
amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones
Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt
Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt
Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt
icon_create RESULT name text infoicon_create
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation
MOVE sust TO val
ENDFORM def_botones
amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text
DATAl_tit(65) TYPE c
STATICS l_col TYPE i
PERFORM texto_tope
IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
FORMAT COLOR = l_col
WRITE p_text TO l_tit CENTERED
TRANSLATE l_tit USING
WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
FORMAT COLOR = 2
IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF
WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline
IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu
CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space
ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode
CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space
ENDIF
WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
IF p_inc IS NOT INITIAL
CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline
ENDIF
CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space
WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline
SKIP
ENDFORM set_header
amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh
DATAl_repid LIKE sy-repid
l_repid = sy-repid
PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout
CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2
ENDFORM visualizar_imp_enh
amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp
DATAl_repid LIKE sy-repid
REFRESH ti_cat
l_repid = sy-repid
CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3
Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING
ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X
ENDFORM construir_catalogo_cimp
amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh
SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A
SORT ti_cimp BY enhname obj_type
ENDFORM get_imp_enh
amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any
DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string
CHECK p_enhinclude IS NOT INITIAL
READ REPORT p_enhinclude INTO lt_source
CHECK sy-subrc IS INITIAL
CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source
ENDFORM visualizar_enh_cf
Recommended