on 10-15-2007 11:43 PM
Hello Friends I created a function module to generate a extractor, but i am getting this error SRSC_S_IF_SIMPLE is UNKNOWN. Kindly let me know what i need to change in Funtion module Function Pool to make it work.
Please tell me your email so I can send the screen shots for the Tabs in MY FM.
Please help me with some minor correction in code to make it work.
Extractor Logic is simple: Pick up N fields from KNA1 Customer master and then go to KNB1 to pick up zterm and akont where KUNNR -KNA1 = KUNNR - KNB1 AND KUNNR-ERDAT = KNB1-ERDAT
My code is as below.
FUNCTION Z_CUSTOMER.
*"----
""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 ZBW_SFLI001_DS 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 ZBW_SFLI001_DS OPTIONAL
*" EXCEPTIONS
*" NO_MORE_DATA
*" ERROR_PASSED_TO_MESS_HANDLER
*"----
************************************************************************
*Soniya KAPOOR
*
This code is an example of providing data to a generic extractor
based on a function module.
*
Our generic extractor uses the ZBW_SFLI001_DS table as its extract
structure. The ZCALWEEK and ZKUNNR fields will have selections
enabled in the generic extractor.
*
this structure will be used to decode selections passed from the
extractor
DATA: l_s_select TYPE SRSC_S_SELECT.
The following static variables are populated in the first call
(the initialization call) to the extractor and then are used in
subsequent calls.
the S_S_IF structure is used to hold incoming parameters.
STATICS: s_s_if TYPE SRSC_S_IF_SIMPLE,
a simple counter
s_counter_datapakid LIKE SY-TABIX,
a database cursor that will read and return records
s_cursor TYPE CURSOR.
Select ranges
When the function module is called for the first time the
I_T_SELECT table holds any selections from the infopackage.
We will extract those selections and store them in these
ranges. We will then use these ranges to limit the amount
of data returned to BW.
RANGES: l_r_zcalweek FOR ZBW_SFLI001_DS-ZCALWEEK,
l_r_ZKUNNR FOR ZBW_SFLI001_DS-ZKUNNR.
The extractor will have a selection for calendar week but the
data is stored in the KNA1 table by calendar day. We'll include
logic later in the function module to take the incoming calendar
week selections and create calendar day selections. We'll put
those calendar day selections in this range and then use it
to limit the amount of data coming from KNA1.
RANGES: l_r_ERDAT FOR KNA1-ERDAT.
Helper variable if we need to loop on week ranges
DATA: zweek LIKE ZBW_SFLI001_DS-ZCALWEEK.
Helper internal table to hold KNA1 records that match our
selections
DATA: ZKNA1 LIKE KNA1 OCCURS 0 WITH HEADER LINE.
Helper internal table to hold KNB1 records that match our
selections
DATA: ZKNB1 LIKE KNB1 OCCURS 0 WITH HEADER LINE.
Helper internal table to accumulate data from KNA1
DATA: zitab LIKE ZBW_SFLI001_DS OCCURS 0 WITH HEADER LINE.
Now we are getting into the real logic of the function module.
The function module is called several times; once for an
initialization and then several more times (once for each data
packet) until the function module signals that there is no
more data available.
The I_INITFLAG is an IMPORT parameter that indicates if this
is the first call. If so, validate the datasource and put
away the other initialization fields into static variables
for use in later calls.
IF I_INITFLAG = SBIWA_C_FLAG_ON. "Step (A)
This should never happen, but just in case.
CASE I_DSOURCE.
WHEN 'ZBW_SFLI001_DS'.
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.
Make a static copy of the selection field ranges
APPEND LINES OF I_T_SELECT TO s_s_if-t_select. "Step (B)
This grabs a copy of the IMPORT parameters into static variables.
These static variables can be used in later calls to the function
module.
s_s_if-requnr = I_REQUNR. "Step (B)
s_s_if-dsource = I_DSOURCE. "Step (B)
s_s_if-maxsize = I_MAXSIZE. "Step (B)
The I_T_FIELDS table holds the fields that the extractor is
expecting. You can use this field list to minimize the
fields read from database tables.
APPEND LINES OF I_T_FIELDS TO s_s_if-t_fields. "Step (B)
ELSE. "Initialization mode or data extraction ?
This batch of code is for later calls into the function module
(to gather and return data).
If we haven't returned any data packets yet (this is the first
function module call asking for data packets), then gather up
the necessary data.
IF s_counter_datapakid = 0. "Step (C)
"Begin of Step (D)
In the initialization call we copied the incoming I_T_SELECT
table (which holds infopackage selections) into the S_S_IF
static variable. Now interrogate those selections to create
ranges that will be used to restrict the database records read.
We know (because we defined the extractor) that the only two fields
that can have selections are ZCALWEEK and ZKUNNR.
LOOP AT s_s_if-t_select INTO l_s_select WHERE FIELDNM = 'ZCALWEEK'.
MOVE-CORRESPONDING l_s_select TO l_r_zcalweek.
APPEND l_r_zcalweek.
ENDLOOP.
LOOP AT s_s_if-t_select INTO l_s_select WHERE FIELDNM = 'ZKUNNR'.
MOVE-CORRESPONDING l_s_select TO l_r_ZKUNNR.
APPEND l_r_ZKUNNR.
ENDLOOP.
The generic extractor has selections on calendar week, but our data
(in the KNA1 table) is captured by flight date. So we need to
take our calendar week selections and convert them into flight
date selections.
The ZCALWEEK range could be a single week, it could be a range
of weeks, or it could be several of both.
LOOP AT l_r_zcalweek.
handle either single values (EQ) or ranges (BT)
CASE l_r_zcalweek-option.
WHEN 'EQ'.
convert the low value to a date range
CALL FUNCTION 'WEEK_GET_FIRST_DAY'
EXPORTING
WEEK = l_r_zcalweek-low
IMPORTING
DATE = l_r_ERDAT-low
EXCEPTIONS
WEEK_INVALID = 1
OTHERS = 2.
l_r_ERDAT-high = l_r_ERDAT-low + 7.
l_r_ERDAT-sign = 'I'.
l_r_ERDAT-option = 'BT'.
APPEND l_r_ERDAT.
when 'BT'.
zweek = l_r_zcalweek-low.
WHILE zweek <= l_r_zcalweek-high.
convert the low value to a date range
CALL FUNCTION 'WEEK_GET_FIRST_DAY'
EXPORTING
WEEK = zweek
IMPORTING
DATE = l_r_ERDAT-low
EXCEPTIONS
WEEK_INVALID = 1
OTHERS = 2.
l_r_ERDAT-high = l_r_ERDAT-low + 7.
l_r_ERDAT-sign = 'I'.
l_r_ERDAT-option = 'BT'.
APPEND l_r_ERDAT.
zweek = zweek + 1.
ENDWHILE.
ENDCASE.
ENDLOOP.
"End of Step (D)
Now it's time to gather the data and populate our ZBW_SFLI001_DS
table. But first let's make sure we don't have any residual data
already in the table for this same request identifier.
For example, if we use RSA3 to test the extractor, the request
identifier is always TEST. Let's make sure we don't have any
left over from previous tests.
DELETE FROM ZBW_SFLI001_DS "Step (E)
WHERE ZREQUNR = s_s_if-requnr.
Now lets go get data from the KNA1 table that meets our selection
criteria.
SELECT * FROM KNA1 "Step (F)
INTO TABLE ZKNA1
WHERE ERDAT IN l_r_ERDAT
AND KUNNR IN l_r_ZKUNNR.
Now get all matching KNB1 records (we need these to calculate
our expected revenue)
SELECT * FROM KNB1 "Step (F)
INTO TABLE ZKNB1
FOR ALL ENTRIES IN ZKNA1
WHERE KUNNR = ZKNA1-KUNNR
AND ERDAT = ZKNA1-ERDAT.
"Begin of Step (G)
now take the KNA1 records and build records to send back to BW
LOOP AT ZKNA1.
set the request identZfier
zitab-zrequnr = s_s_if-requnr.
set the calendar week based on the flight date
CALL FUNCTION 'DATE_GET_WEEK'
EXPORTING
DATE = ZKNA1-ERDAT
IMPORTING
WEEK = zitab-zcalweek
EXCEPTIONS
DATE_INVALID = 1
OTHERS = 2.
set class
zitab-ZKUNNR = ZKNA1-KUNNR.
set total passengers
zitab-ZREGIO = ZKNA1-REGIO.
accumulate revenue
zitab-ZFAKSD = ZKNA1-FAKSD.
look up the matching KNB1 record to get expected revenue
READ TABLE ZKNB1 WITH KEY KUNNR = ZKNA1-KUNNR
ERDAT = zKNA1-ERDAT.
IF sy-subrc = 0.
zitab-ZZTERM = ZKNB1-ZTERM.
ELSE.
zitab-ZZTERM = 'NULL'.
ENDIF.
set currency key
zitab-ZAKONT = ZKNB1-AKONT.
*
accumulate baggage weight
zitab-ztotbagwt = zKNA1-luggweight.
*
set baggage weight unit
zitab-zwtunit = zKNA1-wunit.
*
this will accumulate key figures that have the same characteristics
COLLECT zitab.
ENDLOOP.
"End of Step (G)
finally, write the accumulated, summarized records to the database
INSERT ZBW_SFLI001_DS FROM TABLE zitab. "Step (H)
open a database cursor to gather the data from the database
table and pass it back to BW. Here the S_S_IF-T_FIELDS
internal table (copied from the I_T_FIELDS internal table
passed to this function module by BW) is used to make sure we
only get the fields that BW actually needs.
OPEN CURSOR WITH HOLD s_cursor FOR "Step (I)
SELECT (S_S_IF-T_FIELDS) FROM ZBW_SFLI001_DS
WHERE zrequnr = s_s_if-requnr.
ENDIF. "First data package ?
This code actually returns a packet of data to BW. It gets the
next packet of data from our database table (using the cursor)
and puts the data into the E_T_DATA internal table. This
internal table is then handed back to BW as a packet of data.
FETCH NEXT CURSOR s_cursor "Step (J)
APPENDING CORRESPONDING FIELDS
OF TABLE E_T_DATA
PACKAGE SIZE S_S_IF-MAXSIZE.
If there is no more data, close the cursor, remove the data
from the ZBW_SFLI001_DS table (since we don't need it anymore)
and signal BW that there is no more data.
IF SY-SUBRC <> 0. "Step (K)
CLOSE CURSOR S_CURSOR. "Step (L)
DELETE FROM zbw_sfli001_ds "Step (M)
WHERE zrequnr = s_s_if-requnr.
RAISE NO_MORE_DATA. "Step (N)
ENDIF.
accumulate our packet counter
s_counter_datapakid = s_counter_datapakid + 1. "Step (O)
null
Error "SRSC_S_IF_SIMPLE is UNKNOWN " is generally due to SRSC is not active as said by Pravender . To get rid of this first copy the Function group "RSAX" into your custom 'z' function group, after this step copy only 1 function module i. e. "RSAX_BIW_GET_DATA_SIMPLE" , save and activate your custom function group and insert you code in function module.
Hope this will solve your problem.
Edited by: Avinash.Verma on Dec 28, 2010 11:09 AM
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi
This is because SRSC isnot defined in your function module or the top program of function module is not active L<function gp name>TOP.
Try activating the top program.
You can also include SRSC in the top program explictly.
like :
TYPE-POOLS: SRSC.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
hi soniya,
i m also getting the same error for my function module. have u got any solution for this problem? if u have any solution for this please share with me.
waiting for ur reply.
regards,
vicky
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
68 | |
8 | |
7 | |
6 | |
6 | |
6 | |
5 | |
5 | |
5 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.