Application Log von mehreren Reports zusammenfassen

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Getting started ... Alles für einen gelungenen Start.
16 Beiträge • Seite 1 von 2 (current) Nächste
16 Beiträge Seite 1 von 2 (current) Nächste

Application Log von mehreren Reports zusammenfassen

Beitrag von geo2k (ForumUser / 6 / 2 / 0 ) »
Hallo zusammen,
ich mache derzeit ein Praktikum als Programmierer und habe die Aufgabe bekommen, ein Application Log von einem selbstgeschriebenen Report zu erstellen.
Mit den FuBa BAL_LOG_CREATE, BAL_LOG_MSG_ADD und BAL_DB_SAVE funktioniert soweit alles ganz gut und das Log wird gespeichert. (Objekte/Subobjekte sind bereits angelegt)

Das Problem ist nun, dass ich in diesem Report einen anderen Report per „SUBMIT WITH SELECTION TABLE AND RETURN“ ausführe. In der mitgegebenen Tabelle gebe ich den Handler von BAL_LOG_CREATE per Parameter mit.
Sobald ich aber mit diesem Handler im aufgerufenen Report arbeiten möchte (FuBa BAL_LOG_MSG_ADD), bekomme ich folgende Fehlermeldung „Protokoll nicht gefunden (im Hauptspeicher)“.

Ich bekomme also nur die Nachrichten vom ersten Report gespeichert, alles was im aufgerufenen Report passiert, geht verloren wegen o.g. FM.

Ich möchte alle Meldungen von beiden Reports in einem Application Log zusammengefasst haben.
Welche Möglichkeiten gibt es?

Vielen Dank im Voraus

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Application Log von mehreren Reports zusammenfassen

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Im aufgerufenen Report brauchst du BAL_LOG_LOAD (oder so ähnlich)
Bei SUBMIT wird ein komplett neues Programm gestartet und somit existiert das zuvor angelegt Log (noch) nicht im Speicher.
Vor dem SUBMIT musst du wahrscheinlich auch noch BAL_LOG_SAVE und COMMIT WORK ausführen, damit die Daten für das zweite Programm auf der Datenbank auch zur Verfügugn stehen.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Application Log von mehreren Reports zusammenfassen

Beitrag von geo2k (ForumUser / 6 / 2 / 0 ) »
Danke für den Tipp

Habe mir die Funktionsbausteine BAL_DB_SEARCH und BAL_DB_LOAD angeschaut aber verstehe nicht so ganz, wie ich damit den bereits erstellten Log von der DB laden kann.
Ich werde aus der Doku nicht so ganz schlau, was ich übergeben muss, damit ich den richtigen Log bekomme.

Kann hier jmd. mir helfend ans Bein treten? ^^
Evtl. auch mit kurzem Codebeispiel?

Re: Application Log von mehreren Reports zusammenfassen

Beitrag von deejey (Specialist / 418 / 128 / 45 ) »
Der BAL_LOG_CREATE liefert doch ein handle zurück, gib ihn dem aufgerufenen Report mit.

Re: Application Log von mehreren Reports zusammenfassen

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
deejey hat geschrieben:Der BAL_LOG_CREATE liefert doch ein handle zurück, gib ihn dem aufgerufenen Report mit.
Ergänzung:
Damit füttert man den Baustein BAL_DB_LOAD (Parameter I_T_LOG_HANDLE; Achtung ist eine Tabelle!)
Im Anschluss sollte der BAL_LOG_MSG_ADD wie gewohnt funktionieren.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Application Log von mehreren Reports zusammenfassen

Beitrag von geo2k (ForumUser / 6 / 2 / 0 ) »
deejey hat geschrieben:Der BAL_LOG_CREATE liefert doch ein handle zurück, gib ihn dem aufgerufenen Report mit.
Das habe ich zuerst probiert, wie auch im Anfangspost geschrieben. Das Protokoll findet er aber nicht im aufgerufenen Programm.

Habe nun versucht, mit BAL_DB_SAVE und BAL_DB_LOAD zu arbeiten. Ich bekomme jetzt zwar keine FM mehr zurück und er lädt auch über BAL_DB_LOAD das Protokoll-Handle aber wenn ich nun im Unterprogramm BAL_DB_SAVE ausführe, passiert nichts. Alle im Unterprogramm erzeugten Messages werden nicht gespeichert.
Das Handle stimmt exakt mit dem im Hauptprogramm überein, trotzdem hat o.g. Methode zu dem Fehler geführt, dass er es im Hauptspeicher nicht finden kann.
Nachdem ich nun mit DB_LOAD und anschließend ADD + SAVE versucht habe, Nachrichten hinzuzufügen, ändert sich am Application Protokoll aber leider immer noch nichts.

Hat jmd. Ideen?

Hier der Code

Code: Alles auswählen.

 FORM APPLOG_SAVE CHANGING LOGNR TYPE BALOGNR.

    DATA: LT_LOGNR TYPE BAL_T_LGNM,
          WA_LOGNR TYPE BAL_S_LGNM.

    WA_LOGNR-LOGNUMBER = LOGNR.
    APPEND WA_LOGNR TO LT_LOGNR.

    CALL FUNCTION 'BAL_DB_SAVE'
      EXPORTING
*       I_CLIENT         = SY-MANDT
*       I_IN_UPDATE_TASK = ' '
        I_SAVE_ALL       = 'X'
*       I_T_LOG_HANDLE   =
*       I_2TH_CONNECTION = ' '
*       I_2TH_CONNECT_COMMIT       = ' '
*       I_LINK2JOB       = 'X'
      IMPORTING
        E_NEW_LOGNUMBERS = LT_LOGNR
*       E_SECOND_CONNECTION        =
      EXCEPTIONS
        LOG_NOT_FOUND    = 1
        SAVE_NOT_ALLOWED = 2
        NUMBERING_ERROR  = 3
        OTHERS           = 4.

    IF SY-SUBRC <> 0.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                 WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4 INTO LV_STR_MSG.
      WRITE: 'TYPE',SY-MSGTY, 'MESSAGE',LV_STR_MSG.
    ENDIF.

    READ TABLE LT_LOGNR INDEX 1 INTO WA_LOGNR.
    LOGNR = WA_LOGNR-LOGNUMBER.

  ENDFORM.

  FORM APPLOG_LOAD USING LOGNR TYPE BALOGNR
                   CHANGING HANDLE TYPE BALLOGHNDL.

    DATA: LT_LOGNR  TYPE BAL_T_LOGN,
          LT_HANDLE TYPE BAL_T_LOGH.

    APPEND LOGNR TO LT_LOGNR.

    CALL FUNCTION 'BAL_DB_LOAD'
      EXPORTING
*       I_T_LOG_HEADER     =
*       I_T_LOG_HANDLE     =
        I_T_LOGNUMBER      = LT_LOGNR
*       I_CLIENT           = SY-MANDT
*       I_DO_NOT_LOAD_MESSAGES              = ' '
*       I_EXCEPTION_IF_ALREADY_LOADED       =
*       I_LOCK_HANDLING    = 2
      IMPORTING
        E_T_LOG_HANDLE     = LT_HANDLE
*       E_T_MSG_HANDLE     =
*       E_T_LOCKED         =
      EXCEPTIONS
        NO_LOGS_SPECIFIED  = 1
        LOG_NOT_FOUND      = 2
        LOG_ALREADY_LOADED = 3
        OTHERS             = 4.

    IF SY-SUBRC <> 0.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4 INTO LV_STR_MSG.
      WRITE: 'TYPE',SY-MSGTY, 'MESSAGE',LV_STR_MSG.
    ENDIF.

    READ TABLE LT_HANDLE INDEX 1 INTO HANDLE.

  ENDFORM.

Re: Application Log von mehreren Reports zusammenfassen

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Läuft das Application-Log bei euch synchron oder asynchron?
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Application Log von mehreren Reports zusammenfassen

Beitrag von geo2k (ForumUser / 6 / 2 / 0 ) »
a-dead-trousers hat geschrieben:Läuft das Application-Log bei euch synchron oder asynchron?
Hm, keine Ahnung.
Wo könnte ich das denn nachprüfen?

Habe gerade mal den FB BAL_DSP_LOG_DISPLAY im Unterprogramm ausgeführt und da zeigt er mir alle Nachrichten von Haupt- und Unterprogramm zusammengefasst an.
Konnte mir die Nachrichten zwar nicht aufklappen aber an der Anzahl habe ich gesehen, dass es passt.

Habe das Problem nun etwas eingrenzen können aber die Lösung noch nicht gefunden.
Wenn im Unterprogramm BAL_DB_SAVE ausgeführt wird, bekomme ich den Import E_NEW_LOGNUMBERS leer zurück!

D.h. trotz I_SAVE_ALL = 'X' wird nichts in die DB gesichert.
Ideen?


KORREKTUR:
Auch wenn ich beim zweiten Mal im Hauptprogramm BAL_DB_SAVE ausführe, ist der Importing Parameter leer... daran kann es also doch nicht liegen.
Ich weiß einfach nicht, wohin das ganze verschwindet....

Re: Application Log von mehreren Reports zusammenfassen

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
geo2k hat geschrieben:Auch wenn ich beim zweiten Mal im Hauptprogramm BAL_DB_SAVE ausführe, ist der Importing Parameter leer... daran kann es also doch nicht liegen.
Ich weiß einfach nicht, wohin das ganze verschwindet....
Ich glaub da wird irgendwas in Puffertabellen ausgelagert und nicht direkt gespeichert. Asynchron eben.
geo2k hat geschrieben:Habe das Problem nun etwas eingrenzen können aber die Lösung noch nicht gefunden.
Wenn im Unterprogramm BAL_DB_SAVE ausgeführt wird, bekomme ich den Import E_NEW_LOGNUMBERS leer zurück!
Wenn man sich den Namen des Importing-Parameters ansieht sollte eigentlich klar sein, warum da beim zweiten Aufruf nichts zurückgegeben wird :wink:
geo2k hat geschrieben:Hm, keine Ahnung.
Wo könnte ich das denn nachprüfen?
Sorry, aber die Einstellung kenn ich nur in unserem Umfeld (IS-H) und da wurde ein eigener Pflegedialog darüber gebaut. Wo man das in anderen Applikationen einstellen kann, kann ich dir leider nicht sagen.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Application Log von mehreren Reports zusammenfassen

Beitrag von Haubi (Expert / 625 / 20 / 30 ) »
Moinsen.

Wenn ich das richtig verstehe erzeugst Du in Programm 1 ein Log, rufst dann Programm 2, welches das Protokoll erweitern soll. Nach Rücksprung möchtest Du wiederum in Programm 1 Dein Log ebenfalls noch erweitern. So korrekt?

Die Reihenfolge sollte dann sein:
In Programm 1:
  • BAL_LOG_CREATE --> Log Handle
  • BAL_DB_SAVE --> Log Number
  • COMMIT WORK (das macht der SAVE nicht von sich aus)
  • SUBMIT (Log Number mitgeben)
Weiter in Programm 2:
  • BAL_DB_LOAD --> Log Number rein, Log Handle raus
  • (Log beschreiben)
  • BAL_DB_SAVE
Zurück in Programm 1:
  • BAL_DB_LOAD --> Log Number rein, Log Handle raus
  • (Log weiter beschreiben)
  • BAL_DB_SAVE
  • COMMIT WORK
Einmal vergeben ändert sich die Log Number nicht. Der Handle ist jedes Mal ein anderer. Daher wirst Du vermutlich bei BAL_DB_LOAD in Programm 1 einen anderen Handle erhalten als bei der Erstellung des Logs.

Grüße,
Haubi

Folgende Benutzer bedankten sich beim Autor Haubi für den Beitrag:
geo2k

Das ABAP Kochbuch ab sofort bei Amazon...

I'd rather write code that writes code than write code...

Re: Application Log von mehreren Reports zusammenfassen

Beitrag von Thomas R. (Expert / 754 / 73 / 34 ) »
Hallo Haubi!
Fehlt in Programm 2 nicht ev. der COMMIT oder wird er dort nicht gebraucht wegen eines impliziten COMMIT ?

MfG
Thomas R.

Re: Application Log von mehreren Reports zusammenfassen

Beitrag von Haubi (Expert / 625 / 20 / 30 ) »
Thomas R. hat geschrieben:Hallo Haubi!
Fehlt in Programm 2 nicht ev. der COMMIT oder wird er dort nicht gebraucht wegen eines impliziten COMMIT ?

MfG
Thomas R.
Du hast natürlich Recht, sicherheitshalber würde ich auch hier den COMMIT setzen. Der Implizite COMMIT sollte aber auch ziehen.

Grüße,
Haubi
Das ABAP Kochbuch ab sofort bei Amazon...

I'd rather write code that writes code than write code...

Re: Application Log von mehreren Reports zusammenfassen

Beitrag von deejey (Specialist / 418 / 128 / 45 ) »
Oder du schreibst nicht ins Log sondern sammelst alle Nachrichten in einer Itab, tauscht sie zwischen den Programmen aus und erst ganz am Ende in einem Stück ausgeben. Nachteil: beim Absturz geht alles verloren

Re: Application Log von mehreren Reports zusammenfassen

Beitrag von geo2k (ForumUser / 6 / 2 / 0 ) »
Haubi hat geschrieben:Moinsen.

Wenn ich das richtig verstehe erzeugst Du in Programm 1 ein Log, rufst dann Programm 2, welches das Protokoll erweitern soll. Nach Rücksprung möchtest Du wiederum in Programm 1 Dein Log ebenfalls noch erweitern. So korrekt?

Die Reihenfolge sollte dann sein:
In Programm 1:
  • BAL_LOG_CREATE --> Log Handle
  • BAL_DB_SAVE --> Log Number
  • COMMIT WORK (das macht der SAVE nicht von sich aus)
  • SUBMIT (Log Number mitgeben)
Weiter in Programm 2:
  • BAL_DB_LOAD --> Log Number rein, Log Handle raus
  • (Log beschreiben)
  • BAL_DB_SAVE
Zurück in Programm 1:
  • BAL_DB_LOAD --> Log Number rein, Log Handle raus
  • (Log weiter beschreiben)
  • BAL_DB_SAVE
  • COMMIT WORK
Einmal vergeben ändert sich die Log Number nicht. Der Handle ist jedes Mal ein anderer. Daher wirst Du vermutlich bei BAL_DB_LOAD in Programm 1 einen anderen Handle erhalten als bei der Erstellung des Logs.

Grüße,
Haubi
Hallo Haubi,
ja, das verstehst du richtig. Genau das habe ich vor.

Aber mit dieser Methode klappt es auch nicht. Wenn ich den DB_LOAD im Unterprogramm mache und dann (Zum Test) den FB BAL_DSP_LOG_DISPLAY aufrufe, zeigt er mir alle Logeinträge von Haupt- UND Unterprogramm an. Aber selbst dann, wenn ich mit DB_SAVE und COMMIT WORK im Unterprogramm arbeite, gehen die Einträge aus dem Unterprogramm verloren und im Log sind nur die Einträge vom Hauptprogramm.
deejey hat geschrieben: Oder du schreibst nicht ins Log sondern sammelst alle Nachrichten in einer Itab, tauscht sie zwischen den Programmen aus und erst ganz am Ende in einem Stück ausgeben. Nachteil: beim Absturz geht alles verloren
Wäre eíne Alternative aber wie bekomme ich über SUBMIT eine ITAB zurück?
Ich kann zwar mit dem Zusatz EXPORTING LIST TO MEMORY arbeiten aber da kann ich ja nur WRITE Befehle übernehmen. Da fehlt mir dann aber u.a. der Typ der Nachricht.

Ich glaube, das funktioniert irgendwie nicht so, wie ich es mir vorgestellt habe. Evtl. ist das auch nicht möglich?
Ich habe mir nun überlegt, einfach die Lognummer vom Hauptprogramm als externe Identifikation in den Kopfdaten des Logs vom Unterprogramm einzutragen, damit man sie zuordnen kann. Damit ein Bezug zwischen den beiden hergestellt werden kann...

Oder hat jmd. noch eine Idee?

Re: Application Log von mehreren Reports zusammenfassen

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Eine Idee hätte ich noch:
Nach dem BAL_DB_SAVE/COMMIT WORK und vor dem SUBMIT des 2ten Programms den Baustein BAL_LOG_REFRESH aufrufen.
Damit sollten im aufrufenden Programm 1 keine Rückstände im Speicher zurückbleiben, die bewirken könnten, dass beim BAL_DB_LOAD nach der Rückkehr aus dem 2ten Programm nicht die aktuellen Daten von der Datenbank gelesen werden.

Generell würde ich vorschlagen nach jedem BAL_DB_SAVE/COMMIT WORK ein BAL_LOG_REFRESH einzubauen.

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
geo2k

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Vergleichbare Themen

7
Antw.
3804
Views
Reports zum Löschen unbenötigter Reports
von Tunoto » 28.02.2006 16:45 • Verfasst in ABAP® für Anfänger
18
Antw.
3634
Views
Zusammenfassen von Zeiträumen
von MS-K » 26.02.2020 11:18 • Verfasst in ABAP® für Anfänger
3
Antw.
2182
Views
2 Spalten zusammenfassen
von L0w-RiDer » 21.02.2020 09:06 • Verfasst in ABAP® für Anfänger
4
Antw.
5332
Views
Spoolaufträge zusammenfassen
von hezi » 23.01.2006 17:15 • Verfasst in ABAP® Core
3
Antw.
1941
Views
Loops Zusammenfassen
von BMWi801 » 15.05.2018 13:23 • Verfasst in ABAP® Core

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Interne Tabelle
vor 5 Tagen von black_adept 2 / 133
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 254

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Interne Tabelle
vor 5 Tagen von black_adept 2 / 133
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 254

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 107
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 140