Ergänzung: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.deejey hat geschrieben:Der BAL_LOG_CREATE liefert doch ein handle zurück, gib ihn dem aufgerufenen Report mit.
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.
Hm, keine Ahnung.a-dead-trousers hat geschrieben:Läuft das Application-Log bei euch synchron oder asynchron?
Ich glaub da wird irgendwas in Puffertabellen ausgelagert und nicht direkt gespeichert. Asynchron eben.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....
Wenn man sich den Namen des Importing-Parameters ansieht sollte eigentlich klar sein, warum da beim zweiten Aufruf nichts zurückgegeben wirdgeo2k 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!
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.geo2k hat geschrieben:Hm, keine Ahnung.
Wo könnte ich das denn nachprüfen?
Du hast natürlich Recht, sicherheitshalber würde ich auch hier den COMMIT setzen. Der Implizite COMMIT sollte aber auch ziehen.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.
Hallo Haubi,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:Weiter in Programm 2:
- BAL_LOG_CREATE --> Log Handle
- BAL_DB_SAVE --> Log Number
- COMMIT WORK (das macht der SAVE nicht von sich aus)
- SUBMIT (Log Number mitgeben)
Zurück in Programm 1:
- BAL_DB_LOAD --> Log Number rein, Log Handle raus
- (Log beschreiben)
- BAL_DB_SAVE
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.
- BAL_DB_LOAD --> Log Number rein, Log Handle raus
- (Log weiter beschreiben)
- BAL_DB_SAVE
- COMMIT WORK
Grüße,
Haubi
Wäre eíne Alternative aber wie bekomme ich über SUBMIT eine ITAB zurück?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
Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
geo2k