09-19-2007 2:14 PM
Hallo,
gibt es eine Möglichkeit das aufrufende System (System, Mandant, Benutzer, Aufrufstapel vom aufrufenden System etc.) zu ermitteln, das einen Funktionsbaustein aufgerufen hat.
Ich habe einen Z-Funktionsbaustein, bei dem ich vermute, daß ich ihn löschen kann. Über den Verwendungsnachweis wird er nicht aufgerufen. Es könnte aber sein, daß er dynamisch irgendwo aufgerufen wird....
Deshalb habe ich mir in diesen eingebaut, daß er mir eine Mail mit dem Aufrufstapel zusendet. Das ist allerdings nicht ausreichend um festzustellen von wo er aufgerufen wird....
Ich könnte mir vorstellen, daß das nicht geht. Wäre doch aber super, wenn es doch gehen würde.
Grüße aus Heilbronn
Jürgen Spranz
09-19-2007 2:18 PM
Hi,
With little German that I know, I can see that the question is related to some Remote Function call, but cannot get the question completely.
Can you please post the question in English, so you can get more replies.
Thanks
Aneesh.
09-19-2007 2:52 PM
Well if i rely on Google - You are trying to know how a particular FM was called.
You can use function module SYSTEM_CALLSTACK, in that way you will be able to identify the Calling program.
09-20-2007 5:40 PM
Hey,
Es gibt 2 Wege diese angesprochenen Infos vom aktuellen System zu ermitteln.
Leider fehlen aber die Infos vom aufrufenden System (also nicht dem System, in dem der Funktionsbaustein abläuft, sondern die des verursachenden Systems).
Und gerade das wäre mir noch zusätzlich wichtig.
- den System-Aufruf
- den Funktionsbausein
Hier der Fuba der beide Möglichkeiten nutzt.
FUNCTION Z_BLABLA.
data: lv_description TYPE so_obj_des.
lv_description = 'Info: FuBa Z_BLABLA wurde aufgerufen'.
data: lt_receiver TYPE table of lxe_snd_rl with header line.
lt_receiver-RECEIVER = 'mail@mail.de'.
append lt_receiver.
data: lt_content type table of solisti1 with header line,
lv_content1(30) type c,
lv_content2(30) type c.
lv_content1 = 'Benutzer:'.
lv_content2 = sy-uname.
concatenate lv_content1 lv_content2 into lt_content.
append lt_content.
lv_content1 = 'aktuelles System:'.
lv_content2 = sy-sysid.
concatenate lv_content1 lv_content2 into lt_content.
append lt_content.
lv_content1 = 'aktueller Mandant:'.
lv_content2 = sy-mandt.
concatenate lv_content1 lv_content2 into lt_content.
append lt_content.
lt_content = 'Programmstapel über Systemcall ermittelt:'.
append lt_content.
TYPES:
begin of abap_call_stack_entry,
mainprogram like sy-repid,
include like sy-repid,
line type i,
eventtype like abdbg-leventtype,
event like abdbg-levent,
flag_system type c,
end of abap_call_stack_entry.
DATA:
acse type abap_call_stack_entry,
tab type table of abap_call_stack_entry,
lv_tabix like sy-tabix.
CALL 'ABAP_CALLSTACK' ID 'DEPTH' FIELD 2
ID 'CALLSTACK' FIELD tab.
LOOP AT tab INTO acse. " FROM 2.
*-- Der Start ab dem zweiten Eintrag ist notwendig, weil in
*-- der ersten Tabellenzeile der aktuelle Eintrag steht, also
*-- diese FORM-Routine.
lv_tabix = sy-tabix.
clear lt_content.
append lt_content.
lt_content = lv_tabix.
shift lt_content left deleting leading space.
concatenate 'Step:'
lt_content
into lt_content.
append lt_content.
concatenate 'Mainprogramm:'
acse-mainprogram
into lt_content.
append lt_content.
concatenate 'Include:'
acse-include
into lt_content.
append lt_content.
concatenate 'Event: '
acse-eventtype
acse-event
into lt_content.
append lt_content.
ENDLOOP.
data: lt_sys_callst type sys_callst with header line.
CALL FUNCTION 'SYSTEM_CALLSTACK'
IMPORTING
ET_CALLSTACK = lt_sys_callst[].
clear lt_content.
append lt_content.
lt_content = 'Programmstapel über FuBa ermittelt:'.
append lt_content.
loop at lt_sys_callst.
lv_tabix = sy-tabix.
clear lt_content.
append lt_content.
lt_content = lv_tabix.
shift lt_content left deleting leading space.
concatenate 'Step:'
lt_content
into lt_content.
append lt_content.
concatenate 'Progname:'
lt_sys_callst-progname
into lt_content.
append lt_content.
concatenate 'Eventtype:'
lt_sys_callst-eventtype
into lt_content.
append lt_content.
concatenate 'Eventname:'
lt_sys_callst-eventname
into lt_content.
append lt_content.
endloop.
CALL FUNCTION 'LXE_SEND_MAIL_WITHOUT_ATTMNT'
EXPORTING
DESCRIPTION = lv_description
SENSITIVITY = 'O'
IN_OUTBOX = 'X'
TABLES
RECEIVERS = lt_receiver[]
CONTENT = lt_content[]
EXCEPTIONS
TOO_MANY_RECEIVERS = 1
DOCUMENT_NOT_SENT = 2
NO_AUTHORIZATION = 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.
ENDIF.
commit work. "ohne diesen wird das Mail nicht versendet
ENDFUNCTION.
Hier das Ergebnis:
Info: FuBa Z_BLABLA wurde aufgerufen
Erstellt Jürgen Spranz am 20.09.2007 18:29:38
Benutzer:SPRANZ
aktuelles System:ICC
aktueller Mandant:910
Programmstapel über Systemcall ermittelt:
Step:1
Mainprogramm:SAPLZIDE_MTGL
Include:LZIDE_MTGLU01
Event:FUNCTIONZIDE_GET_FILIALE
Step:2
Mainprogramm:SAPLZIDE_MTGL
Include:LZIDE_MTGLV01
Event:FORMZIDE_GET_FILIALE
Programmstapel über FuBa ermittelt:
Step:1
Progname:SAPLZIDE_MTGL
Eventtype:FUNC
Eventname:ZIDE_GET_FILIALE
Step:2
Progname:SAPLZIDE_MTGL
Eventtype:FORM
Eventname:ZIDE_GET_FILIALE
Step:3
Progname:SAPMSSY1
Eventtype:FORM
Eventname:REMOTE_FUNCTION_CALL
Step:4
Progname:SAPMSSY1
Eventtype:MODULE(PBO)
Eventname:%_RFC_START
Ich hätte das Programm und die Mail schon mit in meinen 1. Forumsbeitrag schreiben sollen.
Sorry.
Wäre super, wenn noch jemand helfen könnte....
Mit freundlichem Gruß
Jürgen Spranz