*&---------------------------------------------------------------------*
*& Report ZUSEREXIT
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zuserexit NO STANDARD PAGE HEADING.
TABLES : tstc, tadir, modsapt, modact, trdir, tfdir, enlfdir.
TABLES : tstct.
DATA : jtab LIKE tadir OCCURS 0 WITH HEADER LINE.
DATA : field1(30).
DATA : v_devclass LIKE tadir-devclass.
PARAMETERS : p_tcode LIKE tstc-tcode OBLIGATORY.
SELECT SINGLE * FROM tstc WHERE tcode EQ p_tcode.
IF sy-subrc EQ 0.
SELECT SINGLE * FROM tadir WHERE pgmid = 'R3TR'
AND object = 'PROG'
AND obj_name = tstc-pgmna.
MOVE : tadir-devclass TO v_devclass.
IF sy-subrc NE 0.
SELECT SINGLE * FROM trdir WHERE name = tstc-pgmna.
IF trdir-subc EQ 'F'.
SELECT SINGLE * FROM tfdir WHERE pname = tstc-pgmna.
SELECT SINGLE * FROM enlfdir WHERE funcname =
tfdir-funcname.
SELECT SINGLE * FROM tadir WHERE pgmid = 'R3TR'
AND object = 'FUGR'
AND obj_name EQ enlfdir-area.
MOVE : tadir-devclass TO v_devclass.
ENDIF.
ENDIF.
SELECT * FROM tadir INTO TABLE jtab
WHERE pgmid = 'R3TR'
AND object = 'SMOD'
AND devclass = v_devclass.
SELECT SINGLE * FROM tstct WHERE sprsl EQ sy-langu AND
tcode EQ p_tcode.
FORMAT COLOR COL_POSITIVE INTENSIFIED OFF.
WRITE:/(19) 'Transaction Code - ',
20(20) p_tcode,
45(50) tstct-ttext.
SKIP.
IF NOT jtab[] IS INITIAL.
WRITE:/(95) sy-uline.
FORMAT COLOR COL_HEADING INTENSIFIED ON.
WRITE:/1 sy-vline,
2 'Exit Name',
21 sy-vline ,
22 'Description',
95 sy-vline.
WRITE:/(95) sy-uline.
LOOP AT jtab.
SELECT SINGLE * FROM modsapt
WHERE sprsl = sy-langu AND
name = jtab-obj_name.
FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
WRITE:/1 sy-vline,
2 jtab-obj_name HOTSPOT ON,
21 sy-vline ,
22 modsapt-modtext,
95 sy-vline.
ENDLOOP.
WRITE:/(95) sy-uline.
DESCRIBE TABLE jtab.
SKIP.
FORMAT COLOR COL_TOTAL INTENSIFIED ON.
WRITE:/ 'No of Exits:' , sy-tfill.
ELSE.
FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
WRITE:/(95) 'No User Exit exists'.
ENDIF.
ELSE.
FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
WRITE:/(95) 'Transaction Code Does Not Exist'.
ENDIF.
AT LINE-SELECTION.
GET CURSOR FIELD field1.
CHECK field1(4) EQ 'JTAB'.
SET PARAMETER ID 'MON' FIELD sy-lisel+1(10).
CALL TRANSACTION 'SMOD' AND SKIP FIRST SCREEN.
Mostrar mensagens com a etiqueta user-exit. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta user-exit. Mostrar todas as mensagens
segunda-feira, 12 de abril de 2010
quinta-feira, 4 de março de 2010
How to Access or change variables that are not passed in user exit
Many times we are faced with scenarios that require some SAP standard parameters to be changed or accessed. However, these parameters are not always available in user-exit's interface. This is peculiar to versions earlier than ECC where enhancement spot concept was not available.
In these cases, the parameter can be accessed and the value can be changed using the concept of pointers in ABAP. Here we assume that the parameter is declared either in the parent program, or in some other extrnal program (which has been triggered before user-exit call), but the parameter is not passed to the available user-exit.
The idea is to get the reference of the memory area of the required parameter and then assign a local pointer to access this memory area. Following example demonstrates this method:
data: wv_table(50) type c.
field-symbols: ‹wf_table› type any ,
‹wf_reference› type table.
DATA: wo_ref TYPE REF TO DATA.
wv_table = '(SAPLFPAYM_DE)DTADDEZ[]'.
ASSIGN (wv_table) TO ‹wf_table›.
GET REFERENCE OF ‹wf_table› INTO wo_ref.
ASSIGN wo_ref-›* TO ‹wf_reference›.
IF sy-subrc IS INITIAL.
loop at DTADDEZ.
* Manipulate the value of standard parameter here
* Then update to pass back the value
modify from dtaddez.
endloop.
endif.
In these cases, the parameter can be accessed and the value can be changed using the concept of pointers in ABAP. Here we assume that the parameter is declared either in the parent program, or in some other extrnal program (which has been triggered before user-exit call), but the parameter is not passed to the available user-exit.
The idea is to get the reference of the memory area of the required parameter and then assign a local pointer to access this memory area. Following example demonstrates this method:
data: wv_table(50) type c.
field-symbols: ‹wf_table› type any ,
‹wf_reference› type table.
DATA: wo_ref TYPE REF TO DATA.
wv_table = '(SAPLFPAYM_DE)DTADDEZ[]'.
ASSIGN (wv_table) TO ‹wf_table›.
GET REFERENCE OF ‹wf_table› INTO wo_ref.
ASSIGN wo_ref-›* TO ‹wf_reference›.
IF sy-subrc IS INITIAL.
loop at DTADDEZ.
* Manipulate the value of standard parameter here
* Then update to pass back the value
modify
endloop.
endif.
Etiquetas:
ABAP,
field-symbols,
memory,
pointers,
reference variables,
SAP,
user-exit
Subscrever:
Mensagens (Atom)