Sunteți pe pagina 1din 6

FUNCTION z_po_text_desc .

*"---------------------------------------------------------------------*"*"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 SBIWA_FLAG 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 ZPO_DESC_ATTR_STRUCT OPTIONAL *" EXCEPTIONS *" NO_MORE_DATA *" ERROR_PASSED_TO_MESS_HANDLER *"---------------------------------------------------------------------import

Tables

* Example: DataSource for table SFLIGHT TABLES: ekko.

*local declaritions DATA: lt_data TYPE TABLE OF zpo_desc_attr_struct, ls_data TYPE zpo_desc_attr_struct. TYPES: BEGIN OF lt_ekko_temp, ebeln LIKE ekko-ebeln, bsart LIKE ekko-bsart, id LIKE thead-tdid, END OF lt_ekko_temp. DATA: lt_ekko TYPE STANDARD TABLE OF lt_ekko_temp, ls_ekko LIKE LINE OF lt_ekko. DATA: lt_ekko_long_text_tline TYPE fmlines. DATA: st_ekko_long_text_tline TYPE LINE OF tttext. DATA: lv_textname LIKE thead-tdname. DATA: lv_ekko_long_text(1500) TYPE c. * 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_ebeln FOR ekko-ebeln, l_r_bsart FOR ekko-bsart. * 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 ZSTIP_DESC_ATTR BREAK-POINT. CASE i_dsource. WHEN 'ZPO_DESC_ATTR'. 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

'ZERPBWD' "message class '000' "message number 'ZPO_DESC_ATTR' "message variable 1 'ZPO_DESC_ATTR'. "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. LOOP AT s_s_if-t_select INTO l_s_select WHERE fieldnm = 'EBELN'. MOVE-CORRESPONDING l_s_select TO l_r_ebeln. APPEND l_r_ebeln. ENDLOOP. LOOP AT s_s_if-t_select INTO l_s_select WHERE MOVE-CORRESPONDING l_s_select TO l_r_bsart. APPEND l_r_bsart. ENDLOOP. BREAK-POINT. fieldnm = 'BSART'.

OPEN CURSOR WITH HOLD s_cursor FOR "(s_s_if-t_fields) " SELECT DISTINCT ebeln bsart FROM ekko WHERE ebeln IN l_r_ebeln AND bsart IN l_r_bsart. ENDIF. *Select records for this data package REFRESH lt_ekko. TRY. FETCH NEXT CURSOR s_cursor

APPENDING CORRESPONDING FIELDS OF TABLE lt_ekko PACKAGE SIZE s_s_if-maxsize. *Check whether the SQL statement retrieved more data IF sy-subrc IS NOT INITIAL. *Stop. Nothing else to do CLOSE CURSOR s_cursor. RAISE no_more_data. ELSE. LOOP AT lt_ekko INTO ls_ekko. CLEAR lv_ekko_long_text. MOVE ls_ekko-ebeln TO lv_textname. CALL FUNCTION 'READ_TEXT' EXPORTING CLIENT id language name object ARCHIVE_HANDLE LOCAL_CAT IMPORTING HEADER TABLES lines EXCEPTIONS id language name not_found object reference_check wrong_access_to_archive OTHERS

* * * *

= = = = = = = =

SY-MANDT 'F01' 'E' lv_textname 'EKKO' 0 ' '

= lt_ekko_long_text_tline = = = = = = = = 1 2 3 4 5 6 7 8.

IF sy-subrc = 0. LOOP AT lt_ekko_long_text_tline INTO st_ekko_long_text_tline. CONCATENATE lv_ekko_long_text st_ekko_long_text_tlinetdline INTO lv_ekko_long_text SEPARATED BY space. ENDLOOP. ENDIF. ls_data-ebeln ls_data-bsart ls_data-id ls_data-txt01 ls_data-txt02 ls_data-txt03 ls_data-txt04 ls_data-txt05 = = = = = = = = lv_textname. ls_ekko-bsart. 'F01'. lv_ekko_long_text(60). lv_ekko_long_text+60(60). lv_ekko_long_text+120(60). lv_ekko_long_text+180(60). lv_ekko_long_text+240(60).

APPEND ls_data TO lt_data.

CLEAR ls_data. CLEAR ls_ekko. CLEAR lv_textname. CLEAR lv_ekko_long_text. CLEAR st_ekko_long_text_tline. ENDLOOP. BREAK-POINT. e_t_data[] = lt_data. ENDIF. *If dynamic SQL statement fails, then close cursor and stop process CLEANUP. CLOSE CURSOR s_cursor. RAISE no_more_data. ENDTRY. s_counter_datapakid = s_counter_datapakid + 1. ENDIF. "Initialization mode or data extraction ?

ENDFUNCTION.

SE11 STRUCTURE

S-ar putea să vă placă și