Hi Folks,
We have a Custom Datasource ZDS_LINE_ITEM that is based on Faglflexa Table. To have the the currency ,amount fields and some other fields we have enhanced the Datasource.
We are doing individual look ups from different tables (BSEG, BSEG_ADD, BKPF) to populate the data in the extractor. Right now it is taking some 6 odd hrs to fetch the data into PSA .Heres the coding we have used in the enhancement.
****coding for enhancement*********
TYPES: BEGIN OF TY_FAGLFLEXA,
RYEAR TYPE GJAHR,
DOCNR TYPE BELNR_D,
RLDNR TYPE FAGL_RLDNR,
RBUKRS TYPE BUKRS,
DOCLN TYPE DOCLN6,
TSL TYPE VTCUR12,
HSL TYPE VLCUR12,
KSL TYPE VGCUR12,
OSL TYPE VOCUR12,
MSL TYPE QUAN1_12,
WSL TYPE VWCUR12,
END OF TY_FAGLFLEXA,
BEGIN OF TY_BSEG,
BUKRS TYPE BUKRS,
BELNR TYPE BELNR_D,
GJAHR TYPE GJAHR,
BUZEI TYPE BUZEI,
SGTXT TYPE SGTXT,
END OF TY_BSEG,
BEGIN OF TY_BKPF,
BUKRS TYPE BUKRS,
BELNR TYPE BELNR_D,
GJAHR TYPE GJAHR,
BLART TYPE BLART,
XBLNR TYPE XBLNR1,
BKTXT TYPE BKTXT,
END OF TY_BKPF,
BEGIN OF TY_SKA1,
SAKNR TYPE SAKNR,
KTOPL TYPE KTOPL,
END OF TY_SKA1,
BEGIN OF TY_T882G,
RBUKRS TYPE BUKRS,
CURR1 TYPE CURR1,
CURR2 TYPE CURR2,
END OF TY_T882G.
*-- Internal Table
Internal Table to hold data from the table FAGLFLEXA
DATA:
T_FAGLFLEXA LIKE TABLE OF FAGLFLEXA with header line,
T_FAGLFLEXA TYPE STANDARD TABLE OF TY_FAGLFLEXA,
Internal Table to hold data from the table BSEG
T_BSEG TYPE SORTED TABLE OF TY_BSEG
WITH UNIQUE KEY BUKRS BELNR GJAHR BUZEI,
*Internal Table to hold data from the table BKPF
T_BKPF TYPE STANDARD TABLE OF TY_BKPF,
Internal Table to hold data from the table SKA1
T_SKA1 TYPE STANDARD TABLE OF TY_SKA1,
Internal Table to hold data from the table SKA1
T_T882G TYPE STANDARD TABLE OF TY_T882G,
Internal Table to hold data fetched into the structure ZOXED0178
T_ZOXECD0178 LIKE TABLE OF ZOXECD0178 with header line,
*-- Work Area
Work Area to hold records obtained from FAGLFLEXA table
W_FAGLFLEXA LIKE FAGLFLEXA,
W_FAGLFLEXA TYPE TY_FAGLFLEXA,
Work Area to hold records obtained from BSEG table
W_BSEG TYPE TY_BSEG,
Work Area to hold records obtained from BKPF table
W_BKPF TYPE TY_BKPF,
Work Area to hold records obtained from SKA1 table
W_SKA1 TYPE TY_SKA1,
Work Area to hold records obtained from T882G table
W_T882G TYPE TY_T882G,
Work Area to hold data coming from the extractor ZDS_LINE_ITEM
W_ZOXECD0178 TYPE ZOXECD0178,
W_TABIX TYPE SYTABIX.
case i_datasource.
when 'ZDS_LINE_ITEM'.
REFRESH: T_ZOXECD0178,
T_FAGLFLEXA,
T_BSEG,
T_BKPF,
T_SKA1,
T_T882G.
CLEAR: W_FAGLFLEXA,
W_BSEG,
W_BKPF,
W_SKA1,
W_TABIX,
W_T882G.
T_ZOXECD0178[] = C_T_DATA[].
IF NOT T_ZOXECD0178[] IS INITIAL.
*Fetching all the records into internal table t_FAGLFLEXA from the transparent table FAGLFLEXA
SELECT RYEAR
DOCNR
RLDNR
RBUKRS
DOCLN
TSL
HSL
KSL
OSL
MSL
WSL
FROM FAGLFLEXA
INTO CORRESPONDING FIELDS OF TABLE T_FAGLFLEXA
FOR ALL ENTRIES IN T_ZOXECD0178
WHERE RYEAR = T_ZOXECD0178-RYEAR
AND DOCNR = T_ZOXECD0178-DOCNR
AND RLDNR = T_ZOXECD0178-RLDNR
AND RBUKRS = T_ZOXECD0178-RBUKRS
AND DOCLN = T_ZOXECD0178-DOCLN.
*Fetching all the records into internal table t_BSEG from the transparent table BSEG
SELECT BUKRS
BELNR
GJAHR
BUZEI
SGTXT
FROM BSEG INTO CORRESPONDING FIELDS OF TABLE T_BSEG
FOR ALL ENTRIES IN T_ZOXECD0178
WHERE BUKRS = T_ZOXECD0178-RBUKRS
AND BELNR = T_ZOXECD0178-BELNR
AND GJAHR = T_ZOXECD0178-GJAHR
AND BUZEI = T_ZOXECD0178-BUZEI.
Fetching all the records into internal table t_BKPF from the transparent table BKPF
SELECT BUKRS
BELNR
GJAHR
BLART
XBLNR
BKTXT
FROM BKPF INTO CORRESPONDING FIELDS OF TABLE T_BKPF
FOR ALL ENTRIES IN T_ZOXECD0178
WHERE BUKRS = T_ZOXECD0178-RBUKRS
AND BELNR = T_ZOXECD0178-BELNR
AND GJAHR = T_ZOXECD0178-GJAHR.
Fetching all the records into internal table t_SKA1 from the transparent table SKA1
SELECT SAKNR
KTOPL
FROM SKA1 INTO CORRESPONDING FIELDS OF TABLE T_SKA1
FOR ALL ENTRIES IN T_ZOXECD0178
WHERE SAKNR = T_ZOXECD0178-RACCT.
Fetching all the records into internal table t_t882g from the transparent table BKPF
SELECT RBUKRS
CURR1
CURR2
FROM T882G INTO CORRESPONDING FIELDS OF TABLE T_T882G
FOR ALL ENTRIES IN T_ZOXECD0178
WHERE RBUKRS = T_ZOXECD0178-RBUKRS.
SORT T_FAGLFLEXA BY RYEAR DOCNR RLDNR RBUKRS DOCLN.
IF NOT T_FAGLFLEXA IS INITIAL.
LOOP AT T_ZOXECD0178 INTO W_ZOXECD0178.
W_TABIX = SY-TABIX.
READ TABLE T_FAGLFLEXA INTO W_FAGLFLEXA
WITH KEY RYEAR = W_ZOXECD0178-RYEAR
DOCNR = W_ZOXECD0178-DOCNR
RLDNR = W_ZOXECD0178-RLDNR
RBUKRS = W_ZOXECD0178-RBUKRS
DOCLN = W_ZOXECD0178-DOCLN
BINARY SEARCH.
IF SY-SUBRC = 0.
W_ZOXECD0178-ZZTSL = W_FAGLFLEXA-TSL.
W_ZOXECD0178-ZZHSL = W_FAGLFLEXA-HSL.
W_ZOXECD0178-ZZKSL = W_FAGLFLEXA-KSL.
W_ZOXECD0178-ZZOSL = W_FAGLFLEXA-OSL.
W_ZOXECD0178-ZZMSL = W_FAGLFLEXA-MSL.
W_ZOXECD0178-ZZWSL = W_FAGLFLEXA-WSL.
ENDIF.
READ TABLE T_BSEG INTO W_BSEG
WITH KEY BUKRS = w_ZOXECD0178-rbukrs
BELNR = W_ZOXECD0178-BELNR
GJAHR = W_ZOXECD0178-GJAHR
BINARY SEARCH.
IF SY-SUBRC = 0.
W_ZOXECD0178-ZZSGTXT = W_BSEG-SGTXT.
ENDIF.
READ TABLE T_BKPF INTO W_BKPF
WITH KEY BUKRS = w_ZOXECD0178-rbukrs
BELNR = W_ZOXECD0178-BELNR
GJAHR = W_ZOXECD0178-GJAHR
BINARY SEARCH.
IF SY-SUBRC = 0.
W_ZOXECD0178-ZZBLART = W_BKPF-BLART.
W_ZOXECD0178-ZZXBLNR = W_BKPF-XBLNR.
W_ZOXECD0178-ZZBkTXT = W_BKPF-BKTXT.
endif.
READ TABLE T_SKA1 INTO W_SKA1
WITH KEY SAKNR = W_ZOXECD0178-racct
BINARY SEARCH.
IF SY-SUBRC = 0.
W_ZOXECD0178-ZZKTOPL = W_SKA1-KTOPL.
endif.
READ TABLE T_T882G INTO W_T882G
WITH KEY RBUKRS = w_ZOXECD0178-rbukrs
BINARY SEARCH.
IF SY-SUBRC = 0.
W_ZOXECD0178-ZZCURR1 = W_T882G-CURR1.
W_ZOXECD0178-ZZCURR2 = W_T882G-CURR2.
endif.
MODIFY T_ZOXECD0178 FROM w_ZOXECD0178
TRANSPORTING ZZTSL
ZZHSL
ZZKSL
ZZOSL
ZZMSL
ZZWSL
ZZSGTXT
ZZBLART
ZZXBLNR
zzbktxt
ZZKTOPL
ZZCURR1
ZZCURR2.
CLEAR: W_TABIX,
W_FAGLFLEXA,
W_BSEG,
W_BKPF,
W_SKA1,
W_T882G,
W_ZOXECD0178.
ENDLOOP.
ENDIF.
REFRESH C_T_DATA.
C_T_DATA[] = T_ZOXECD0178[].
REFRESH: T_FAGLFLEXA,
T_BSEG,
T_BKPF,
T_SKA1,
T_T882G,
T_ZOXECD0178.
endcase.
Can Some one suggest us if we can make any further changes to the coding so that it fetches the data more quickly. I Promise to award full points for your sugestions
regards,
sasidahr gunturu