
If you execute a query containing variables with the customer exit replacement path (and these variables are filled depending on input-ready variables) the variable exit will sometimes not run, or incorrect data will be selected. To avoid this, you can control the dependencies using parameter I_STEP.
Enhancement RSR00001 (Customer Exit Global Variables in Reporting; transaction SMOD; component or function module EXIT_SAPLRRS0_001) is called several times during the execution of the report. Parameter I_STEP dictates when the enhancement is called.
The following values are valid for I_STEP:
Call is made directly before variable entry.
Call is made directly after variable entry. This step is only executed if the same variable is not input-ready and could not be filled for I_STEP = 1.
In this call, you can check the values of the variables. When an exception (RAISE) is triggered, the Variables screen appears again. I_STEP = 2 is then also called again.
The enhancement is not called from the Variables screen. The call can originate from the authorization check or from the monitor.
Values of Other Variables
When calling enhancement RSR00001 (Customer-Exit Global Variables in Reporting), the system submits the current values for the other variables in table I_T_VAR_RANGE. The table type is RRS0_T_VAR_RANGE. Row type RRS0_S_VAR_RANGE references structure RRRANGEEXIT.
This structure has the following fields:
| Field | Description |
|---|---|
|
VNAM |
Variable name |
|
IOBJNM |
InfoObject name |
|
SIGN |
(I)ncluding [] or (E)xcluding ][ |
|
OPT |
Operators: EQ =, BT [], LE <=, LT <, GE >=, GT >, CP, and so on |
|
LOW |
Characteristic value |
|
HIGH |
Characteristic value of upper limit for intervals or node InfoObject for hierarchy nodes |
Any variable to be filled depending on an input-ready variable must never be filled in step I_STEP = 1. You have not yet entered values for the input-ready variables. No variables have been entered yet.
By inserting the following statement, you can force execution of the variable in I_STEP = 2 instead of I_STEP = 1.
CASE I_VNAM.
…
IF I_STEP <> 2.
RAISE no_processing.
ENDIF.
…
In the following example, the current month is taken from an input-ready variable MONTH. This is then used to generate an interval that cumulates all months from January ('01') up to the current month. The customer exit variable CUMMONTH contains the interval as the value.
DATA: L_S_RANGE TYPE RSR_S_RANGESID.
DATA: L_S_VAR_RANGE TYPE RRRANGEEXIT.
CASE I_VNAM.
WHEN 'CUMMONTH'.
IF I_STEP = 2. "after the popup
READ TABLE I_T_VAR_RANGE INTO L_S_VAR_RANGE WITH KEY VNAM = 'MONTH'.
IF SY-SUBRC = 0.
CLEAR L_S_RANGE.
L_S_RANGE-LOW = LOC_VAR_RANGE-LOW(4)."low value, for example, 200601
L_S_RANGE-LOW+4(2) = '01'.
L_S_RANGE-HIGH = LOC_VAR_RANGE-LOW. "high value = input
L_S_RANGE-SIGN = 'I'.
L_S_RANGE-OPT = 'BT'.
APPEND L_S_RANGE TO E_T_RANGE.
ENDIF.
ENDIF.
ENDCASE.