Function Module extractor extracting as a Single Package?

Hi All,
I have created a generic function module extractor, which works fine, but extracts all the records in a single package. The default is set in SBIW as 50000 records. But right now I have only 2500 records. But I changed the packet size to 100 in my info package setting and also specified as 100 with in the function module.
But still I get all the data come as a single package of 2500. I want to make sure that this extractor will not create any problem in production, so I want to test the data packet size. Any suggestion. I have used he standard function module DATASIMPLE and I do setup I_MAXSIZE as 100 in the IMPORT parameter in the function and hav ethe following code in the function module...
         APPEND mgremp_stru to E_T_DATA.
          mseq = mseq + 1.
          if mseq = 100.
             G_COUNTER_DATAPAKID = G_COUNTER_DATAPAKID + 1.
             mseq = 0.
          endif.
    endloop.
    IF SY-SUBRC <> 0.
       RAISE NO_MORE_DATA.
    ENDIF.
    S_COUNTER_DATAPAKID = S_COUNTER_DATAPAKID + 1.
Any Suggestions?
Thx,
Alex.

Ramesh,
The simple truth is that what ever you define as a data structure for E_T_DATA should be exactly matching to your selections in the CUSOR. My scenario is way too trichy not just because too many sqls, but because of the nature of HR Tables. Same field will have two different values such as in one record SOBID refers to Org Unit, in the next record the same is Person and in the next record it is Position. So I should have the same field 3 times in a single record. But it is not possible. SO what I did was found 3 different fields whose length and type are same as what I need and selected them but inside my function module I manipulated with internal tables. So the extractor thinks I declare cursor for the same fields I defined in the data source (the value you use in E_T_DATA) and extract them in the FETCH. In the fetch all it checks internally is that whether the only the CURSOR selected fields are extracted , because you will update the E_T_DATA. I know this is little more than what I explained here, but this is the concept.
I am planning to have a weblog or a white paper published on this in a week or two.
If this idea helps assign points.
Goodluck,
Alex.

Similar Messages

  • Function Module not extracting records when InfoPackaged is executed

    Hi,
    I'm using a Function module for extracting data. The DataSource is working fine in RSA3 with a selection criteria. But when i schedule the infopackage with the same selections in the data selection tab, Its not getting me any records into BW. In the Details Tab i get the message "Error occurred in the data selection" . I guess there is a problem with the data selection. Pasted below is the code i'm using for extraction. Can anyone please let me know if there is any issue with the code.
    Also how do we pass on the value of I_MAXSIZE into the function module, the remaining parameters get the values from BW. And can anyone please explain me the concept of the "s_counter_datapakid" and when it should be incremented and where it should be located in the code?
    Thanks,
    AM
    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.
    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 'XXXXX'.
          WHEN OTHERS.
    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.
    Data transfer: First Call      OPEN CURSOR + FETCH
                   Following Calls FETCH only
    First data package -> OPEN CURSOR
        IF s_counter_datapakid = 0.
          g_first = 'X'.
    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 = 'BWLVS'.
            IF l_s_select-low <> '101' AND
               l_s_select-low <> '109'.
              RAISE invalid_movement_type.
            ELSE.
              MOVE-CORRESPONDING l_s_select TO r_im_bwlvs.
              APPEND r_im_bwlvs.
            ENDIF.
          ENDLOOP.
          LOOP AT s_s_if-t_select INTO l_s_select WHERE fieldnm = 'BEGDA'.
            MOVE-CORRESPONDING l_s_select TO r_im_begda.
            r_im_begda-low0(4) = l_s_select-low6(4).
            r_im_begda-low4(2) = l_s_select-low0(2).
            r_im_begda-low6(2) = l_s_select-low3(2).
            APPEND r_im_begda.
          ENDLOOP.
          LOOP AT s_s_if-t_select INTO l_s_select WHERE fieldnm = 'ENDDA'.
            MOVE-CORRESPONDING l_s_select TO r_im_endda.
            r_im_endda-low0(4) = l_s_select-low6(4).
            r_im_endda-low4(2) = l_s_select-low0(2).
            r_im_endda-low6(2) = l_s_select-low3(2).
            APPEND r_im_endda.
          ENDLOOP.
    *Select from table ltak into internal table i_ltak the following fields.
    *Condition: where bwlvs = import bwlvs & endat is >= import begda and
    <= import endda.
          READ TABLE r_im_begda INDEX 1.
          IF sy-subrc NE 0.
            RAISE blank_date_invalid.
          ELSE.
            IF r_im_begda-low IS INITIAL.
              RAISE blank_date_invalid.
            ENDIF.
          ENDIF.
          READ TABLE r_im_endda INDEX 1.
          IF sy-subrc NE 0.
            RAISE blank_date_invalid.
          ELSE.
            IF r_im_endda-low IS INITIAL.
              RAISE blank_date_invalid.
            ENDIF.
          ENDIF.
          IF NOT r_im_endda-low IS INITIAL
            AND r_im_begda-low > r_im_endda-low.
            RAISE invalid_date.
          ENDIF.
          r_endat-sign = 'I'.
          r_endat-option = 'BT'.
          r_endat-low = r_im_begda-low.
          r_endat-high = r_im_endda-low.
          APPEND r_endat.
    *-- Get data from the tables
          PERFORM get_data.
    *-- Populate the extract structure with data
          PERFORM write_data.
    *-- Fill Export able with the extracted data
          e_t_data[] = i_zbipicprd2[].
        ENDIF.                             "First data package ?
        IF g_first EQ 'X'.
          CLEAR g_first.
        ELSE.
    *-- This is important to prevent endless loop.
          RAISE no_more_data.
        ENDIF.
    s_counter_datapakid = s_counter_datapakid + 1.
      ENDIF.              "Initialization mode or data extraction ?
    ENDFUNCTION.

    The load is running successfully but its not fetching any records into BW.
    In the Status tab, Step by Step Analysis the following three steps are red:
    Does selectable data exist in the source system? (Red)
    Data selection successfully started ? (Red)
    Data selection successfully finished ? (Red)
    and the below is the Analysis
    Diagnosis
        The data request was a full update.
        o   In this case, the corresponding table in the source system does not
                contain any data.
        o   System Response
                Info IDoc received with status 8.
                Procedure
    Check the data basis in the source system.
    But i have data in R/3 and i'm able to extract it using RSA3

  • Function Module in a Generic Function Module Extractor

    I want to use a generic function module (ZFM_CONNECTION_DETAIL) in a Generic Function Module based Extractor.
    After Creating, I have checked it in RSA3... Data is showing properly on the Extractor Check.
    And replicated on BW side, after triggering the extractor using infopackageu2026 only one record is coming on the target side (BW).
    And one job is running endless on the source system.
    Generic extractor on the normal code is working properly on both sides.
    But problem occurs while I was using Function Module in the Generic function Module extractor.
    Waiting for a Reply with solution...........
    Hi Siegfried Szameitat,
    I have searched a lot to find out the solution of my Question (Problem). But there is no solution for the problem I have.
    Please let me to find out a proper solution of my issue....
    Thanks

    FUNCTION zcrm_questionnaire.
    Its a full Load...
    Codes are as followed..........
      DATA:lv_times     TYPE i.
      DATA:lv_datapakid TYPE numc4.
      CLEAR:lv_datapakid,lv_times .
      STATICS: s_s_if TYPE srsc_s_if_simple,
               sd_no_more_data  TYPE flag.
      DATA: l_s_select TYPE srsc_s_select.
      DATA :  s_counter_datapakid LIKE sy-tabix,
              s_cursor TYPE cursor.
      RANGES :  date  FOR  zresult_lt-date.
      DATA: lv_count TYPE i VALUE 1.
      IF i_initflag = sbiwa_c_flag_on.
    Initialization: check input parameters
                    buffer input parameters
                    prepare data selection
    Check InfoSource validity
        CASE i_dsource.
          WHEN 'ZCRM_QUESTIONNAIRE'.
          WHEN OTHERS.
            IF 1 = 2. MESSAGE e009(r3). ENDIF.
            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.
        s_s_if-requnr    = i_requnr.
        s_s_if-dsource   = i_dsource.
        s_s_if-maxsize   = i_maxsize.
        APPEND LINES OF i_t_fields TO s_s_if-t_fields.
      ELSE.                 "Initialization mode or data extraction
        IF NOT sd_no_more_data IS INITIAL.
          RAISE no_more_data.
        ENDIF.
        LOOP AT s_s_if-t_select INTO l_s_select .
          MOVE-CORRESPONDING l_s_select TO date.
        ENDLOOP.
        DATA : v_questionire  TYPE  crm_svy_db_sid.
        DATA : itab_questionire TYPE zsurveyid.
        DATA : e_tt_data_get TYPE  zresult_lt OCCURS 10.
        v_questionire = 'CALL CENTER'.
        APPEND v_questionire TO itab_questionire.
        v_questionire = 'METER INSTALLATION TEAM'.
        APPEND v_questionire TO itab_questionire.
        v_questionire = 'METER READING & BILLING'.
        APPEND v_questionire TO itab_questionire.
        v_questionire = 'NO SUPPLY'.
        APPEND v_questionire TO itab_questionire.
        v_questionire = 'CASH COLLECTION CENTER'.
        APPEND v_questionire TO itab_questionire.
        v_questionire = 'STREET LIGHT'.
        APPEND v_questionire TO itab_questionire.
        v_questionire = 'CONSUMER CARE CENTER'.
        APPEND v_questionire TO itab_questionire.
        v_questionire = 'WEBSITE'.
        APPEND v_questionire TO itab_questionire.
        DATA : counter TYPE i,
              high  LIKE sy-datum,
               low LIKE sy-datum.
        CONCATENATE
        l_s_select-high+6(4)
        l_s_select-high+3(2)
        l_s_select-high+0(2)
        INTO
        high.
        CONCATENATE
        l_s_select-low+6(4)
        l_s_select-low+3(2)
        l_s_select-low+0(2)
        INTO
        low.
        BREAK-POINT.
       do i_maxsize times.
        CALL FUNCTION 'ZCRM_SURVEY_REPORTING'
          EXPORTING
            e_date_frm    = low
            e_date_to     = high
            e_questionire = itab_questionire
          CHANGING
            it_result     = e_tt_data_get.
        IF sy-subrc IS INITIAL.
          e_t_data[] = e_tt_data_get[].
          APPEND e_t_data.
        ELSE.
          EXIT.
        ENDIF.
         sd_no_more_data = 'X'.
      ENDIF.              "Initialization mode or data extraction ?
    ENDFUNCTION.
    lk

  • How to Function module extractor

    Can anybody give me a step by step procedure to do a function module extractor ?
    Like the steps that I need to perform even before i start writing my code
    Thanks
    Shruti

    Dear Shruthi,
    Do a Search in SDN .you get lot of threads for FM Extraction ...
    The easiest way to work out with Function Module is to copy the standard one and modify according to your reqirement.
    The standard one is RSAX_BIW_GET_DATA_SIMPLE .
    Dont forget to copy the Function grp RSAX into a custom defined Grp and Modify the Ranges options as per ur req.
    and in Function module, in Sourcecode and Tables, Do modify the E_T_data with ur Generic datasource ,make sure u also modify the select statements within the sourcecode. If you have an idea on ABAP its really easy to work out.
    And regarding the creation of Datasource.
    Its really Simple.
    Goto RSo2.
    Give the name of Datasource.
    Give the Fm name and Extract Struc ( name of D.S only).
    Save and Generate.
    thats it.
    Dont forget to assign points.Its a way of saying thanks.
    Thanks,
    Krishna

  • DB table for function module extractor

    I would really appreciate any comment or suggestion about this topic: Function module based extraction. I opened this thread on the BC & Extractors forum, but unfortunately none has given me any feedback yet.
    Thanks & Regards, Davide

    So none see any advantage with storing the extracted data in a materialized DB table, before transmitting the records to BW. Can I infer it's probably not a good idea wasting time with an additional massive write operation?
    Cheers, Davide

  • Creating BW Function module to extract R3 Function module data.

    Could you tell me how to create a BW Function Module to Extract data from  R/3 Function module?.
    Also, the BW function module needs to pass a date/time filter to R/3 function module basis which the R/3 function module passes the date/time restricted data to BW function module.
    Thanks,
    Gautam

    You will have to create a function module in R/3 and then call the same in BW using the RFC call function option.
    Please do not raise separate threads for each question - you have asked the same question in another post of yours..
    bw extraction using function module
    http://tinyurl.com/lwhtk8
    this will give you an idea on how you can achieve this.

  • Function module that runs for every info package

    Hi,
    Please can you give me name of function module that runs for every info package irrespective of data source.
    Cheers,
    Reddy.

    use below function module
    RSSM_SDL_START_INFOPACKAGE

  • Function Module Extractor with Internal Table

    Hi All,
    I have a need to extract records from a complex SQL Statements, so I will be using different SQL Statements and merging the results in to a single internal table. In the function modules what will happen if I do not use cursor WITH HOLD option, (I know it maintains the cursor position) and what if I directly load into E_T_DATA  from my internal table. How this will affect the datapackage size?
    In the future I will have records beyond 1 million and I am concerned to send all the 1 million record in one package rather than multiple packages during extraction.
    Please give a solution if you have come acroos this kind of situation with your development.
    Thanks,
    Alex.

    Alex,
    I do not see why the complexity of ABAP statements should make you change the data processing logic proposed by SAP by way of the sample Function module.  
    It appears to me that you are changing something knowing fully well its implications and then trying to find a solution for it.
    Good Luck!
    Mathew.

  • PROBLEM in function module extractor

    Hi ,
    i m facing a problem in creating a function module as extractor in srm but its not working plz letme know the way i can create the zfunction module as extrator.
    i created a datasource ZSRM_CS in which i m using BBP_PDS_CND as extraction structure and Z_BIW_GET_DATA_SIMPLE as zfunction module
    but even wen i use rsa3 in debug mode its not stoping and gives error
    ERROR6 plz letmme know the problem.
    i copied the standard module RSAX_BIW_GET_DATA_SIMPLE .
    n hide the irrelvant things. tell me y its not stoping in debug mode in rsa3
    Thnx
    Regards

    Thnx for ur concern ...but i have already mentioned. my code goes llike this.plz have a luk
    FUNCTION Z_BIW_GET_DATA_SIMPLE.
    ""Local Interface:
    *"  IMPORTING
    *"     VALUE(I_REQUNR) TYPE  SRSC_S_IF_SIMPLE-REQUNR OPTIONAL
    *"     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 TYPE  ZT_BBP_PDS_CND OPTIONAL
    *"  EXCEPTIONS
    *"      NO_MORE_DATA
    *"      ERROR_PASSED_TO_MESS_HANDLER
    Example: DataSource for table SFLIGHT
      TABLES: ZQUOTATION.
    Auxiliary Selection criteria structure
      DATA : L_S_SELECT TYPE SRSC_S_SELECT.
      DATA : GIT_QTN type table of ZQUOTATION with header line .
      DATA : GIT_TAB type table of BBP_PDS_CND with header line .
    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_CARRID  FOR SFLIGHT-CARRID,
             L_R_CONNID  FOR SFLIGHT-CONNID.
    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_SFLIGHT_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'.
       select * from ZQUOTATION
                into table GIT_QTN .
       LOOP AT GIT_QTN .
        CALL FUNCTION 'BBP_PDCND_GETDETAIL'
          EXPORTING
            i_p_guid                      = GIT_QTN-GUID1
           I_P_KIND                      = 'B'
           I_OBJECT_TYPE                 = GIT_QTN-OBJECT_TYPEH
         IV_VERSION_TYPE               = ' '
            iv_header_guid                = GIT_QTN-HEADER
          IV_WITH_DELETED_RECORDS       = ' '
         IMPORTING
           ET_CONDITIONS                 = GIT_TAB
          E_COM                         =
        TABLES
          E_T_DATA                      =
          MOVE-CORRESPONDING GIT_TAB TO E_T_DATA.
        ENDLOOP.
         LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'CARRID'.
           MOVE-CORRESPONDING L_S_SELECT TO L_R_CARRID.
           APPEND L_R_CARRID.
         ENDLOOP.
         LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'CONNID'.
           MOVE-CORRESPONDING L_S_SELECT TO L_R_CONNID.
           APPEND L_R_CONNID.
         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 SFLIGHT
                                  WHERE CARRID  IN L_R_CARRID AND
                                        CONNID  IN L_R_CONNID.
       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.
    plz letme know where i m wrong in code,
    wt my code is doing its picking the GUID! and header from view zquation and through fm 'BBP_PDCND_GETDETAIL' its returning et conditions whichi have to pass to data source .
    Thnx

  • Functional module extractor for INDX

    Help to write please an optimum code of the functional module for an extractor from table INDX

    While in the functional module on the basis of RSAX_BIW_GET_DATA_SIMPLE ' has made the following
    * Data transfer: First Call      OPEN CURSOR + FETCH
    *                Following Calls FETCH only
    * íà÷àëî îáðàáîòêè
    * First data package -> OPEN CURSOR
        IF S_COUNTER_DATAPAKID = 0.
    delete from zdbasetable1.
    import inttable1 inttable2 inttable3 from database INDX(IM) ID 'IDENT'.
    loop at inttable1.
      move-corresponding inttable1 to zdbasetable1.
      modify zdbasetable1.
      clear  zdbasetable1.
    endloop.
          OPEN CURSOR WITH HOLD S_CURSOR FOR
          SELECT (S_S_IF-T_FIELDS) FROM zdbasetable1.
        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.
    But it would be desirable, without use database table - zdbasetable1

  • Functional Module Extractor not pulling all the record on BW side

    Hi,
    i have written a FM extractor to pull data from CDHDR and CDPOS table. the Records count shows on RSA3 is more than 3,00,000 but while pulling it on BW side it brings only 41,000  Around records.
    I steps i have taken is -
    tried setting and resetting the package side in Info package.
    Tried putting the default package size to 50K in FM setting
    but nothing is working.
    It seems like the pacet size is not incrementing in the code. i have tired to find ou the fault but coult not and RSA3 is working fine.
    can anyone please suggest a correct piece of code or find out where exactly the fault is?

    Vikrant,
    The structure of your generic extractor function module should be something like:
    If initialisation
      Store parameters, clear packet count
    Else
      If first packet
        Create cursor
      Endif
      Read block of records from cursor
      If cursor returns no more records
        Raise NO_MORE_DATA exception
      Endif
      Process records from cursor and output
      Add one to packet count
    Endif
    This function module code can get called repeatedly.  Possibly you are only extracting data for the first packet?
    Mark

  • Fields inclusion for Function Module Extractor

    Hi Gurus,
    I am planning to design a Function Module based extractor. This Function modules is supposed to extract data from approx 10 different tables. Most of the tables have 5 or more fields of it to be pulled in.
    However, there are also few tables, which have got just a single field or just 2 fields.
    As a design, is it a good idea to include the logic of extracting these fields in the Function module? or
    Is it recommended to have these fields included via a user exit, once the datasource is developed?
    I appreciate all the help

    Thanks Dash I have assigned the points.
    I guess you are recommending the User Exit approach as mentioned in my original post where few of my tables have got just a single field or just 2 fields.
    Let me know please.
    Other SDNers,
    Let me have your thoughts too

  • Function Module - Generic Extraction : Not able to solve

    Hi Guys,
           I have created a function module. The function module is working well. But when i start the extraction. It does not stops. It starts loading same data package again and again. It is becoming an endless loop. I have ot ask basis person to kill that job. He inturn has to restart SAP r/3 server. This has become a big issue. Guys please help I am attaching the code for your reference
    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,
              S_CURSOR1 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 .
         OPEN CURSOR WITH HOLD S_CURSOR1 FOR
          SELECT (S_S_IF-T_FIELDS)
          FROM MBEW WHERE YSALES~MATNR
              AND BWKEY = YSALES~WERKS.
        select  BUKRS
                ZYEAR
                ZMONTH
                WERKS
                MATNR
                SLSCAT
                KNDNR
                SPART
                MATKL
                MENGE
                DMBTR
                VV702
                VV703
                VVADS
                VV704
                VV731
                INTO
                CORRESPONDING FIELDS OF table I_YSALES
                PACKAGE SIZE S_S_IF-MAXSIZE
                FROM YSALES
                WHERE ZYEAR IN L_R_ZYEAR
                AND   ZMONTH IN L_R_ZMONTH.
       ENDSELECT.
            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
                 PACKAGE SIZE S_S_IF-MAXSIZE
                 FROM MBEW
                 FOR ALL ENTRIES IN I_YSALES
                 WHERE MATNR = I_YSALES-MATNR
                 AND   BWKEY = I_YSALES-WERKS.
          ENDSELECT.
        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.
       IF SY-SUBRC <> 0.
         CLOSE CURSOR S_CURSOR.
          RAISE NO_MORE_DATA.
        ENDIF.
       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.
        S_COUNTER_DATAPAKID = S_COUNTER_DATAPAKID + 1.
      ENDIF.              "Initialization mode or data extraction ?
    ENDFUNCTION.

    Hi Baljit,
    This is a dangerous way of extracting your data.
    I am not surprised that it has become an endless loop.
    You have to use the cursor and the fetch statement and after the fetch statement you have to use a subreturncode
    to wonder if the fetch statement did get any data.
    if not use the folowing statements.
    close cursor s_cursor.
    raise no_more_data.
    In your situation the select statement will start every time from the first record in the table ysales because you don't use the cursor. By using the cursor and the fetch statement, the fetch statement will start from the cursor everytime it calls the function module.
    I guess this function module is part of an endless loop and will be exited at the moment that the function module returns with raise no_more_data. (in other words, the cursor is at the last record of the table ysales, so no more records will be found)
    Hope this will help
    Maarten

  • Enhancing Function Module Extractor

    Is it possible to enhance an extract structure which is using a function module as an extractor.
    Basically I want to extract some more fields which the function module is not extracting. Can someone let me know how to do this.
    Best Regards,
    James.

    hi James,
    is it generic extractor or business content ?
    if generic extractor, since it's our own, you can add field(s) in extract structure and add code in the function module to populate these fields.
    go to transaction RSO2, and you will see the extract structure, use SE11 to 'change' the structure and activate. then add code in function module, use SE37.
    if business content, RSA6, choose your datasource and double click the extract structure and click 'append structure', add field(s) with prefix ZZ. activate the structure.
    and populate the field(s) via user exit ZXRSAU01 (for transaction data).
    hope this helps.

  • Function Module Extractor with Delta Functionality

    Hi Friends,
         I have to extract the entire data of CDPOS table in R/3 , as its a cluster table I am unable to build a view, I am planning to go for FM extraction, Could someone help me as how to build it with Delta Functionality.
    I think I need to develop the Datasource, with Extract Structure,( Do I need to create a Structure in SE11)  Please help me out .
    Thanks,
    Krish

    Hi,
    you can either use an existing structure or else create one on your own. (SE11).
    The DeltaHandlig fairly easy.
    When having finished the extractor (FunctionModule, Structur and DatasSource), go to the "generic Delta" button and select the relevant field.
    The Generic Delta and its DeltaPointer is managed within the DeltaQueue (RSA7) and works more or less like a selection. Don't think too hard about it in your function module except taht you need to select by this field in your FM.
    Did that come clear?
    hth
    Cheers
    Sven

Maybe you are looking for

  • While Import support package getting error in R/3

    Hi All, I am getting one error following error while importing support package in R/3. Open data extraction requests The system has found a number of open data extraction requests.These should be processed before starting the object import process, a

  • OSX DocK VS Windows 7 Super Bar

    As programs open in Windows 7 they are represented by one icon in the Super Bar. As the pointer is passed over the icon - small versions of the open application windows are displayed. When the mouse pointer is placed on top of one of the windows it s

  • SmartView Ad Hoc Query & Using an Input Tab

    We have SmartView ad hoc query files that contain multiple sheets. We'd like to have an "input tab" that we use to set POV values for all the reports (i.e. currency & month). I tried putting an Excel formula wh/ referenced the cell on the input tab c

  • Multi Select Prompt in BI Publisher

    Hi All, Is it possible to create a multi select Prompt in OBIP which is similar to OBIEE multi select prompt? Default multi select prompt given in OBIP is not user friendly. By any means If any one has created much user friendly multi select prompt p

  • Migration from 8.3 to 11.1.2.1

    We are planning to migrate from Hyperion performance suite 8.3 to Oracle EPM 11.1.2.1 through Migration utility. But we have 2 different source system. is that possibel to migrate 2 source system into one target system. 2 sources system uses the orac