Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Aufrufendes System in remote aufgerufenen Funktionsbaustein

Former Member
0 Kudos

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

3 REPLIES 3

Former Member
0 Kudos

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.

Former Member
0 Kudos

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.

0 Kudos

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