Skip to Content
0
May 16, 2011 at 10:30 AM

Unable to get delta observation,

51 Views

i am trying get delta records from ztable based on time stamp with 900sec lower timestamp,,,,,,,,,,

please correct my code,

  • Example: DataSource for table SFLIGHT

TABLES: zsales_order1.

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

  • Select ranges

RANGES: l_r_zvbeln FOR zsales_order1-zvbeln,

l_r_zerdat FOR zsales_order1-zerdat,

l_r_zerzet FOR zsales_order1-zerzet,

l_r_ztimestamp FOR zsales_order1-ztimestamp.

DATA : startdate TYPE sy-datum,

starttime TYPE sy-uzeit,

enddate TYPE sy-datum,

endtime TYPE sy-uzeit,

timestamp TYPE tzonref-tstamps.

  • 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 'ZSALES_ORDER_FUN1'.

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 = 'ZVBELN'.

MOVE-CORRESPONDING l_s_select TO l_r_zvbeln.

APPEND l_r_zvbeln.

LOOP AT s_s_if-t_select INTO l_s_select WHERE fieldnm = 'ZERDAT'.

MOVE-CORRESPONDING l_s_select TO l_r_zerdat.

APPEND l_r_zerdat.

LOOP AT s_s_if-t_select INTO l_s_select WHERE fieldnm = 'ZERZET'.

MOVE-CORRESPONDING l_s_select TO l_r_zerzet.

APPEND l_r_zerzet.

LOOP AT s_s_if-t_select INTO l_s_select WHERE fieldnm = 'ZTIMESTAMP'.

timestamp = l_s_select-low.

CONVERT TIME STAMP timestamp

TIME ZONE sy-zonlo INTO DATE startdate TIME starttime.

timestamp = l_s_select-high.

CONVERT TIME STAMP timestamp

TIME ZONE sy-zonlo INTO DATE enddate TIME endtime.

l_r_zerdat-low = startdate.

l_r_zerdat-sign = l_s_select-sign.

l_r_zerdat-option = l_s_select-option.

l_r_zerdat-high = enddate.

APPEND l_r_zerdat.

l_r_zerzet-low = starttime.

l_r_zerzet-sign = l_s_select-sign.

l_r_zerzet-option = l_s_select-option.

l_r_zerzet-high = endtime.

APPEND l_r_zerzet.

ENDLOOP.

ENDLOOP.

ENDLOOP.

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 zvbeln

zerdat

zerzet

zland1

zkunnr

zlgort

zposnv

zmatnr

znetpr

waerk

zkpein

zkmein

zarktx

zstadat

zaedat

zaezet

ztimestamp FROM zsales_order1 WHERE zvbeln IN l_r_zvbeln

AND zerdat IN l_r_zerdat

AND zerzet IN l_r_zerzet

AND (

( zerdat >= startdate AND ( zerzet >= starttime OR

( zerdat <= enddate AND zerzet <= endtime ) ) ) OR

( zaedat >= startdate AND ( zaezet >= starttime OR

( zaedat <= enddate AND zaezet <= endtime ) ) )

).

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.

thanks in advance