gelöst Application Log von mehreren Reports zusammenfassen


Getting started ... Alles für einen gelungenen Start.

Moderatoren: Jan, Steff

gelöst Application Log von mehreren Reports zusammenfassen

Beitragvon geo2k » 22.01.2019, 15:10

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
geo2k
ForumUser
 
Beiträge: 6
Registriert: 22.01.2019, 13:28
Dank erhalten: 0 mal
Ich bin: sonstiges

Sponsor

Alte ABAP-Entwicklerweisheit: Weißt du weder aus noch ein, baust du einen BADI ein

Re: Application Log von mehreren Reports zusammenfassen

Beitragvon a-dead-trousers » 22.01.2019, 15:51

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.07
Basis: 7.40
a-dead-trousers
Top Expert
 
Beiträge: 3156
Registriert: 07.02.2011, 13:40
Dank erhalten: 779 mal
Ich bin: Entwickler/in

Re: Application Log von mehreren Reports zusammenfassen

Beitragvon geo2k » 22.01.2019, 16:23

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?
geo2k
ForumUser
 
Beiträge: 6
Registriert: 22.01.2019, 13:28
Dank erhalten: 0 mal
Ich bin: sonstiges

Re: Application Log von mehreren Reports zusammenfassen

Beitragvon deejey » 23.01.2019, 12:51

Der BAL_LOG_CREATE liefert doch ein handle zurück, gib ihn dem aufgerufenen Report mit.
deejey
Specialist
 
Beiträge: 177
Registriert: 31.07.2016, 11:20
Dank erhalten: 14 mal
Ich bin: Entwickler/in

Re: Application Log von mehreren Reports zusammenfassen

Beitragvon a-dead-trousers » 23.01.2019, 14:01

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.07
Basis: 7.40
a-dead-trousers
Top Expert
 
Beiträge: 3156
Registriert: 07.02.2011, 13:40
Dank erhalten: 779 mal
Ich bin: Entwickler/in

Re: Application Log von mehreren Reports zusammenfassen

Beitragvon geo2k » 23.01.2019, 14:25

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.
 
geo2k
ForumUser
 
Beiträge: 6
Registriert: 22.01.2019, 13:28
Dank erhalten: 0 mal
Ich bin: sonstiges

Re: Application Log von mehreren Reports zusammenfassen

Beitragvon a-dead-trousers » 23.01.2019, 14:27

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.07
Basis: 7.40
a-dead-trousers
Top Expert
 
Beiträge: 3156
Registriert: 07.02.2011, 13:40
Dank erhalten: 779 mal
Ich bin: Entwickler/in

Re: Application Log von mehreren Reports zusammenfassen

Beitragvon geo2k » 23.01.2019, 15:49

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....
geo2k
ForumUser
 
Beiträge: 6
Registriert: 22.01.2019, 13:28
Dank erhalten: 0 mal
Ich bin: sonstiges

Re: Application Log von mehreren Reports zusammenfassen

Beitragvon a-dead-trousers » 23.01.2019, 18:53

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.07
Basis: 7.40
a-dead-trousers
Top Expert
 
Beiträge: 3156
Registriert: 07.02.2011, 13:40
Dank erhalten: 779 mal
Ich bin: Entwickler/in

Re: Application Log von mehreren Reports zusammenfassen

Beitragvon Haubi » 24.01.2019, 11:56

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
Das ABAP Kochbuch ab sofort bei Amazon...

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

Für diese Nachricht hat Haubi einen Dank bekommen :
geo2k
Haubi
Expert
 
Beiträge: 599
Registriert: 13.12.2002, 09:52
Wohnort: Braunschweig
Dank erhalten: 23 mal
Ich bin: Entwickler/in

Re: Application Log von mehreren Reports zusammenfassen

Beitragvon Thomas R. » 24.01.2019, 12:29

Hallo Haubi!
Fehlt in Programm 2 nicht ev. der COMMIT oder wird er dort nicht gebraucht wegen eines impliziten COMMIT ?

MfG
Thomas R.
Thomas R.
Expert
 
Beiträge: 675
Registriert: 11.12.2002, 08:04
Dank erhalten: 26 mal

Re: Application Log von mehreren Reports zusammenfassen

Beitragvon Haubi » 24.01.2019, 13:58

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...
.. ..|. |.|| ||| ..| |.|. .| |. .|. . .| |.. | .... .. ... |.|| ||| ..| |.. ||| |. | |. . . |.. ||. .|.. .| ... ... . ...
Haubi
Expert
 
Beiträge: 599
Registriert: 13.12.2002, 09:52
Wohnort: Braunschweig
Dank erhalten: 23 mal
Ich bin: Entwickler/in

Re: Application Log von mehreren Reports zusammenfassen

Beitragvon deejey » 24.01.2019, 20:34

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
deejey
Specialist
 
Beiträge: 177
Registriert: 31.07.2016, 11:20
Dank erhalten: 14 mal
Ich bin: Entwickler/in

Re: Application Log von mehreren Reports zusammenfassen

Beitragvon geo2k » 28.01.2019, 11:05

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?
geo2k
ForumUser
 
Beiträge: 6
Registriert: 22.01.2019, 13:28
Dank erhalten: 0 mal
Ich bin: sonstiges

Re: Application Log von mehreren Reports zusammenfassen

Beitragvon a-dead-trousers » 28.01.2019, 11:25

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.
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.07
Basis: 7.40

Für diese Nachricht hat a-dead-trousers einen Dank bekommen :
geo2k
a-dead-trousers
Top Expert
 
Beiträge: 3156
Registriert: 07.02.2011, 13:40
Dank erhalten: 779 mal
Ich bin: Entwickler/in

Nächste

Zurück zu ABAP® für Anfänger

  Aktuelle Beiträge   
Adobe Forms - Download - Keine Seiten
vor 10 Stunden von shimsham 2 Antw.
UTF-8 mit Funktionsbaustein
vor 13 Stunden von a-dead-trousers 4 Antw.
gelöst Fehler SAVE NOT ALLOWED bei F4IF_START_VALUE_REQUEST
vor 10 Stunden von AdrianSchm 1 Antw.
SAP Logon bei Aufruf WebGUI
Gestern von msfox 0 Antw.
Formatierung Textdatei aus Query und ABAP
vor 13 Stunden von wreichelt 5 Antw.

  Ähnliche Beiträge beta
Reports zum Löschen unbenötigter Reports
13.04.2006, 08:36 von Tunoto 7 Antw.
gelöst ABAP - Application Log
16.10.2017, 13:32 von swonny 1 Antw.
MB58 ergebnis download auf application server
15.03.2006, 16:05 von slim 2 Antw.
gelöst Application Log, Nachrichten werden nicht geladen
24.10.2017, 13:38 von a-dead-trousers 2 Antw.
Zeilenumruch bei Reports
12.05.2003, 15:58 von Frank Dittrich 5 Antw.

 

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder