In Chapter 12, you defined a simple Sales Analysis InfoCube, IC_CUBE02, with characteristics Customer number, Distribution channel, and Material number; and one key figure, Amount, as shown in Figure B-1. As a result of the update rules definition to populate the InfoCube, SAP BW 1.2B will generate the following program. The SAP BW scheduler will use this program to populate the InfoCube.
Figure B-1: SAP BW Model for the IC_CUBE02 InfoCube as Described in Chapter 12.
************************************************************************ * * Generated report for update: Business Information Warehouse * * Template......: RSTMPLUR * InfoCube......: IC_CUBE02 * InfoSource....: IS_SALES_DATA * Author........: BWADMIN * Date..........: 09.08.1999 11:11:06 * * Do not change this report ! * ************************************************************************ REPORT GPDKBVHM89E97PCFLJYLCF434T5 MESSAGE-ID RSAU. TYPE-POOLS: RSAU, RSAA, RSARR, RSA, RS, RSSM. INCLUDE RSAUIDOCSTAT. TYPES: BEGIN OF G_S_HASHED_CUBE. INCLUDE STRUCTURE /BIC/VIC_CUBE02T. TYPES: F0AMOUNT0001 TYPE RS_BOOL, END OF G_S_HASHED_CUBE, G_T_HASHED_CUBE TYPE HASHED TABLE OF G_S_HASHED_CUBE WITH UNIQUE KEY CUSTOMER DISTR_CHAN MATERIAL CALYEAR CURRENCY , G_T_COMSTRU LIKE /BIC/CSIS_SALES_DATA OCCURS 0. DATA: G TYPE G_S_HASHED_CUBE, G_S_KBTBX TYPE G_S_HASHED_CUBE, G_S_KB TYPE G_S_HASHED_CUBE, G_T_KB TYPE G_T_HASHED_CUBE, G_S_IS LIKE /BIC/CSIS_SALES_DATA, * name convention violated in the following variables COMM_STRUCTURE LIKE /BIC/CSIS_SALES_DATA, I_RECORD_NO LIKE SY-TABIX, RECORD_NO LIKE SY-TABIX, I_RECORD_ALL LIKE SY-TABIX, RECORD_ALL LIKE SY-TABIX, I_LOGSYS LIKE RSUPDSIMULH-LOGSYS, SOURCE_SYSTEM LIKE RSUPDSIMULH-LOGSYS, I_DATAP TYPE RSARR_S_RECEIVE_HEADER3-DATAPAKID, I_IDOCNUM TYPE RSARR_IDOC_DOCNUM, I_REQUNR TYPE RSARR_S_RECEIVE_HEADER3- REQUEST, I_INFOCUBE TYPE RSAU_S_UPDINFO-INFOCUBE, MONITOR LIKE RSMONITOR OCCURS 0 WITH HEADER LINE, ABORT LIKE SY-SUBRC, RSMONINC5M, RSMONINC5C, RSMONINC5W, RSMONINC5G. ************************************************************************ * fill infocube with infosource data ************************************************************************ FORM UPDATE_INFOCUBE TABLES I_T_ISOURCE TYPE G_T_COMSTRU USING I_S_MINFO TYPE RSSM_S_MINFO I_DATAP_INIT TYPE RSARR_S_RECEIVE_HEADER3-DATAPAKID I_IDOCNUM_INIT TYPE RSARR_IDOC_DOCNUM CHANGING C_T_IDOCSTATE TYPE RSARR_T_IDOCSTATE C_SUBRC LIKE SY-SUBRC. DATA: L_S_IC TYPE G_S_HASHED_CUBE, L_T_IC TYPE G_T_HASHED_CUBE, L_WA_NEW TYPE RS_BOOL, L_VAL_SET TYPE RS_BOOL, L_FSCVTSRC TYPE RSAU_S_UPDINFO-FSCVTSRC, L_T_RSMONDATA LIKE RSMONVIEW OCCURS 0 WITH HEADER LINE. ERROR_CATCH. * init global vars I_INFOCUBE = 'IC_CUBE02'. I_REQUNR = I_S_MINFO-REQUNR. * i_record_no * i_record_all SOURCE_SYSTEM = I_S_MINFO-LOGSYS. I_LOGSYS = I_S_MINFO-LOGSYS. I_DATAP = I_DATAP_INIT. I_IDOCNUM = I_IDOCNUM_INIT. REFRESH: MONITOR. * check, if source of fiscvarnt has changed CALL FUNCTION 'RSAU_FISCVARNT_INFO_GET' EXPORTING I_INFOCUBE = 'IC_CUBE02' I_ISOURCE = 'IS_SALES_DATA' IMPORTING E_FSCVTSRC = L_FSCVTSRC EXCEPTIONS ISOURCE_NOT_FOUND = 1 UNSPECIFIED_ERROR = 2 OTHERS = 3. IF SY-SUBRC <> 0 OR L_FSCVTSRC <> 'NO'. SIMPLE_ERROR C_T_IDOCSTATE 'UPDATE_INFOCUBE' '497' 'NO' L_FSCVTSRC RSMONINC5G. C_SUBRC = 1. EXIT. ENDIF. * log 'start update'-event INCLUDE RSMONINC55. DESCRIBE TABLE I_T_ISOURCE LINES I_RECORD_ALL. RECORD_ALL = I_RECORD_ALL. LOOP AT I_T_ISOURCE INTO G_S_IS. I_RECORD_NO = SY-TABIX. RECORD_NO = I_RECORD_NO. L_WA_NEW = RS_C_FALSE. L_VAL_SET = RS_C_FALSE. CLEAR G_S_KB. REFRESH G_T_KB. CLEAR G_S_KBTBX. * ******************************************************************** * * update rule no...: 0001 * * update infoobject: 0AMOUNT * ******************************************************************** PERFORM R0001_0AMOUNT CHANGING L_WA_NEW L_VAL_SET C_T_IDOCSTATE C_SUBRC. IF C_SUBRC <> 0. EXIT ENDIF. * ******************************************************************** * * save last key figure to key figure buffer table * ******************************************************************** IF L_VAL_SET = RS_C_TRUE. IF L_WA_NEW = RS_C_FALSE. "read from table !!! DELETE TABLE G_T_KB FROM G_S_KBTBX. ENDIF. * INSERT G_S_KB INTO TABLE G_T_KB. L_VAL_SET = RS_C_FALSE. CLEAR G_S_KB. ENDIF. * insert records from the keyfigure buffer table into the local cube LOOP AT G_T_KB INTO G_S_KB. READ TABLE L_T_IC INTO L_S_IC WITH TABLE KEY CUSTOMER = G_S_KB-CUSTOMER DISTR_CHAN = G_S KB-DISTR_CHAN MATERIAL = G_S_KB-MATERIAL CALYEAR = G_S_KB-CALYEAR CURRENCY = G_S_KB-CURRENCY . IF SY-SUBRC = 0. "heureka IF G_S_KB-F0AMOUNT0001 = RS_C_TRUE. L_S_IC-F0AMOUNT0001 = RS_C_TRUE. L_S_IC-AMOUNT = L_S_IC-AMOUNT + G_S_KB-AMOUNT. ENDIF. MODIFY TABLE L_T_IC FROM L_S_IC. ELSE. INSERT G_S_KB INTO TABLE L_T_IC. ENDIF. ENDLOOP. ENDLOOP. PERFORM USER_MESSAGE CHANGING C_T_IDOCSTATE. IF C_SUBRC <> 0. EXIT. ENDIF. * fill the InfoObject 0REQUID IF I_S_MINFO-CANCELLATION = RS_C_TRUE. L_S_IC-REQUID = I_S_MINFO-CANCELLATIONREQUNR. ELSE. L_S_IC-REQUID = I_S_MINFO-REQUNR. ENDIF. MODIFY L_T_IC FROM L_S_IC TRANSPORTING REQUID WHERE REQUID IS INITIAL OR NOT REQUID IS INITIAL. * log 'stop update'-event DESCRIBE TABLE L_T_IC LINES SY-TFILL. INCLUDE RSMONINC59. IF I_S_MINFO-CANCELLATION = RS_C_TRUE. PERFORM CANCELLATION_CONVERT CHANGING L_T_IC C_T_IDOCSTATE C_SUBRC. IF C_SUBRC <> 0. EXIT. ENDIF. ENDIF. PERFORM WRITEIC(GPDMGLMY6URMYDHLS4691XYERYX) USING L_T_IC I_S_MINFO I_DATAP I_IDOCNUM CHANGING C_T_IDOCSTATE C_SUBRC. ERROR_ENDCATCH C_T_IDOCSTATE 'UPDATE_INFOCUBE' I_RECORD_NO. ENDFORM. FORM USER_MESSAGE CHANGING C_T_IDOCSTATE TYPE RSARR_T_IDOCSTATE. DATA: L_S_MONITOR LIKE RSMONITOR, L_S_IDOCSTATE TYPE RSARR_S_IDOCSTATE, L_S_RSMONDATA LIKE RSMONVIEW, L_T_RSMONDATA LIKE RSMONVIEW OCCURS 0. LOOP AT MONITOR INTO L_S_MONITOR. * user messages IF L_S_MONITOR-MSGTY = RS_C_ERROR. * make idoc entry MOVE-CORRESPONDING L_S_MONITOR TO L_S_IDOCSTATE. L_S_IDOCSTATE-STATUS = RSARR_C_IDOCSTATE_ERROR. L_S_IDOCSTATE-UNAME = SY-UNAME. L_S_IDOCSTATE-REPID = SY-REPID. L_S_IDOCSTATE-ROUTID = 'USER_DEFINED'. APPEND L_S_IDOCSTATE TO C_T_IDOCSTATE. ENDIF. * monitor entry MOVE-CORRESPONDING L_S_MONITOR TO L_S_RSMONDATA. L_S_RSMONDATA-RNR = I_REQUNR. L_S_RSMONDATA-DATAPAKID = I_DATAP. L_S_RSMONDATA-IDOCNUM = I_IDOCNUM. L_S_RSMONDATA-AUFRUFER = '57'. IF L_S_IDOCSTATE-MSGTY = RS_C_ERROR. L_S_RSMONDATA-ERROR = RS_C_TRUE. ELSE. L_S_RSMONDATA-ERROR = RS_C_FALSE. ENDIF. APPEND L_S_RSMONDATA TO L_T_RSMONDATA. ENDLOOP. * user defined messages monitor entries CALL FUNCTION 'RSSM_MON_WRITE_MONITOR_IC' EXPORTING AGGREGATE = 'N' TABLES DATA = L_T_RSMONDATA. ENDFORM. ************************************************************************ * routine to convert InfoCube data for cancellation mode ************************************************************************ FORM CANCELLATION_CONVERT CHANGING C_T_IC TYPE G_T_HASHED_CUBE C_T_IDOCSTATE TYPE RSARR_T_IDOCSTATE C_SUBRC LIKE SY-SUBRC. DATA: L_S_IC TYPE G_S_HASHED_CUBE, L_RECORD_NO LIKE SY-SUBRC, L_MODIFIED TYPE RS_BOOL, L_T_RSMONDATA LIKE RSMONVIEW OCCURS 0 WITH HEADER LINE. ERROR_CATCH. LOOP AT C_T_IC INTO L_S_IC. L_RECORD_NO = SY-TABIX. L_MODIFIED = RS_C_FALSE. IF L_S_IC-F0AMOUNT0001 = RS_C_TRUE. L_S_IC-AMOUNT = -1 * L_S_IC-AMOUNT. L_MODIFIED = RS_C_TRUE. ENDIF. IF L_MODIFIED = RS_C_TRUE. MODIFY TABLE C_T_IC FROM L_S_IC. ENDIF. ENDLOOP. ERROR_ENDCATCH C_T_IDOCSTATE 'CANCELLATION_CONVERT' L_RECORD_NO. ENDFORM. ************************************************************************ * cha_calculation ************************************************************************ FORM CHA_CALCULATION CHANGING L_RETURNCODE LIKE SY-SUBRC C_T_IDOCSTATE TYPE RSARR_T_IDOCSTATE C_SUBRC LIKE SY-SUBRC. DATA: L_T_RSMONDATA LIKE RSMONVIEW OCCURS 0 WITH HEADER LINE, L_FSCVTVAL TYPE RSAU_S_UPDINFO-FSCVTVAL. G-CUSTOMER = G_S_IS-CUSTOMER. G-DISTR_CHAN = G_S_IS-DISTR_CHAN. G-MATERIAL = G_S_IS-MATERIAL. G-CALYEAR = G_S_IS-CALYEAR. G-CURRENCY = G_S_IS-CURRENCY. ENDFORM. ************************************************************************ * update rule no...: 0001 * update infoobject: 0AMOUNT * update field.....: AMOUNT ************************************************************************ FORM R0001_0AMOUNT CHANGING C_WA_NEW TYPE RS_BOOL C_VAL_SET TYPE RS_BOOL C_T_IDOCSTATE TYPE RSARR_T_IDOCSTATE C_SUBRC LIKE SY-SUBRC. DATA: L_KYF TYPE G_S_HASHED_CUBE-AMOUNT, L_FSCVTVAL TYPE RSAU_S_UPDINFO-FSCVTVAL, L_SUBRC LIKE SY-SUBRC, L_RETURNCODE LIKE SY-SUBRC, L_T_RSMONDATA LIKE RSMONVIEW OCCURS 0 WITH HEADER LINE. ERROR_CATCH. CLEAR G. * common characteristics calculation PERFORM CHA_CALCULATION CHANGING L_RETURNCODE C_T_IDOCSTATE C_SUBRC. IF L_RETURNCODE <> 0 OR C_SUBRC <> 0. EXIT. ENDIF. L_KYF = G_S_IS-AMOUNT. G_S_KB-CUSTOMER = G-CUSTOMER. G_S_KB-DISTR_CHAN = G-DISTR_CHAN. G_S_KB-MATERIAL = G-MATERIAL. G_S_KB-CALYEAR = G-CALYEAR. G_S_KB-CURRENCY = G-CURRENCY. C_WA_NEW = RS_C_TRUE. g_s_kb-AMOUNT = g_s_kb-AMOUNT + 1_kyf. G_S_KB-F0AMOUNT0001 = RS_C_TRUE. C_VAL_SET = RS_C_TRUE. G_S_KB-CURRENCY = G-CURRENCY. ERROR_ENDCATCH C_T_IDOCSTATE 'R0001_0AMOUNT' I_RECORD_NO. ENDFORM.
Team-Fly |