Generate the LOG:
 DATA: L_VAR_LOGHNDL TYPE BALLOGHNDL,
          L_VAR_MESSAGE_DUMMY TYPE CHAR255,
          L_WA_MSG            TYPE BAL_S_MSG.
    "Generate the log
    DATA: L_WA_LOG          TYPE BAL_S_LOG.
    "Basisdaten
    L_WA_LOG-EXTNUMBER  = SY-CPROG.
    L_WA_LOG-ALUSER     = SY-UNAME.
    L_WA_LOG-ALPROG     = SY-REPID.
    L_WA_LOG-ALDATE     = SY-DATUM.
    L_WA_LOG-ALTIME     = SY-UZEIT.
    L_WA_LOG-ALTCODE    = SY-TCODE.
    L_WA_LOG-OBJECT     = 'YARTSTAMM'.
    L_WA_LOG-SUBOBJECT  = 'STMMDWL'.
    "Modus setzen
    IF SY-BATCH EQ 'X'.
      L_WA_LOG-ALMODE = 'B'.
    ELSEIF SY-BINPT EQ 'X'.
      L_WA_LOG-ALMODE = 'I'.
    ELSE.
      L_WA_LOG-ALMODE = 'D'.
    ENDIF.
    "Create
    CALL FUNCTION 'BAL_LOG_CREATE'
      EXPORTING
        I_S_LOG      = L_WA_LOG
      IMPORTING
        E_LOG_HANDLE = L_VAR_LOGHNDL
      EXCEPTIONS
        OTHERS       = 1.
    IF SY-SUBRC <> 0.
      " Ignore Error
    ENDIF.
Add Messages like this:
 "Insert Message
    MESSAGE E180(YI) WITH I_VAR_MATNR I_VAR_MATKL
                        INTO L_VAR_MESSAGE_DUMMY.
    CLEAR L_WA_MSG.
    L_WA_MSG-MSGTY = 'E'.
    L_WA_MSG-MSGID = SY-MSGID.
    L_WA_MSG-MSGNO = SY-MSGNO.
    L_WA_MSG-MSGV1 = SY-MSGV1.
    L_WA_MSG-MSGV2 = SY-MSGV2.
    L_WA_MSG-MSGV3 = SY-MSGV3.
    L_WA_MSG-PROBCLASS = '1'.
    CALL FUNCTION 'BAL_LOG_MSG_ADD'
      EXPORTING
        I_S_MSG          = L_WA_MSG
      EXCEPTIONS
        LOG_NOT_FOUND    = 1
        MSG_INCONSISTENT = 2
        LOG_IS_FULL      = 3
        OTHERS           = 4.
    IF SY-SUBRC <> 0.
      "Ignore Errors
    ENDIF.
Don't forget to save the Log in the End:
*   SAVE LOG
    DATA L_IT_LOG_HANDEL TYPE BAL_T_LOGH.
    APPEND L_VAR_LOGHNDL TO L_IT_LOG_HANDEL.
    CALL FUNCTION 'BAL_DB_SAVE'
      EXPORTING
        I_T_LOG_HANDLE = L_IT_LOG_HANDEL
      EXCEPTIONS
        OTHERS         = 1.
    IF SY-SUBRC <> 0.
      "Ignore Errors
    ENDIF.
In Programms you can 
easily encapsulate everything inside Forms. Inside functions i would 
recommend creating a helper class and instanciate it.
We also are using 
function pools as Log Helper. The problem with them might be, that only 
instance exists. So if you use any kind of reset method and keep a 
handle inside the pool it might get reset by nested calls inside 
different functions.
Serkan AKKAVAK
Computer Engineer
ABAP Developer & SAP S/4 HANA Logistics Team Lead
Contact : serkurumsal@yandex.com
 
 
 
Social Plugin