SE37创建函数,BW做Function Module数据源时需要ABAP开发函数,这个函数BW给了一个固定的传参格式,相当于BW数据源对ABAP的开放的一个接口
可以复制标准函数: RSAX_BIW_GET_DATA_SIMPLE
参数说明:
传入参数:
I_REQUNR: 请求次数 I_DSOURCE: 数据源名称 I_MAXSIZE :数据包大小
I_INITFLAG:是否是初始化 I_READ_ONLY: 只读标识 I_REMOTE_CALL:远程调用
传出参数:
E_T_DATA:目标数据参数名称 (根据实际需求来的自定义结构)
I_T_SELECT:抽取的选择条件 I_T_FIELDS:选择条件的字段
RSO2 创建数据源
创建完成后 rsa3 测试
代码逻辑部分参考:
FUNCTION ZFM_FJBW_WLBB.
*"----------------------------------------------------------------------
*"*"本地接口:
*" 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
*" E_T_DATA TYPE ZFJT_BW01 OPTIONAL
*" I_T_SELECT TYPE SRSC_S_IF_SIMPLE-T_SELECT OPTIONAL
*" I_T_FIELDS TYPE SRSC_S_IF_SIMPLE-T_FIELDS OPTIONAL
*" EXCEPTIONS
*" NO_MORE_DATA
*" ERROR_PASSED_TO_MESS_HANDLER
*"----------------------------------------------------------------------
DATA ls_out like LINE OF E_T_DATA .
* Auxiliary Selection criteria structure
DATA l_s_select TYPE srsc_s_select.
* Maximum number of lines for DB table
STATICS: l_s_if TYPE srsc_s_if_simple,
* counter
lv_counter_datapakid LIKE sy-tabix,
* cursor
lv_cursor TYPE cursor.
RANGES: RS_LFMON FOR MARD-LFMON .
RANGES: RS_LFGJA FOR MARD-LFGJA .
* 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 'ZDS_FI_ZWLB'.
WHEN OTHERS.
RAISE error_passed_to_mess_handler.
ENDCASE.
APPEND LINES OF i_t_select TO l_s_if-t_select.
* Fill parameter buffer for data extraction calls
l_s_if-requnr = i_requnr.
l_s_if-dsource = i_dsource.
l_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 l_s_if-t_fields.
ELSE. "Initialization mode or data extraction ?
IF lv_counter_datapakid = 0.
LOOP AT l_s_if-t_select INTO l_s_select WHERE fieldnm = 'GJAHR'.
IF l_s_select-fieldnm = 'GJAHR'.
RS_LFGJA = VALUE #( SIGN = 'I' OPTION = 'EQ' LOW = l_s_select-LOW ).
APPEND RS_LFGJA .
IF l_s_select-LOW EQ SY-DATUM+0(4).
DATA(LV_YEAR) = 'X'.
ENDIF.
ENDIF.
IF l_s_select-FIELDNM = 'LFMON'.
IF l_s_select-LOW EQ '12'.
RS_LFMON = VALUE #( SIGN = 'I' OPTION = 'BT' LOW = '12' HIGH = '16').
APPEND RS_LFMON .
ELSE.
RS_LFMON = VALUE #( SIGN = 'I' OPTION = 'BT' LOW = l_s_select-LOW ).
APPEND RS_LFMON .
ENDIF.
ENDIF.
ENDLOOP .
LOOP AT LT_MAIN INTO DATA(LS_MAIN).
.....
ENDLOOP.
ENDIF.
IF e_t_data[] IS INITIAL .
RAISE no_more_data.
ENDIF.
ENDIF. "Initialization mode or data extraction ?
ENDFUNCTION.