W Pub: ABAP Rut Break ME

Tabla de diccionario necesaria

Z_TB_BRK

Programa que contiene los forms principales

  1. REPORT Z_I_BREAK_ME_PLUS.
  2.  
  3. *--[ Rutinas de soporte para el include Z_I_BREAK_ME
  4.  
  5. FORM INSERT_BKP USING P_CPROG TYPE SYCPROG
  6.                       P_REPID TYPE SYREPID.
  7.   DATA: L_IG_TB_BRK TYPE Z_TB_BRK,
  8.         l_motivo type TEXT50.
  9.   IF SY-LISEL+0(1) = '@'.
  10. *--[ Buscamos por TAG
  11.     SELECT SINGLE motivo INTO l_motivo FROM Z_TB_BRK
  12.            WHERE  TAG   = SY-LISEL.
  13.  
  14.   ELSE.
  15. *--[ Buscamos por programa
  16.     SELECT MOTIVO INTO SY-LISEL FROM Z_TB_BRK
  17.            WHERE  CPROG   = P_CPROG
  18.            AND    REPID   = P_REPID
  19.           ORDER BY PRIMARY KEY.
  20.       EXIT.
  21.     ENDSELECT.
  22.   ENDIF.
  23.   IF SY-SUBRC NE 0.
  24.     CLEAR L_Z_TB_BRK.
  25.     IF SY-LISEL+0(1) = '@'.
  26.       L_Z_TB_BRK-TAG = SY-LISEL.
  27.       if sy-msgv1 is INITIAL.
  28.          L_Z_TB_BRK-MOTIVO = '## AUTOMATIC TAG BREAK ##'.
  29.       else.
  30.          L_Z_TB_BRK-MOTIVO = sy-msgv1.
  31.       endif.
  32.     ELSE.
  33.       L_Z_TB_BRK-MOTIVO = '## AUTOMATIC SOURCE BREAK ##'.
  34.     ENDIF.
  35.     L_Z_TB_BRK-CPROG = P_CPROG.
  36.     L_Z_TB_BRK-REPID = P_REPID.
  37.     L_Z_TB_BRK-UNAME = sy-uname.
  38.     L_Z_TB_BRK-DATBI = '99991231'.
  39.     L_Z_TB_BRK-DATAB = sy-datum.
  40.     INSERT Z_TB_BRK FROM L_Z_TB_BRK.
  41.   ENDIF.
  42. ENDFORM.                    "insert_BKP
  43.  
  44.  
  45. FORM CHECK_BKP USING P_CPROG TYPE SYCPROG
  46.                      P_REPID TYPE SYREPID
  47.                CHANGING P_SUBRC.
  48.   IF SY-LISEL+0(1) = '@'.
  49.  
  50.     SELECT BUCLE INTO SY-LISEL FROM Z_TB_BRK
  51.            WHERE  TAG   = SY-LISEL
  52.            AND    ( UNAME   = SY-UNAME OR UNAME = '*' )
  53.            AND    DATBI   >= SY-DATUM
  54.            AND    DATAB   <= SY-DATUM
  55.            AND    ACTIV   = 'X'
  56.           ORDER BY PRIMARY KEY.
  57.       EXIT.
  58.     ENDSELECT.
  59.  
  60.   ELSE.
  61.  
  62.     SELECT BUCLE INTO SY-LISEL FROM Z_TB_BRK
  63.            WHERE  CPROG   = P_CPROG
  64.            AND    REPID   = P_REPID
  65.            AND    ( UNAME   = SY-UNAME OR UNAME = '*' )
  66.            AND    DATBI   >= SY-DATUM
  67.            AND    DATAB   <= SY-DATUM
  68.            AND    ACTIV   = 'X'
  69.           ORDER BY PRIMARY KEY.
  70.         EXIT.
  71.       ENDSELECT.
  72.  
  73.   ENDIF.
  74.   if sy-subrc eq 0.
  75.      P_SUBRC = 100.
  76.      if SY-lisel = 'X'.
  77. *--[ Bucle infinito activo
  78.         add 1 to P_SUBRC.
  79.      endif.
  80.   endif.
  81. ENDFORM.                    "CHECK_BKP

Include Z_I_BREAK_ME

  1. *--[ Gestor de Break-Points
  2. *--[
  3. *--[ V.1.01 20150715 - Se a&#241;ade gestión de bucles infinitos
  4. *--[
  5. *--[ USA A VARIABLE SY-LISEL PARA PASAR EL PARAMETRO DEL TAG
  6. *--[ EL TAG SIEMPRE DEBE COMENZAR POR @
  7. *--[
  8. *--[ A&#241;adimos el break a la tabla, por si no está
  9. PERFORM INSERT_BKP IN PROGRAM Z_I_BREAK_ME_PLUS IF FOUND
  10.         USING SY-CPROG
  11.               SY-REPID.
  12.  
  13. *--[ Comprobamos si existe completamente el BKP
  14. PERFORM CHECK_BKP IN PROGRAM Z_I_BREAK_ME_PLUS IF FOUND
  15.         USING sy-cprog
  16.               sy-repid
  17.         CHANGING SY-SUBRC.
  18.  
  19. *--[ Si estás leyendo esto es porque hay un BREAK-POINT configurado
  20. *--[ en la tabla Z_TB_BRK.
  21. *--[ En la variable SY-LISEL podrás ver el motivo
  22. *--[ Desactivalo si ya no lo necesitas
  23. case sy-subrc.
  24.    when 100. BREAK-POINT.
  25.    when 101.
  26.       do.
  27.          if sy-subrc eq 69.
  28.             exit.
  29.          endif.
  30.       enddo.
  31. endcase.
  32. *--[ IECI:FIN 20150428