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.