Sie sind auf Seite 1von 7

User Exit Examples

1. Extending Business Content - EXIT_SAPLRSAP_001 data: l_s_icctrcst like icctrcst, l_s_icctract like icctract, l_s_icctrsta like icctrsta, l_tabix like sy-tabix. case i_isource. when '0CO_OM_CCA_1'. loop at c_t_data into l_s_icctrcst. l_tabix = sy-tabix. select single * from z0001 where kokrs = l_s_icctrcst-kokrs and kostl = l_s_icctrcst-kostl. if sy-subrc = 0. l_s_icctrcst-zfield1 = z0001-zfield1. l_s_icctrcst-zfield2 = z0001-zfield2. modify c_t_data from l_s_icctrcst index l_tabix. endif. endloop. when '0CO_OM_CCA_2'. ... when '0CO_OM_CCA_3'. ... when others. exit. endcase.

2. User Exit after Data loading (a) Delete old request REPORT Z_RSSM_START_SECOND_PROCESS_1 . TABLES: RSREQDONE, RSSELDONE, RSICCONT. " Request-Data " Selection for current Request " Request posted to which InfoCube

DATA: L_T_SELDONE LIKE RSSELDONE OCCURS 0 WITH HEADER LINE. DATA: L_T_ICUBE LIKE RSICCONT OCCURS 0 WITH HEADER LINE.

DATA: DATA: DATA: DATA: DATA:

L_LOGSYS LIKE RSSELDONE-LOGSYS. L_SOURCE LIKE RSSELDONE-SOURCE. L_SELDATE LIKE RSSELDONE-SELDATE. L_SELTIME LIKE RSSELDONE-SELTIME. BEGIN OF L_T_RNR_DEL OCCURS 0, ICUBE LIKE RSICCONT-ICUBE, RNR LIKE RSSELDONE-RNR, END OF L_T_RNR_DEL.

PARAMETER I_RNR LIKE RSREQDONE-RNR. *********************** SELECT SINGLE * FROM RSSELDONE WHERE RNR = I_RNR. IF SY-SUBRC <> 0. "new rquest does not exist, wrong rnr !!! EXIT. ENDIF. SELECT * FROM RSICCONT INTO TABLE L_T_ICUBE WHERE RNR = I_RNR. IF SY-SUBRC <> 0. "New request is not posted to any IC EXIT. "nothing will be deleted ENDIF. L_SOURCE = RSSELDONE-SOURCE.

L_LOGSYS = RSSELDONE-LOGSYS. L_SELDATE = RSSELDONE-SELDATE. L_SELTIME = RSSELDONE-SELTIME. SELECT * FROM RSSELDONE INTO TABLE L_T_SELDONE WHERE SOURCE = L_SOURCE AND LOGSYS = L_LOGSYS. DELETE L_T_SELDONE WHERE RNR = I_RNR.

"new request will be deleted

DELETE L_T_SELDONE SELDATE > ( SELTIME > SELDATE =

WHERE L_SELDATE L_SELTIME L_SELDATE

"delete younger requests OR AND ).

*Sort SORT L_T_SELDONE BY SELDATE DESCENDING SELTIME DESCENDING. REFRESH L_T_RNR_DEL.

LOOP AT L_T_SELDONE. " Requests to be deleted LOOP AT L_T_ICUBE. " Request existing in InfoCubes SELECT SINGLE * FROM RSICCONT WHERE ICUBE = L_T_ICUBE-ICUBE AND RNR = L_T_SELDONE-RNR. "check if posted to IC's IF SY-SUBRC = 0. L_T_RNR_DEL-ICUBE = L_T_ICUBE-ICUBE. L_T_RNR_DEL-RNR = L_T_SELDONE-RNR. APPEND L_T_RNR_DEL. ENDIF. ENDLOOP. IF NOT L_T_RNR_DEL[] IS INITIAL. " something found for rnr EXIT. ENDIF. ENDLOOP. LOOP AT L_T_RNR_DEL. CALL FUNCTION 'RSSM_DELETE_REQUEST' EXPORTING REQUEST INFOCUBE EXCEPTIONS REQUEST_NOT_IN_CUBE INFOCUBE_NOT_FOUND REQUEST_ALREADY_AGGREGATED REQUEST_ALREADY_COMDENSED OTHERS IF SY-SUBRC <> 0. * open for error-handling ENDIF. ENDLOOP.

= L_T_RNR_DEL-RNR = L_T_RNR_DEL-ICUBE = = = = = 1 2 3 4 5.

(b) Send Mail after data load data: document_data like sodocchgi1,

object_content like solisti1 occurs 0 with header line, receivers like somlreci1 occurs 0 with header line. concatenate tstatus 'Request' rnr 'uploaded' into document_data-obj_descr separated by space. concatenate 'Request' rnr 'for Infosource' source 'uploaded' into object_content-line separated by space.

append object_content. concatenate 'from sourcesystem' logsys into object_content-line separated by space. append object_content.

move 'METTEJ' to receivers-receiver. append receivers. move 'D020095' to receivers-receiver. append receivers. all function 'SO_NEW_DOCUMENT_SEND_API1' exporting document_data = document_data document_type = 'RAW' put_in_outbox = ' ' IMPORTING SENT_TO_ALL = NEW_OBJECT_ID = tables OBJECT_HEADER = object_content = object_content OBJECT_PARA = OBJECT_PARB = receivers = receivers EXCEPTIONS TOO_MANY_RECEIVERS = 1 DOCUMENT_NOT_SENT = 2 DOCUMENT_TYPE_NOT_EXIST = 3 OPERATION_NO_AUTHORIZATION = 4 PARAMETER_ERROR = 5 X_ERROR = 6 ENQUEUE_ERROR = 7 OTHERS = 8. if sy-subrc <> 0. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. endif.

3. User Exit for Variables

DATA: L_S_RANGE TYPE RSR_S_RANGESID. DATA: LOC_VAR_RANGE LIKE RRRANGEEXIT. DATA: LOC_YEAR LIKE T009B-BDATJ,

LOC_POPER LOC_DATE

LIKE LIKE

T009B-POPER, SY-DATUM.

CASE I_VNAM. *-- SINGVAR - Variables: Variable SalesOrg, User-Exit, SingleValue WHEN 'SINGVAR'. CLEAR L_S_RANGE. L_S_RANGE-LOW = '4000'. L_S_RANGE-SIGN = 'I'. L_S_RANGE-OPT = 'EQ'. APPEND L_S_RANGE TO E_T_RANGE. *-- INTVAR - Variables: Variable SalesOrg, User-Exit, Interval WHEN 'INTVAR'. L_S_RANGE-LOW = '1000'. L_S_RANGE-HIGH = '4000'. L_S_RANGE-SIGN = 'I'. L_S_RANGE-OPT = 'BT'. APPEND L_S_RANGE TO E_T_RANGE. *-- HIERVAR - Variables: Variable SalesOrg, User-Exit, Hierarchy WHEN 'HIERVAR'. L_S_RANGE-LOW = 'SD_DEMO5_SAL_HIER'. L_S_RANGE-SIGN = 'I'. L_S_RANGE-OPT = 'EQ'. APPEND L_S_RANGE TO E_T_RANGE. *-- HNODEVAR - Variables: Variable SalesOrg, User-Exit, Hierarchy WHEN 'HNODEVAR'. L_S_RANGE-LOW = 'EUROPE'. L_S_RANGE-HIGH = '0HIER_NODE'. L_S_RANGE-SIGN = 'I'. L_S_RANGE-OPT = 'EQ'. APPEND L_S_RANGE TO E_T_RANGE. *-- DMDATEFR - Variables: User-ExitExample, I_T_VAR_RANGE, *-- determine the end of the period for a day WHEN 'DMDATETO'. LOOP AT I_T_VAR_RANGE INTO LOC_VAR_RANGE WHERE VNAM = 'DMDATEIN'. CLEAR L_S_RANGE. LOC_YEAR = LOC_VAR_RANGE-LOW(4). CONCATENATE '0' LOC_VAR_RANGE-LOW+4(2) INTO LOC_POPER. CALL FUNCTION 'LAST_DAY_IN_PERIOD_GET' EXPORTING I_GJAHR = LOC_YEAR

I_PERIV = '01' I_POPER = LOC_POPER IMPORTING E_DATE = LOC_DATE EXCEPTIONS INPUT_FALSE = 1 T009_NOTFOUND = 2 T009B_NOTFOUND = 3 OTHERS = 4. L_S_RANGE-LOW = LOC_DATE. L_S_RANGE-SIGN = 'I'. L_S_RANGE-OPT = 'EQ'. APPEND L_S_RANGE TO E_T_RANGE. EXIT. ENDLOOP.

(4) User Exit Virtual Characteristics and Key figures

Example: InfoCube DEMOCUBE has the characteristic PRODUCT PRICE_TP and the key figure ACT_PRICE and QUANTITY. In the enhancement, the product from the current price for PRODUCT and the key figure QUANTITY should be determined. If successful, the characteristic PRICE_TP should contain the characteristic value '1'. The include ZXRSRU02: Definition ***INCLUDE ZXRSRU02 DATA: L_S_CHANM TYPE RRKE_S_CHANM. CASE I_S_RKB1D-INFOCUBE. WHEN 'DEMOCUBE'. L_S_CHANM-CHANM = 'PRODUCT'. L_S_CHANM-MODE = RRKE_C_MODE-READ. APPEND L_S_CHANM TO E_T_CHANM. L_S_CHANM-CHANM = 'PRICE_TP'. L_S_CHANM-MODE = RRKE_C_MODE-NO_SELETION. APPEND L_S_CHANM TO E_T_CHANM. APPEND 'ACT_PRICE' TO E_T_KYFNM. APPEND 'QUANTITY' TO E_T_KYFNM. ENDCASE. The include ZXRSRTOP: global data

***INCLUDE ZXRSRTOP . DATA: DATA: DATA: DATA: G_POS_DEMOCUBE_PRODUCT G_POS_DEMOCUBE_PRICE_TP G_POS_DEMOCUBE_ACT_PRICE G_POS_DEMOCUBE_QUANTITY TYPE TYPE TYPE TYPE I. I. I. I.

The Include ZXRSRZZZ:

Changing the data

***INCLUDE ZXRSRZZZ . FORM USER_DEMOCUBE USING I_S_RKB1D TYPE RSR_S_RKB1D CHANGING C_S_DATA TYPE ANY. FIELD-SYMBOLS FIELD-SYMBOLS FIELD-SYMBOLS FIELD-SYMBOLS <L_PRODUCT>. <L_PRICE_TP>. <L_ACT_PRICE>. <L_QUANTITY>.

ASSIGN COMPONENT G_POS_DEMOCUBE_PRODUCT OF STRUCTURE C_S_DATA TO <L_PRODUCT>. ASSIGN COMPONENT G_POS_DEMOCUBE_PRICE_TP OF STRUCTURE C_S_DATA TO <L_PRICE_TP>. ASSIGN COMPONENT G_POS_DEMOCUBE_ACT_PRICE OF STRUCTURE C_S_DATA TO <L_ACT_PRICE>. ASSIGN COMPONENT G_POS_DEMOCUBE_QUANTITY OF STRUCTURE C_S_DATA TO <L_QUANTITY>.

* Routine to get the price * PERFORM GET_PRICE USING <L_PRODUCT> * CHANGING <L_ACT_PRICE>. IF <L_ACT_PRICE> GT 0. <L_ACT_PRICE> = <L_ACT_PRICE> * <L_QUANTITY>. <L_PRICE_TP> = '1'. ENDIF. ENDFORM.

Das könnte Ihnen auch gefallen