Je vous conseille d’aller lire cet article à sa nouvelle adresse : Journal d’application

Lorsque l’on développe un programme spécifique et plus particulièrement une interface, intervient le besoin de gérer des messages d’erreur / alerte / succès et surtout de les sauvegarder pour les restituer ultérieurement.
SAP dispose d’un moyen standard pour gérer les logs applicatifs, y compris pour les programmes spécifiques. Composé d’un ensemble de transactions, programmes, fonctions et tables, cette approche permet d’économiser en coût de développement et de se rattacher à une architecture SAP standard, robuste et complète.

La transaction SLG1 (ou directement le programme SBAL_DISPLAY) permet d’afficher le journal d’application. Via des variantes de sélection, le journal pourra être filtré à convenance, répondant ainsi au besoin de reporting usuel de suivi d’interfaces. Le module fonction BAL_DSP_LOG_DISPLAY permet également d’afficher un log, évitant ainsi d’avoir à gérer un rapport d’exécution d’interface.

SLG1 - Affichage du journal d'application

SLG1 - Affichage du journal d'application

La transaction SLG0 permet de définir ses propres objets / sous-objets.

Pour créer un log dans un programme spécifique, l’usage classique utilise 3 fonctions :

  • BAL_LOG_CREATE qui permet d’initialiser le nouveau log.
  • BAL_LOG_MSG_ADD qui permet d’insérer les messages, 1 par 1
  • BAL_DB_SAVE qui permet de sauvegarder le log en base de données

Les données sont sauvegardées dans les tables BALHDR et BALM
Il est possible d’associer des objets métiers pour chaque message, afin de contextualiser l’erreur.

La fonction APPL_LOG_DB permet d’extraire l’ensemble des données d’un log (pour export vers un autre système ou reporting avancé par exemple).

Enfin la transaction SLG2 (ou directement le programme SBAL_DELETE) permet de supprimer les logs expirés.

SAP fournit une multitude de modules fonctions pour exploiter le journal d’application. Ces fonctions sont toutes préfixée par BAL_*. Afin de faciliter leur utilisation, plusieurs programmes démo sont également livrés par SAP. Ces programmes sont préfixés par SBAL_DEMO_*

Pour plus d’information sur l’utilisation du journal d’application, la documentation est disponible en exécutant le programme SBAL_DOCUMENTATION

Pour exemple, un petit programme qui permet de sauvegarder une entrée dans le journal d’application puis de l’afficher.

* Data pour le log
DATA : s_log_hdr TYPE bal_s_log,
       w_log_hnd TYPE balloghndl,
       t_log_hnd TYPE bal_t_logh,
       s_log_msg TYPE bal_s_msg.

* Ecriture En-tete du log
CLEAR s_log_hdr.
s_log_hdr-object        = 'ZINTERFACE'.
s_log_hdr-subobject     = 'COMMANDES'.
s_log_hdr-extnumber     = 'INT CMD RETOUR PIECE'.
s_log_hdr-aldate_del    = sy-datum + 30. "effacement apres 30j
s_log_hdr-aluser        = sy-uname.
s_log_hdr-alprog        = sy-repid.
s_log_hdr-altcode       = sy-tcode.
s_log_hdr-del_before    = 'X'.

CALL FUNCTION 'BAL_LOG_CREATE'
  EXPORTING
    i_s_log                 = s_log_hdr
  IMPORTING
    e_log_handle            = w_log_hnd
  EXCEPTIONS
    log_header_inconsistent = 1
    OTHERS                  = 2.
IF sy-subrc <> 0.
* error
ENDIF.

* Ecriture d'un message d'erreur
CLEAR s_log_msg.
s_log_msg-msgty = 'E'.
s_log_msg-msgid = 'V1'.
s_log_msg-msgno = '302'.
s_log_msg-msgv1 = '1000125423'. "param : doc number

CALL FUNCTION 'BAL_LOG_MSG_ADD'
  EXPORTING
    i_log_handle     = w_log_hnd
    i_s_msg          = s_log_msg
  EXCEPTIONS
    log_not_found    = 1
    msg_inconsistent = 2
    log_is_full      = 3
    OTHERS           = 4.
IF sy-subrc <> 0.
* error
ENDIF.

* Sauvegarde du log
APPEND w_log_hnd TO t_log_hnd.
CALL FUNCTION 'BAL_DB_SAVE'
  EXPORTING
    i_client         = sy-mandt
    i_t_log_handle   = t_log_hnd
  EXCEPTIONS
    log_not_found    = 1
    save_not_allowed = 2
    numbering_error  = 3
    OTHERS           = 4.
IF sy-subrc <> 0.
* error
ENDIF.

* Affichage du log
CALL FUNCTION 'BAL_DSP_LOG_DISPLAY'
  EXPORTING
    i_t_log_handle       = t_log_hnd
  EXCEPTIONS
    profile_inconsistent = 1
    internal_error       = 2
    no_data_available    = 3
    no_authority         = 4
    OTHERS               = 5.
IF sy-subrc <> 0.
* error
ENDIF.

Tags: , , , ,