InfoCube Update Code Examples

Team-Fly

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.

click to expand
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


Business Information Warehouse for SAP
Business Information Warehouse for SAP (Prima Techs SAP Book Series)
ISBN: 0761523359
EAN: 2147483647
Year: 1999
Pages: 174
Authors: Naeem Hashmi

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net