method CLASS_CONSTRUCTOR . * perform log_new. data: L_BALOBJ type BALOBJ. data: L_BALSUB type BALSUB. data: L_BALOBJTX type BALOBJT. data: L_BALSUBTX type BALSUBT. * select count( * ) from BALOBJ where OBJECT eq C_DEFAULT_OBJECT. if SY-DBCNT eq 0. L_BALOBJ-OBJECT = C_DEFAULT_OBJECT. insert into BALOBJ values L_BALOBJ. L_BALOBJTX-OBJECT = L_BALOBJ-OBJECT. L_BALOBJTX-SPRAS = SY-LANGU. modify BALOBJT from L_BALOBJTX. endif. * select count( * ) from BALSUB where OBJECT eq C_DEFAULT_OBJECT and SUBOBJECT eq C_DEFAULT_SUBOBJECT. if SY-DBCNT eq 0. L_BALSUB-OBJECT = L_BALOBJ-OBJECT. L_BALSUB-SUBOBJECT = C_DEFAULT_SUBOBJECT. insert into BALSUB values L_BALSUB. L_BALSUBTX-OBJECT = L_BALSUB-OBJECT. L_BALSUBTX-SUBOBJECT = L_BALSUB-SUBOBJECT. L_BALSUBTX-SPRAS = SY-LANGU. modify BALSUBT from L_BALSUBTX. endif. * endmethod. method CONSTRUCTOR . OBJECT Type BALOBJ_D C_DEFAULT_OBJECT SUBOBJECT Type BALSUBOBJ C_DEFAULT_SUBOBJECT EXTID Type C data: T_LOG_HANDLE type BAL_T_LOGH. SUPER->CONSTRUCTOR( ). clear HEADER. HEADER-OBJECT = OBJECT. HEADER-SUBOBJECT = SUBOBJECT. HEADER-EXTNUMBER = EXTID. call function 'BAL_LOG_CREATE' exporting I_S_LOG = HEADER importing E_LOG_HANDLE = HANDLE exceptions LOG_HEADER_INCONSISTENT = 1 others = 2. if SY-SUBRC <> 0. message id SY-MSGID type 'I' number SY-MSGNO with SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. endif. * MESSAGE = 'INT: Constructing Application Log Instance (&1/&2)'. replace '&1' with OBJECT into MESSAGE. replace '&2' with SUBOBJECT into MESSAGE. condense message. * call method FREETEXT exporting TXT = MESSAGE MSGTY = ' '. * message s001 with object subobject into message. CALL METHOD LOG_MESSAGE_API( ). * endmethod. METHOD LOG_MESSAGE_API . MSGTY Importing Type SY-MSGTY 'S' MSGID Importing Type SY-MSGID '38' MSGNO Importing Type SY-MSGNO '000' MSGV1 Importing Type SY-MSGV1 SPACE MSGV2 Importing Type SY-MSGV2 SPACE MSGV3 Importing Type SY-MSGV3 SPACE MSGV4 Importing Type SY-MSGV4 SPACE APPLOG_ONLY Importing Type BOOLEAN ABAP_FALSE DETLEVEL Importing Type BALLEVEL '4' PROBCLASS Importing Type BALPROBCL ' ' * data: LAST_BAL_MESSAGE type BAL_S_MSG. IF msgv1 IS SUPPLIED. syst-msgv1 = msgv1. ENDIF. IF msgv2 IS SUPPLIED. syst-msgv2 = msgv2. ENDIF. IF msgv3 IS SUPPLIED. syst-msgv3 = msgv3. ENDIF. IF msgv4 IS SUPPLIED. syst-msgv4 = msgv4. ENDIF. IF msgno IS SUPPLIED. syst-msgno = msgno. ENDIF. IF msgid IS SUPPLIED. syst-msgid = msgid. ENDIF. IF msgty IS SUPPLIED. syst-msgty = msgty. ENDIF. IF msgv1 IS SUPPLIED OR msgv2 IS SUPPLIED OR msgv3 IS SUPPLIED OR msgv4 IS SUPPLIED OR msgno IS SUPPLIED OR msgid IS SUPPLIED OR msgty IS SUPPLIED. TRY. MESSAGE ID syst-msgid TYPE syst-msgty NUMBER syst-msgno WITH syst-msgv1 syst-msgv2 syst-msgv3 syst-msgv4 INTO me->message. CLEANUP. MESSAGE i000(38) WITH 'Could not log message' syst-msgty syst-msgid syst-msgno INTO me->message. ENDTRY. ENDIF. * MOVE-CORRESPONDING syst TO last_bal_message. * LAST_BAL_MESSAGE-MSGTY = 'I'. * LAST_BAL_MESSAGE-MSGID = '38'. * LAST_BAL_MESSAGE-MSGNO = '000'. * MOVE-CORRESPONDING i_context TO last_bal_message-context. * GET TIME. GET TIME STAMP FIELD last_bal_message-time_stmp. * IF applog_only EQ abap_true. last_bal_message-detlevel = '9'. last_bal_message-probclass = '4'. ENDIF. * IF detlevel IS SUPPLIED. last_bal_message-detlevel = detlevel. ENDIF. * IF probclass IS SUPPLIED. last_bal_message-detlevel = probclass. ENDIF. * CALL FUNCTION 'BAL_LOG_MSG_ADD' EXPORTING i_log_handle = handle i_s_msg = last_bal_message * IMPORTING * E_S_MSG_HANDLE = * E_MSG_WAS_LOGGED = * E_MSG_WAS_DISPLAYED = EXCEPTIONS * LOG_NOT_FOUND = 1 * MSG_INCONSISTENT = 2 * LOG_IS_FULL = 3 OTHERS = 0. * CALL FUNCTION 'BALW_BAPIRETURN_GET2' EXPORTING type = last_bal_message-msgty cl = last_bal_message-msgid number = last_bal_message-msgno par1 = last_bal_message-msgv1 par2 = last_bal_message-msgv2 par3 = last_bal_message-msgv3 par4 = last_bal_message-msgv4 * LOG_NO = ' ' * LOG_MSG_NO = ' ' IMPORTING return = last_message. * * move-corresponding LAST_BAL_MESSAGE to LAST_MESSAGE. INSERT last_message INTO messages INDEX 1. * IF detlevel GT '8' OR probclass GE '4'. CLEAR last_message. ENDIF. * * if suppress_display eq abap_false and dialog_mode eq abap_true. * LAST_MESSAGE_SHOW( ). * endif. * ENDMETHOD. method LOAD . *LOGNUMBER Importing Type BALOGNR data: T_LOG_LOGNUMBER type BAL_T_LOGN. data: T_LOG_HANDLE type BAL_T_LOGH. data: T_MSG_HANDLE type BAL_T_MSGH. * refresh T_LOG_LOGNUMBER. refresh T_LOG_HANDLE. refresh T_MSG_HANDLE. * append LOGNUMBER to T_LOG_LOGNUMBER. * call function 'BAL_DB_LOAD' exporting * I_T_LOG_HANDLE = T_LOG_HANDLE I_T_LOGNUMBER = T_LOG_LOGNUMBER * I_CLIENT = SY-MANDT * I_DO_NOT_LOAD_MESSAGES = ' ' * I_EXCEPTION_IF_ALREADY_LOADED = importing E_T_LOG_HANDLE = T_LOG_HANDLE E_T_MSG_HANDLE = T_MSG_HANDLE exceptions NO_LOGS_SPECIFIED = 1 LOG_NOT_FOUND = 2 LOG_ALREADY_LOADED = 3 others = 4 . if SY-SUBRC <> 0. message id SY-MSGID type 'I' number SY-MSGNO with SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. else. loop at T_LOG_HANDLE into HANDLE. endloop. * MSGHANDLES[] = T_MSG_HANDLE. * endif. endmethod. method SAVE . data: T_LOG_HANDLE type BAL_T_LOGH. data: E_NEW_LOGNUMBERS type BAL_T_LGNM. field-symbols: like line of E_NEW_LOGNUMBERS. * refresh T_LOG_HANDLE. append HANDLE to T_LOG_HANDLE. call function 'BAL_DB_SAVE' exporting * I_CLIENT = SY-MANDT I_IN_UPDATE_TASK = ' ' * I_SAVE_ALL = ' ' I_T_LOG_HANDLE = T_LOG_HANDLE importing E_NEW_LOGNUMBERS = E_NEW_LOGNUMBERS exceptions LOG_NOT_FOUND = 1 SAVE_NOT_ALLOWED = 2 NUMBERING_ERROR = 3 others = 4. if SY-SUBRC <> 0. message id SY-MSGID type 'I' number SY-MSGNO with SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. else. if lognumber is initial. loop at E_NEW_LOGNUMBERS to 1 assigning . move -LOGNUMBER to LOGNUMBER. endloop. endif. ret = lognumber. endif. endmethod. method MESSAGE_PREPARE . BAL_MSG Importing Type BAL_S_MSG E_MSG Exporting Type BMMSG data: X100 type T100. X100-ARBGB = BAL_MSG-MSGID. X100-MSGNR = BAL_MSG-MSGNO. call function 'MESSAGE_PREPARE' exporting * LANGUAGE = ' ' MSG_ID = X100-ARBGB MSG_NO = X100-MSGNR MSG_VAR1 = BAL_MSG-MSGV1 MSG_VAR2 = BAL_MSG-MSGV2 MSG_VAR3 = BAL_MSG-MSGV3 MSG_VAR4 = BAL_MSG-MSGV4 importing MSG_TEXT = E_MSG-MSGTXT exceptions MESSAGE_NOT_FOUND = 1. if SY-SUBRC eq 0. move-corresponding BAL_MSG to E_MSG. else. raise MESSAGE_NOT_FOUND. endif. endmethod. method CONTAINER_PREPARE_FOR_DISPLAY . data: T_LOG_HANDLE type BAL_T_LOGH. * set data to be displayed * (this can be called multiple times, see PAI) refresh T_LOG_HANDLE. append HANDLE to T_LOG_HANDLE. call function 'BAL_DSP_OUTPUT_SET_DATA' exporting i_t_log_handle = t_log_handle exceptions others = 1. if sy-subrc <> 0. message id sy-msgid type sy-msgty number sy-msgno with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. endif. endmethod. HEADER Instance Attribute Public Type BAL_S_LOG HANDLE Instance Attribute Public Type BALLOGHNDL LOGNUMBER Instance Attribute Public Type BALOGNR MSGHANDLES Instance Attribute Public Type BAL_T_MSGH APPLOGCONTAINER Instance Attribute Public Type Ref To CL_GUI_DIALOGBOX_CONTAINER MESSAGE Instance Attribute Public Type BALTMSG LAST_MESSAGE Instance Attribute Public Type BAPIRET2 MESSAGES Instance Attribute Public Type BAPIRET2_T C_DEFAULT_OBJECT Constant Public Type BALOBJ_D C_DEFAULT_SUBOBJECT Constant Public Type BALSUBOBJ LAST_BAL_MESSAGE Instance Attribute Private Type BAL_S_MSG