REPORT zini_001.
CLASS ZINI_Cl_BREAKME DEFINITION.
PUBLIC SECTION.
METHODS: constructor IMPORTING i_break TYPE any OPTIONAL.
PRIVATE SECTION.
DATA: l_hay_bucle TYPE xfeld,
l_hay_break TYPE xfeld.
METHODS: saab_add IMPORTING p_break TYPE any,
saab_check IMPORTING p_break TYPE any
CHANGING p_hay_break TYPE xfeld
p_hay_bucle TYPE xfeld.
ENDCLASS.
CLASS zini_cl_breakme IMPLEMENTATION.
METHOD constructor.
CHECK NOT i_break IS INITIAL.
saab_add( i_break ).
saab_check( EXPORTING p_break = i_break
CHANGING p_hay_break = l_hay_break
p_hay_bucle = l_hay_bucle ).
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Si estas leyendo esto, es que alguien ha activado los breaks
*--[ En la transaccion SAAB para el ID = i_BREAK
IF l_hay_break = abap_true.
BREAK-POINT.
ENDIF.
IF l_hay_bucle = abap_true.
DO.
*--[ El bucle esta activo porque en la SAAB, esta activo los
*--[ Puntos de LOG
*--[ Para salir del bucle, cambia el valor del sy-subrc o pon la
*--[ siguiente linea de ejecucion en el endform.
IF sy-subrc EQ 69.
EXIT.
ENDIF.
ENDDO.
ENDIF.
ENDMETHOD.
METHOD saab_check.
DATA: l_username TYPE aab_id_act-username,
w_timestamp TYPE aab_id_act-act_tstamp,
t_z TYPE string.
CLEAR: p_hay_bucle, p_hay_break.
CHECK NOT p_break IS INITIAL.
CONVERT DATE sy-datum TIME sy-uzeit
INTO TIME STAMP w_timestamp TIME ZONE t_Z.
SELECT SINGLE * FROM aab_id_act INTO @DATA(l_aab_id_act)
WHERE name = @p_break AND
( username = @sy-uname OR
username = @l_username ) AND
act_tstamp <= @w_timestamp AND
exp_tstamp >= @w_timestamp.
CHECK sy-subrc EQ 0.
DATA(my_obj) = NEW cL_AAB_TOOL( ).
My_OBJ->my_id_name = p_break.
CALL METHOD cl_aab_tool=>convert_mode_to_output
EXPORTING
mode = l_aab_id_act-actmode
IMPORTING
* bp_inactive =
bp_stop = DATA(l_000)
* as_fg_inactive =
as_fg_stop_bg_protocol = DATA(l_001)
as_fg_stop_bg_rabax = DATA(l_002)
as_fg_protocol = DATA(l_005)
as_fg_rabax = DATA(l_003)
* as_bg_text =
* lp_inactive =
lp_log = DATA(l_004)
EXCEPTIONS
mode_not_valid = 1
OTHERS = 2.
CHECK sy-subrc EQ 0.
p_hay_bucle = COND #( WHEN l_004 IS NOT INITIAL THEN abap_true ELSE abap_false ).
p_hay_break = COND #( WHEN l_000 IS NOT INITIAL THEN abap_true ELSE abap_false ).
ENDMETHOD.
METHOD saab_add.
CHECK NOT p_break IS INITIAL.
SELECT SINGLE * FROM aab_id_prop INTO @DATA(l_aab_id_prop)
WHERE name = @p_break.
CHECK sy-subrc NE 0.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Creamos un ID SAAB si no existe
l_aab_id_prop-name = p_break.
data(l_aab_id_propt) = VALUE aab_id_propt( name = p_break langu = sy-langu descript = p_break ).
DATA(l_tadir) = VALUE tadir( pgmid = 'R3TR'
object = 'ACID'
obj_name = p_break
srcsystem = sy-sysid
author = sy-uname
devclass = '$TMP'
cproject = ' S'
masterlang = sy-langu
created_on = sy-datum
).
CHECK p_break CP 'Z*'.
MODIFY aab_id_prop FROM l_aab_id_prop.
MODIFY aab_id_propt FROM l_aab_id_propt.
INSERT tadir FROM l_tadir.
ENDMETHOD.
ENDCLASS.
END-OF-SELECTION.
DATA(l_break) = NEW ZINI_Cl_BREAKME( 'ZROMEO' ). " Dale un nombre a tu break-point