You are on page 1of 7

Sample Code - FM based extractor

Steps
**1 - Tables and Internal tables declaration......................................................................................... 1 **2 - Declare Output internal tables similar to Extract Structure ........................................................ 2 **3 - Declare selection screen and other counters .............................................................................. 2 **4 - Capture Select ranges .................................................................................................................. 3 **5 - Capture Extractor ......................................................................................................................... 3 * Check DataSource validity .................................................................................................................. 3 * Fill parameter buffer for data extraction calls ................................................................................... 3 **6 - Use Open Cursor for first and main select statement ................................................................. 4 **7 - Other Select Statements .............................................................................................................. 5 **8 - Generate Output data - First Loop begins VTBFINKO data .......................................................... 5 **9 - Assign the out internal table to E_T_DATA for result set ............................................................ 6

FUNCTION ZTEST_VIKAS_TR. *"---------------------------------------------------------------------*"*"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 *" VALUE(I_REMOTE_CALL) TYPE SBIWA_FLAG DEFAULT SBIWA_C_FLAG_OFF *" 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 ZBWDS_CF OPTIONAL *" EXCEPTIONS *" NO_MORE_DATA *" ERROR_PASSED_TO_MESS_HANDLER *"----------------------------------------------------------------------

**1 - Tables and Internal tables declaration


TABLES : vtbfha, vtb_asgn_limit, vtb_asgn_pos, vtb_asgn_relat, vtbfinko.

* Data declaration
DATA : wa_vtb_asgn_relat TYPE vtb_asgn_relat, it_vtb_asgn_relat TYPE TABLE OF vtb_asgn_relat, wa_vtb_asgn_pos TYPE vtb_asgn_pos, it_vtb_asgn_pos TYPE TABLE OF vtb_asgn_pos, wa_vtb_asgn_limit TYPE vtb_asgn_limit, it_vtb_asgn_limit TYPE TABLE OF vtb_asgn_limit, wa_vtbfinko TYPE vtbfinko, it_vtbfinko TYPE TABLE OF vtbfinko. DATA : wa_temp TYPE zbwds_cf, it_temp TYPE TABLE OF zbwds_cf. TYPES: BEGIN OF ls_vtbfha, bukrs TYPE vtbfha-bukrs, rfha TYPE vtbfha-rfha, sanlf TYPE vtbfha-sanlf, sfgtyp TYPE vtbfha-sfgtyp, sgsart TYPE vtbfha-sgsart, saktiv TYPE vtbfha-saktiv, END OF ls_vtbfha. DATA: wa_vtbfha TYPE ls_vtbfha, it_vtbfha TYPE TABLE OF ls_vtbfha.

CONSTANTS : c_rfhazu TYPE i VALUE '2', c_pkond_un TYPE i VALUE '9901', c_pkond TYPE i VALUE '9902', c_pkond_fco TYPE i VALUE '9903', c_pkond_fcc TYPE i VALUE '9904'. DATA : lv_pkond TYPE vtbfinko-pkond, lv_pkond_un TYPE vtbfinko-pkond, lv_pkond_fco TYPE vtbfinko-pkond, lv_pkond_fcc TYPE vtbfinko-pkond.

"FC "FC "FC "FC

not utilized Utilized ovedrwan Credit line

**2 - Declare Output internal tables similar to Extract Structure


DATA : ls TYPE zbwds_cf, wa_out TYPE zbwds_cf, itab_out TYPE TABLE OF zbwds_cf, wa_itab_out LIKE LINE OF itab_out, wa_et LIKE LINE OF e_t_data.

**3 - Declare selection screen and other counters

* 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.

**4 - Capture Select ranges


RANGES : l_compcode FOR vtb_asgn_relat-company_code, l_transno FOR vtb_asgn_relat-deal_number, l_rkond FOR vtbfinko-rkond.

**5 - Capture Extractor


* 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 'ZPZZDS_TR_VIKAS' .

*APPEND LINES OF I_T_SELECT TO S_S_IF-T_SELECT. WHEN OTHERS. 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 APPEND LINES OF i_t_fields TO s_s_if-t_fields. ELSE. "Initialization mode or data extraction ?

* First data package -> OPEN CURSOR IF s_counter_datapakid = 0. LOOP AT s_s_if-t_select INTO l_s_select WHERE fieldnm = 'COMPANY_CODE'. MOVE-CORRESPONDING l_s_select TO l_compcode. APPEND l_compcode . ENDLOOP.

LOOP AT s_s_if-t_select INTO l_s_select WHERE fieldnm = 'DEAL_NUMBER'. MOVE-CORRESPONDING l_s_select TO l_transno . APPEND l_transno. ENDLOOP. * Will pad the transaction no. with leading zeroes. LOOP AT l_transno. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = l_transno-low IMPORTING output = l_transno-low. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = l_transno-high IMPORTING output = l_transno-high. MODIFY l_transno INDEX sy-index. ENDLOOP. l_rkond-sign = 'I'. l_rkond-option = 'BT'. l_rkond-low = '9901'. l_rkond-high = '9902'. MODIFY l_rkond index sy-index. ** First Select * perform selection_data. * SELECT bukrs * rfha * sanlf * sfgtyp * sgsart * saktiv * FROM vtbfha * INTO CORRESPONDING FIELDS OF TABLE it_vtbfha * WHERE bukrs IN l_compcode * AND rfha IN l_transno * AND sanlf EQ '560' * AND sgsart EQ 'CF' * AND saktiv EQ 0. * Rather than using select statement, we have used open cursor for first and * main select statement

**6 - Use Open Cursor for first and main select statement
OPEN CURSOR WITH HOLD s_cursor FOR SELECT bukrs rfha sanlf sfgtyp sgsart saktiv FROM vtbfha INTO CORRESPONDING FIELDS OF TABLE it_vtbfha WHERE bukrs IN l_compcode AND rfha IN l_transno AND sanlf EQ '560' AND sgsart EQ 'CF' AND saktiv EQ 0.

FETCH NEXT CURSOR s_cursor APPENDING CORRESPONDING FIELDS OF TABLE it_vtbfha PACKAGE SIZE i_maxsize. ** IF it_vtbfha IS NOT INITIAL.

**7 - Other Select Statements


SELECT * FROM vtb_asgn_relat INTO TABLE it_vtb_asgn_relat FOR ALL ENTRIES IN it_vtbfha WHERE company_code EQ it_vtbfha-bukrs AND deal_number EQ it_vtbfha-rfha AND relat_obj_cat = 'SYN'. SELECT * FROM vtb_asgn_pos INTO TABLE it_vtb_asgn_pos FOR ALL ENTRIES IN it_vtb_asgn_relat WHERE relat_obj EQ it_vtb_asgn_relat-relat_obj AND relat_obj_cat EQ it_vtb_asgn_relat-relat_obj_cat. SELECT * FROM vtb_asgn_limit INTO TABLE it_vtb_asgn_limit FOR ALL ENTRIES IN it_vtb_asgn_relat WHERE relat_obj EQ it_vtb_asgn_relat-relat_obj AND relat_obj_cat EQ it_vtb_asgn_relat-relat_obj_cat. SELECT * FROM vtbfinko INTO TABLE it_vtbfinko FOR ALL ENTRIES IN it_vtb_asgn_relat WHERE bukrs EQ it_vtb_asgn_relat-company_code AND rfha EQ it_vtb_asgn_relat-deal_number AND rfhazu = 2 AND rkond IN l_rkond. DATA: lv_date TYPE sy-datum. SORT it_vtbfinko BY bukrs rfha rfhazu dguel_kp. ** We are populating data from VTBFINKO,VTB_ASGN_RELAT and other tables

**8 - Generate Output data - First Loop begins VTBFINKO data


LOOP AT it_vtbfinko INTO wa_vtbfinko. ls-company_code = wa_vtbfinko-bukrs. ls-deal_number = wa_vtbfinko-rfha. ls-date = wa_vtbfinko-dguel_kp.

CLEAR lv_date. lv_date

wa_vtbfinko-dguel_kp.

CASE wa_vtbfinko-rkond. WHEN c_pkond_un. ls-pkond_un = wa_vtbfinko-pkond. "FC not utilized WHEN c_pkond. ls-pkond = wa_vtbfinko-pkond. "FC Utilized WHEN c_pkond_fco. ls-pkond_fco = wa_vtbfinko-pkond. "FC ovedrwan

WHEN c_pkond_fcc. ls-pkond_fcc = wa_vtbfinko-pkond. "FC Credit line ENDCASE.

READ TABLE it_vtb_asgn_relat INTO wa_vtb_asgn_relat WITH KEY company_code = wa_vtbfinko-bukrs deal_number = wa_vtbfinko-rfha. IF sy-subrc = 0. ls-relat_obj = wa_vtb_asgn_relat-relat_obj. ENDIF. READ TABLE it_vtb_asgn_limit INTO wa_vtb_asgn_limit WITH KEY relat_obj = wa_vtb_asgn_relat-relat_obj. IF sy-subrc = 0. ls-limit_chg_amount = wa_vtb_asgn_limit-limit_chg_amount. ls-limit_currency = wa_vtb_asgn_limit-limit_currency. ENDIF.

CLEAR : wa_vtb_asgn_relat, wa_vtb_asgn_limit. APPEND ls TO itab_out. CLEAR ls. ENDLOOP. * First loop ends CLEAR: ls. SORT it_vtb_asgn_pos BY relat_obj chg_date. ENDIF. **

**9 - Assign the out internal table to E_T_DATA for result set
e_t_data[] = itab_out[]. s_counter_datapakid = s_counter_datapakid + 1.

ELSE. RAISE no_more_data. ENDIF. ENDIF.

"First data package ?

ENDFUNCTION.

You might also like