cancel
Showing results for 
Search instead for 
Did you mean: 

Delta for custom datasource not working

Former Member
0 Kudos

Hi,

I've created one FM (using RSAX_BIW_GET_DATA_SIMPLE) which is working fine. The delta field I'm using is timestamp.

Based on this FM, I created a custom datasource which is also working fine in RSA3. I initialized this datasource which brought required data into BW.

The issue is when I change few records in source system, the extractors works fine and brings delta records in RSA3, but when I trigger delta load in BW it brings 0 records??

Any idea?

I've left upper and lower safety intervals as blank, could this be the issue? But it works in RSA3 even if they are left blank.

Regards,

Vikrant.

Accepted Solutions (0)

Answers (5)

Answers (5)

Former Member
0 Kudos

Hi,

If the delta extraction are seen in RSA3 and even data is not extracting to BW, then there is some routines / conditions in update/transfer rules. this will be the case if data is avail in PSA.

if your are using ODS object then check the update in update rules for the type of updation addition/overwrite.

Former Member
0 Kudos

Can anyone help me with this? Below is my code, it works fine in RSA3 but everytime BW brings in 0 records. I'm unable to find the issue, where am I going wrong.

I even tried to generate spool file (by using 'write' statements after every important step) and spool file also showed data being picked up. But BW doesn't bring anything.


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

*Following loop reads the generic delta timestamp field TIMESTAMP value which
*is used to extract only those records which are updated after the last delta
      LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'TIMESTAMP'.
        l_time_selection = L_S_SELECT-LOW.
      ENDLOOP.

      LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'TCODE'.
        MOVE-CORRESPONDING L_S_SELECT TO L_R_TCODE.
        APPEND L_R_TCODE.
      ENDLOOP.

      LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'PTYPE'.
        MOVE-CORRESPONDING L_S_SELECT TO L_R_PTYPE.
        APPEND L_R_PTYPE.
      ENDLOOP.

* Select Credit Memo records which are updated after the last delta load.
      REFRESH lt_itab.
      SELECT * FROM ZMEM_H INTO CORRESPONDING FIELDS OF TABLE lt_itab
      WHERE
          TIMESTAMP_CH >= l_time_selection AND 
          TR_CODE IN L_R_TCODE AND
          PR_TYPE IN L_R_PTYPE.



      OPEN CURSOR WITH HOLD S_CURSOR FOR
      SELECT * FROM ZCREDIT_MEMO_H
      FOR ALL ENTRIES IN lt_itab
                         WHERE GUID   = lt_itab-guid.

    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 lt_e_t_data
               PACKAGE SIZE S_S_IF-MAXSIZE.
    IF SY-SUBRC <> 0.
      CLOSE CURSOR S_CURSOR.
      RAISE NO_MORE_DATA.
    ENDIF.

* Perform following steps, once all the relevant data has been fetched.
    LOOP AT lt_e_t_data.
    CLEAR wa_e_t_data.

      MOVE-CORRESPONDING lt_e_t_data TO wa_e_t_data.
        READ TABLE lt_itab WITH KEY guid = wa_e_t_data-GUID.
          IF sy-subrc = 0.
            wa_e_t_data-NET_AMOUNT   = lt_itab-NET_AMOUNT.
            wa_e_t_data-EXTERNAL_ID  = lt_itab-capgn_id.
          ENDIF.

      APPEND wa_e_t_data TO E_T_DATA.
    ENDLOOP.

    REFRESH lt_e_t_data.


    S_COUNTER_DATAPAKID = S_COUNTER_DATAPAKID + 1.

  ENDIF.              "Initialization mode or data extraction ?


ENDFUNCTION.

Would really appreciate any kind of help.

Regards,

Vikrant.

Former Member
0 Kudos

Hi,

I did replicate and not changing anything when the load is running.

Infact the initialization is done successfully. My question is does it take time for delta records for being picked up and brought up in BW?

E.g. I set Lower Safety Interval as 3600 (seconds) and initialized at 9:00 am. Later I changed few documents at say 11:00 am, then if I trigger delta load, would changed/modified documents be picked up?

In my case, the datasource is not picking up any records even if I change after few hours of previous delta load. Though the extractor picks correct records everytime I test in RSA3.

Regards,

Vikrant.

Former Member
0 Kudos

Hi

As delta is set for 3600 seconds, changed/modified records will be picked up only after 11.00am+3600 seconds in time stamp

If you run delta after 12.00 it should pick up the delta

Regards

N Ganesh

Former Member
0 Kudos

Hi

That might be an issue .......

Have you changed the data records in source system when generic delta is running

Avoid changes to source system when your running delta as this may cause inconsistency when writing for delta tables

Regards

N Ganesh

Former Member
0 Kudos

hi,

may be replication error will be there. i don't no exactly. once again replicate that

data source in BW side. do the delta extraction. hop this will work.

regards

harikrishna N