Sample Code FM Based Extractor
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 *"----------------------------------------------------------------------
* 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.
* 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.
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
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.
ENDFUNCTION.