ABAPBREAKSAAB Bucle

  1. REPORT zini_001.
  2.  
  3. CLASS ZINI_Cl_BREAKME DEFINITION.
  4.  
  5.   PUBLIC SECTION.
  6.  
  7.     METHODS: constructor IMPORTING i_break TYPE any OPTIONAL.
  8.  
  9.   PRIVATE SECTION.
  10.  
  11.     DATA: l_hay_bucle TYPE xfeld,
  12.           l_hay_break TYPE xfeld.
  13.  
  14.     METHODS: saab_add IMPORTING p_break TYPE any,
  15.       saab_check IMPORTING p_break     TYPE any
  16.                  CHANGING  p_hay_break TYPE xfeld
  17.                            p_hay_bucle TYPE xfeld.
  18.  
  19. ENDCLASS.
  20.  
  21. CLASS zini_cl_breakme IMPLEMENTATION.
  22.  
  23.   METHOD constructor.
  24.     CHECK NOT i_break IS INITIAL.
  25.     saab_add( i_break ).
  26.     saab_check( EXPORTING p_break = i_break
  27.                        CHANGING p_hay_break = l_hay_break
  28.                                 p_hay_bucle = l_hay_bucle ).
  29.  
  30. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  31. *--[ Si estas leyendo esto, es que alguien ha activado los breaks
  32. *--[ En la transaccion SAAB para el ID = i_BREAK
  33.     IF l_hay_break = abap_true.
  34.       BREAK-POINT.
  35.     ENDIF.
  36.  
  37.     IF l_hay_bucle = abap_true.
  38.       DO.
  39. *--[ El bucle esta activo porque en la SAAB, esta activo los
  40. *--[ Puntos de LOG
  41. *--[ Para salir del bucle, cambia el valor del sy-subrc o pon la
  42. *--[ siguiente linea de ejecucion en el endform.
  43.         IF sy-subrc EQ 69.
  44.           EXIT.
  45.         ENDIF.
  46.       ENDDO.
  47.     ENDIF.
  48.  
  49.   ENDMETHOD.
  50.  
  51.  
  52.   METHOD saab_check.
  53.  
  54.     DATA: l_username  TYPE aab_id_act-username,
  55.           w_timestamp TYPE aab_id_act-act_tstamp,
  56.           t_z         TYPE string.
  57.  
  58.     CLEAR: p_hay_bucle, p_hay_break.
  59.     CHECK NOT p_break IS INITIAL.
  60.     CONVERT DATE sy-datum TIME sy-uzeit
  61.     INTO TIME STAMP w_timestamp TIME ZONE t_Z.
  62.  
  63.     SELECT SINGLE * FROM aab_id_act INTO @DATA(l_aab_id_act)
  64.           WHERE   name = @p_break AND
  65.                 ( username = @sy-uname OR
  66.                   username = @l_username ) AND
  67.                 act_tstamp <= @w_timestamp AND
  68.                 exp_tstamp >= @w_timestamp.
  69.  
  70.     CHECK sy-subrc EQ 0.
  71.     DATA(my_obj) = NEW cL_AAB_TOOL( ).
  72.  
  73.     My_OBJ->my_id_name  = p_break.
  74.     CALL METHOD cl_aab_tool=>convert_mode_to_output
  75.       EXPORTING
  76.         mode                   = l_aab_id_act-actmode
  77.       IMPORTING
  78. *       bp_inactive            =
  79.         bp_stop                = DATA(l_000)
  80. *       as_fg_inactive         =
  81.         as_fg_stop_bg_protocol = DATA(l_001)
  82.         as_fg_stop_bg_rabax    = DATA(l_002)
  83.         as_fg_protocol         = DATA(l_005)
  84.         as_fg_rabax            = DATA(l_003)
  85. *       as_bg_text             =
  86. *       lp_inactive            =
  87.         lp_log                 = DATA(l_004)
  88.       EXCEPTIONS
  89.         mode_not_valid         = 1
  90.         OTHERS                 = 2.
  91.  
  92.     CHECK sy-subrc EQ 0.
  93.     p_hay_bucle = COND #( WHEN l_004 IS NOT INITIAL THEN abap_true ELSE abap_false ).
  94.     p_hay_break = COND #( WHEN l_000 IS NOT INITIAL THEN abap_true ELSE abap_false ).
  95.  
  96.   ENDMETHOD.
  97.  
  98.   METHOD saab_add.
  99.  
  100.     CHECK NOT p_break IS INITIAL.
  101.     SELECT SINGLE * FROM aab_id_prop INTO @DATA(l_aab_id_prop)
  102.       WHERE name = @p_break.
  103.  
  104.     CHECK sy-subrc NE 0.
  105. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  106. *--[ Creamos un ID SAAB si no existe
  107.     l_aab_id_prop-name = p_break.
  108.  
  109.     data(l_aab_id_propt) = VALUE aab_id_propt( name = p_break  langu = sy-langu descript = p_break ).
  110.     DATA(l_tadir) = VALUE tadir( pgmid = 'R3TR'
  111.                                  object = 'ACID'
  112.                                  obj_name = p_break
  113.                                  srcsystem = sy-sysid
  114.                                  author    =  sy-uname
  115.                                  devclass = '$TMP'
  116.                                  cproject = ' S'
  117.                                  masterlang = sy-langu
  118.                                  created_on = sy-datum
  119.                                ).
  120.  
  121.     CHECK p_break CP 'Z*'.
  122.     MODIFY aab_id_prop FROM l_aab_id_prop.
  123.     MODIFY aab_id_propt FROM l_aab_id_propt.
  124.     INSERT tadir FROM l_tadir.
  125.   ENDMETHOD.
  126.  
  127. ENDCLASS.
  128.  
  129. END-OF-SELECTION.
  130.  
  131.   DATA(l_break) = NEW ZINI_Cl_BREAKME( 'ZROMEO' ). " Dale un nombre a tu break-point
  132.