*&---------------------------------------------------------------------*
*& Report ZNADAR_KKK
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT znadar_to_log.
CLASS z_to_log DEFINITION.
PUBLIC SECTION.
DATA: g_head TYPE bal_s_log,
g_pos TYPE bal_s_msg,
g_active TYPE xfeld.
METHODS:
constructor IMPORTING I_object TYPE balobj_d
i_subobject TYPE balsubobj OPTIONAL
i_break type aab_id_name OPTIONAL,
log_add IMPORTING is_msg TYPE bal_s_msg OPTIONAL
i_save TYPE xfeld OPTIONAL
is_text TYPE string OPTIONAL,
log_active_via_Saab IMPORTING i_break TYPE aab_id_name,
log_display,
log_save.
PRIVATE SECTION.
DATA: g_handle TYPE balloghndl,
g_count TYPE i.
METHODS:
LOG_Create.
ENDCLASS.
CLASS z_to_log IMPLEMENTATION.
METHOD log_active_via_Saab.
DATA: l_username TYPE aab_id_act-username,
l_aab_id_propt type aab_id_propt,
w_timestamp TYPE aab_id_act-act_tstamp,
t_z TYPE string,
l_tadir type tadir.
check g_active = abap_true.
SELECT SINGLE * FROM aab_id_prop INTO @DATA(l_aab_id_prop)
WHERE name = @i_break.
IF sy-subrc EQ 0.
* SELECT SINGLE * FROM aab_id_act INTO @DATA(l_aab_id_act)
* WHERE name = @i_break.
*
* IF sy-subrc NE 0.
* CLEAR g_active.
* ELSE.
*--[ Check for active SAAB ID
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 = @i_break AND
( username = @sy-uname OR
username = @l_username ) AND
act_tstamp <= @w_timestamp AND
exp_tstamp >= @w_timestamp.
IF sy-subrc NE 0. "<-- No está activo para este user o tiempo
CLEAR g_active.
ENDIF.
* ENDIF.
ELSE.
*--[ Don't look here... Get away!! Just Stuff :D :D
*--[ Metemos el nuevo break-proint
l_aab_id_propt-NAME = l_aab_id_prop-name = i_break.
l_aab_id_propt-LANGU = sy-langu.
l_aab_id_propt-DESCRIPT = i_break.
l_tadir-PGMID = 'R3TR'.
l_tadir-OBJECT = 'ACID'.
l_tadir-obj_name = i_break.
l_tadir-srcsystem = sy-sysid.
l_tadir-author = 'ZLOG'.
l_tadir-devclass = '$TMP'.
l_tadir-cproject = ' S'.
l_tadir-masterlang = sy-langu.
l_tadir-created_on = sy-datum.
check i_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.
ENDIF.
ENDMETHOD.
METHOD log_add.
TYPES: BEGIN OF ty_msg,
msgv1 TYPE bal_s_msg-msgv1,
msgv2 TYPE bal_s_msg-msgv1,
msgv3 TYPE bal_s_msg-msgv1,
msgv4 TYPE bal_s_msg-msgv1,
END OF ty_msg.
DATA: l_msg TYPE bal_s_msg,
ls_text TYPE ty_msg.
CHECK NOT g_handle IS INITIAL.
CHECK g_active = abap_true.
IF is_msg IS INITIAL AND
g_pos IS INITIAL AND
is_text IS INITIAL.
EXIT.
ENDIF.
IF is_msg IS INITIAL.
IF NOT g_pos IS INITIAL.
l_msg = g_pos.
ENDIF.
ELSE.
l_msg = is_msg.
ENDIF.
*--[ Por defecto
IF l_msg-probclass IS INITIAL. l_msg-probclass = '4'. ENDIF.
IF l_msg-detlevel IS INITIAL. l_msg-detlevel = 1. ENDIF.
IF l_msg-msgty IS INITIAL. l_msg-msgty = 'I'. ENDIF.
IF l_msg-msgid IS INITIAL.
l_msg-msgid = '000'.
l_msg-msgno = '398'.
ENDIF.
IF NOT is_text IS INITIAL.
ls_text = is_text.
MOVE-CORRESPONDING ls_text TO l_msg.
ENDIF.
CALL FUNCTION 'BAL_LOG_MSG_ADD'
EXPORTING
i_log_handle = g_handle
i_s_msg = l_msg
EXCEPTIONS
log_not_found = 0
OTHERS = 1.
ADD 1 TO g_count.
CLEAR g_pos.
CHECK NOT i_save IS INITIAL.
me->log_save( ).
ENDMETHOD.
METHOD log_save.
DATA: lt_loghandle TYPE bal_t_logh.
CHECK NOT g_handle IS INITIAL.
CHECK g_active = abap_true.
CHECK g_count NE 0.
APPEND g_handle TO lt_loghandle.
CALL FUNCTION 'BAL_DB_SAVE'
EXPORTING
i_t_log_handle = lt_loghandle
EXCEPTIONS
log_not_found = 1
save_not_allowed = 2
numbering_error = 3
error_message = 4
OTHERS = 5.
CLEAR g_count.
ENDMETHOD.
METHOD LOG_Create.
check g_active = abap_true.
CALL FUNCTION 'BAL_LOG_CREATE'
EXPORTING
i_s_log = g_head
IMPORTING
e_log_handle = g_handle
EXCEPTIONS
OTHERS = 1.
ENDMETHOD.
METHOD constructor.
CLEAR: g_head, g_handle.
g_head-object = I_object.
g_head-subobject = i_subobject.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Verificamos que existan los objetos
SELECT SINGLE * FROM balobj INTO @DATA(l_balobj)
WHERE object = @g_head-object.
IF sy-subrc NE 0.
l_balobj-object = I_object.
INSERT balobj FROM l_balobj.
ENDIF.
IF g_head-subobject IS INITIAL.
SELECT SINGLE * FROM balsub INTO @DATA(l_balsub)
WHERE object = @g_head-object.
IF sy-subrc EQ 0.
g_head-subobject = l_balsub-subobject.
ELSE.
g_head-subobject = g_head-object && '_1'.
sy-subrc = 4.
ENDIF.
ELSE.
SELECT SINGLE * FROM balsub INTO l_balsub
WHERE object = g_head-object
AND subobject = g_head-subobject.
ENDIF.
IF sy-subrc NE 0.
MOVE-CORRESPONDING g_head TO l_balsub.
INSERT balsub FROM l_balsub.
ENDIF.
*--[ Por defecto
g_head-aldate = sy-datum.
g_head-altime = sy-uzeit.
g_head-aluser = sy-uname.
g_head-alprog = sy-repid.
g_active = abap_true.
if not i_break is INITIAL.
me->log_active_via_Saab( EXPORTING i_break = i_break ).
endif.
me->LOG_Create( ).
ENDMETHOD.
METHOD log_display.
DATA: t_handle TYPE bal_t_logh.
CHECK g_active = abap_true.
check not g_handle is INITIAL.
APPEND g_handle TO t_handle.
CALL FUNCTION 'BAL_DSP_LOG_DISPLAY'
EXPORTING
* I_S_DISPLAY_PROFILE =
i_t_log_handle = t_handle
* I_T_MSG_HANDLE =
* I_S_LOG_FILTER =
* I_S_MSG_FILTER =
* I_T_LOG_CONTEXT_FILTER =
* I_T_MSG_CONTEXT_FILTER =
i_amodal = 'X'
* I_SRT_BY_TIMSTMP = ' '
* I_MSG_CONTEXT_FILTER_OPERATOR = 'A'
* IMPORTING
* E_S_EXIT_COMMAND =
EXCEPTIONS
profile_inconsistent = 1
internal_error = 2
no_data_available = 3
no_authority = 4
OTHERS = 5.
ENDMETHOD.
ENDCLASS.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Creación...
DATA: my_log TYPE REF TO z_to_log.
end-of-SELECTION.
BREAK-POINT.
CREATE OBJECT my_log
EXPORTING
I_object = 'ZQUEEN' "<--
* i_subobject = 'DETALLE_01'. "<-- Optional
i_break = 'Z_ZAPATO2'. "<-- Optional for SAAB ID activation
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Manual Check if SAAB is active (Optional)
*my_log->log_active_via_Saab( EXPORTING i_break = 'Z_ZAPATO2' ).
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ In the same HANDLE
my_log->log_add( EXPORTING is_text = 'Hola mundo cruel' ).
*--[ Ejemplo con estructura
my_log->g_pos-msgid = '00'.
my_log->g_pos-MSgTY = 'E'.
my_log->g_pos-Msgno = '006'.
my_log->g_pos-Msgv1 = 'No he'.
my_log->g_pos-Msgv2 = '0'.
my_log->log_add( ).
my_log->log_add( EXPORTING is_text = 'Adios mundo!'
i_SAVE = 'X' "<-- Automatic SAVE
).
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Display all messages
my_log->log_display( ).
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Save LOG
* My_log->log_save( ). "<--- Not need if I_SAVE at LOG_ADD