Skip to Content
0
Former Member
Sep 19, 2005 at 11:44 AM

Generic Extraction: Function Module : PLEASE HELP

417 Views

I have created one generic dataspurce using function module.In RSA3 number of records it shows is 5149.When I try loading data into BW. I am facing a problem . It is loading data. In each data package there are 5149 records and are matching with r/3. But it seems to be an endless process. Same datapackage is loaded again and again. And number of records has surpassed 10 million records with each package having 5149 records and records of all datapackages in PSA are same.

I think there is a problem with function module. It is not ending the extraction procedure and is in endless loop.

For your refernce I am also pasting the code for my function Module

..........................................................

FUNCTION RSAX_BIW_GET_DATA_SIMPLE1.

*"----


""Local interface:

*" IMPORTING

*" VALUE(I_REQUNR) TYPE SRSC_S_IF_SIMPLE-REQUNR

*" VALUE(I_DSOURCE) TYPE SRSC_S_IF_SIMPLE-DSOURCE OPTIONAL

*" VALUE(I_MAXSIZE) TYPE SRSC_S_IF_SIMPLE-MAXSIZE OPTIONAL

*" VALUE(I_INITFLAG) TYPE SRSC_S_IF_SIMPLE-INITFLAG OPTIONAL

*" VALUE(I_READ_ONLY) TYPE SRSC_S_IF_SIMPLE-READONLY OPTIONAL

*" TABLES

*" I_T_SELECT TYPE SRSC_S_IF_SIMPLE-T_SELECT OPTIONAL

*" I_T_FIELDS TYPE SRSC_S_IF_SIMPLE-T_FIELDS OPTIONAL

*" E_T_DATA STRUCTURE ZCO_STR OPTIONAL

*" EXCEPTIONS

*" ERROR_PASSED_TO_MESS_HANDLER

*" NO_MORE_DATA

*"----


  • Example: DataSource for table SFLIGHT

  • TABLES:YSALES,

  • MBEW.

DATA: BEGIN OF I_YSALES OCCURS 0.

INCLUDE STRUCTURE YSALES.

DATA: END OF I_YSALES.

DATA: BEGIN OF I_MBEW OCCURS 0.

INCLUDE STRUCTURE MBEW.

DATA: END OF I_MBEW.

  • Auxiliary Selection criteria structure

DATA: L_S_SELECT TYPE SRSC_S_SELECT.

  • Maximum number of lines for DB table

STATICS: S_S_IF TYPE SRSC_S_IF_SIMPLE,

  • counter

S_COUNTER_DATAPAKID LIKE SY-TABIX,

  • cursor

S_CURSOR TYPE CURSOR.

  • Select ranges

RANGES: L_R_ZYEAR FOR YSALES-ZYEAR,

L_R_ZMONTH FOR YSALES-ZMONTH.

*

  • Initialization mode (first call by SAPI) or data transfer mode

  • (following calls) ?

IF I_INITFLAG = SBIWA_C_FLAG_ON.

************************************************************************

  • Initialization: check input parameters

  • buffer input parameters

  • prepare data selection

************************************************************************

  • Check DataSource validity

  • CASE I_DSOURCE.

  • WHEN '0SAPI_ysales_SIMPLE'.

  • WHEN OTHERS.

  • IF 1 = 2. MESSAGE E009(R3). ENDIF.

  • this is a typical log call. Please write every error message like

*this

  • LOG_WRITE 'E' "message type

  • 'R3' "message class

  • '009' "message number

  • I_DSOURCE "message variable 1

  • ' '. "message variable 2

  • RAISE ERROR_PASSED_TO_MESS_HANDLER.

  • ENDCASE.

*

  • APPEND LINES OF I_T_SELECT TO S_S_IF-T_SELECT.

*

  • Fill parameter buffer for data extraction calls

S_S_IF-REQUNR = I_REQUNR.

S_S_IF-DSOURCE = I_DSOURCE.

S_S_IF-MAXSIZE = I_MAXSIZE.

  • Fill field list table for an optimized select statement

  • (in case that there is no 1:1 relation between InfoSource fields

  • and database table fields this may be far from beeing trivial)

APPEND LINES OF I_T_FIELDS TO S_S_IF-T_FIELDS.

ELSE. "Initialization mode or data extraction ?

************************************************************************

  • Data transfer: First Call OPEN CURSOR + FETCH

  • Following Calls FETCH only

************************************************************************

  • First data package -> OPEN CURSOR

  • IF S_COUNTER_DATAPAKID = 0.

*

  • Fill range tables BW will only pass down simple selection criteria

  • of the type SIGN = 'I' and OPTION = 'EQ' or OPTION = 'BT'.

LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'ZYEAR'.

MOVE-CORRESPONDING L_S_SELECT TO L_R_ZYEAR.

APPEND L_R_ZYEAR.

ENDLOOP.

LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'ZMONTH'.

MOVE-CORRESPONDING L_S_SELECT TO L_R_ZMONTH.

APPEND L_R_ZMONTH.

ENDLOOP.

  • Determine number of database records to be read per FETCH statement

  • from input parameter I_MAXSIZE. If there is a one to one relation

  • between DataSource table lines and database entries, this is trivial.

  • In other cases, it may be impossible and some estimated value has to

  • be determined.

  • OPEN CURSOR WITH HOLD S_CURSOR FOR

  • SELECT (S_S_IF-T_FIELDS)

  • FROM YSALES .

  • select BUKRS

    ZYEAR

    ZMONTH

    WERKS

    MATNR

    SLSCAT

    KNDNR

    SPART

    MATKL

    MENGE

    DMBTR

    VV702

    VV703

    VVADS

    VV704

    VV731

    INTO CORRESPONDING FIELDS OF TABLE I_YSALES

    FROM YSALES

    WHERE ZYEAR IN L_R_ZYEAR

    AND ZMONTH IN L_R_ZMONTH.

    • WHERE MATNR IN L_R_MATNR.

    • WHERE WERKS = WERKS

    • AND MATNR = MATNR

    • AND KNDNR = KNDNR

    • AND SPART = SPART.

    IF SY-SUBRC = 0.

    SORT I_YSALES BY WERKS MATNR .

    ENDIF.

    IF NOT I_YSALES[] IS INITIAL.

    SELECT MATNR

    BWKEY

    BWTAR

    LBKUM

    SALK3

    BKLAS

    INTO CORRESPONDING FIELDS OF TABLE I_MBEW

    FROM MBEW

    FOR ALL ENTRIES IN I_YSALES

    WHERE MATNR = I_YSALES-MATNR

    AND BWKEY = I_YSALES-WERKS.

    ENDIF.

    LOOP AT I_YSALES.

    MOVE-CORRESPONDING I_YSALES TO E_T_DATA.

    READ TABLE I_MBEW WITH KEY MATNR = I_YSALES-MATNR

    BWKEY = I_YSALES-WERKS.

    IF SY-SUBRC = 0.

    MOVE-CORRESPONDING I_MBEW TO E_T_DATA.

    ENDIF.

    APPEND E_T_DATA.

    ENDLOOP.

    • ENDIF. "First data package ?

    • Fetch records into interface table.

    • named E_T_'Name of extract structure'.

    • FETCH NEXT CURSOR S_CURSOR

    • APPENDING CORRESPONDING FIELDS

    • OF TABLE E_T_DATA

    • PACKAGE SIZE S_S_IF-MAXSIZE.

    *

    • IF SY-SUBRC <> 0.

    • CLOSE CURSOR S_CURSOR.

    • RAISE NO_MORE_DATA.

    • ENDIF.

    *

    • S_COUNTER_DATAPAKID = S_COUNTER_DATAPAKID + 1.

    *

    ENDIF. "Initialization mode or data extraction ?

    ENDFUNCTION.