Hi,
This Report Based on SHDB recording a new BDC report program
will be automatically generated And Even Download the Flat File structure also ..
*************************************************************************
* OBJECT ID : zbdc_auto_create. *
* PROGRAM TITLE : BDC Automation *
* PROGRAM TYPE : Executable *
* OUTPUT : New BDC program based on SHDB recording *
* CREATED BY : Ramkumar.K(51285) *
* CREATION DATE : 06/04/2013 *
*-----------------------------------------------------------------------*
* DESCRIPTION : Based on SHDB recording a new BDC report program *
* will be automatically generated *
* *
* *
*************************************************************************
* Modification history: *
* ----------------------------------------------------------------------*
* DATE |User ID |TS Ver | Transport Request | Description *
* ----------------------------------------------------------------------*
04/06/2015 ram k Field download issues corrected.
* *
*************************************************************************
REPORT zbdc_auto_create.
TABLES :d0100 , trdir.
*&---------------------------------------------------------------------*
DATA : qid TYPE apqd-qid,
report TYPE trdir-name,
testdata ,
dsn(132) TYPE c,
file VALUE abap_true .
* selections of generated program because of texts
DATA: dynprotab LIKE bdcdata OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF source OCCURS 100,
line1(30),
line2(42),
END OF source.
DATA: tcode LIKE tstc-tcode.
DATA: text_tab LIKE textpool OCCURS 0 WITH HEADER LINE,
text_tab_2 LIKE textpool OCCURS 0 WITH HEADER LINE.
DATA: dynpro_fields LIKE bdcdf OCCURS 0 WITH HEADER LINE.
DATA: dynpro_fields_index LIKE sy-tabix,
tree_name(43).
CONSTANTS: c_flg1edt TYPE x VALUE '80'.
*&---------------------------------------------------------------------*
DATA : gt_apqi TYPE TABLE OF apqi,
gs_apqi TYPE apqi,
gt_bdcdata TYPE TABLE OF bdcdata,
gs_bdcdata TYPE bdcdata,
gv_mode TYPE c,
gv_sync TYPE c,
gv_counti TYPE i,
gv_count(3) TYPE c,
gv_char(4) ,
gv_cflag TYPE c,
gv_cflag1 TYPE c,
gv_field TYPE char50.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE ttext ."text-001.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(15) tp_grpid.
PARAMETERS : p_grpid TYPE apqi-groupid OBLIGATORY.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(15) tp_prg.
PARAMETERS p_prg TYPE RS38M-PROGRAMM OBLIGATORY."MATCHCODE OBJECT rid. " progname.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF LINE .
SELECTION-SCREEN COMMENT 1(25) tmsg.
*PARAMETERS p_xls RADIOBUTTON GROUP r1.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE .
SELECTION-SCREEN COMMENT 10(9) tp_xls.
PARAMETERS p_xls RADIOBUTTON GROUP r1.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 10(9) tp_txt.
PARAMETERS p_txt RADIOBUTTON GROUP r1.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF LINE .
SELECTION-SCREEN COMMENT 1(25) tmsg1.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 10(21) tp_as.
PARAMETERS p_as RADIOBUTTON GROUP r2 .
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 10(21) tp_es.
PARAMETERS p_es RADIOBUTTON GROUP r2.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 10(21) tp_ns.
PARAMETERS p_ns RADIOBUTTON GROUP r2 DEFAULT 'X'.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 10(21) tp_ds.
PARAMETERS p_ds RADIOBUTTON GROUP r2.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF LINE .
SELECTION-SCREEN COMMENT 1(25) tmsg2.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 10(21) tp_st.
PARAMETERS p_st RADIOBUTTON GROUP r3.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 10(21) tp_at.
PARAMETERS p_at RADIOBUTTON GROUP r3.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF LINE .
SELECTION-SCREEN COMMENT 1(25) tmsg3.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 10(21) tp_file.
PARAMETERS P_File TYPE RLGRAP-FILENAME..
PARAMETERS P_File1 TYPE RLGRAP-FILENAME NO-DISPLAY..
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_grpid.
PERFORM f4_help_group.
AT SELECTION-SCREEN on VALUE-REQUEST FOR P_File.
PERFORM f4_help_file.
INITIALIZATION.
*Selection screen Text.
ttext = 'Selection Screen ' .
tp_grpid = 'Recording Name'.
tp_prg = 'Program Name'.
tp_txt = 'Text File'.
tp_xls = 'XLS File'.
tp_as = 'Display All Screen(A)'.
tp_es = 'Only Error Screen(E)'.
tp_ns = 'No Screen(N)'.
tp_ds = 'Debugger Mode (P)'.
tp_st = 'synchronous (S)'.
tp_at = 'asynchronous (A)'.
tp_file = 'File Path'.
tmsg = 'Upload file option'.
tmsg1 = 'BDC Transaction mode'.
tmsg2 = 'BDC Upadate mode'.
tmsg3 = 'Download Test File '.
PERFORM file_path.
START-OF-SELECTION.
PERFORM check_prg_name.
PERFORM assign_mode.
PERFORM get_bdc_data.
set PARAMETER ID 'RID' FIELD report.
CALL TRANSACTION 'SE38' AND SKIP FIRST SCREEN.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form F4_HELP_GROUP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM f4_help_group .
TYPES: BEGIN OF ts_apqi,
groupid TYPE apqi-groupid,
creator TYPE apqi-creator,
startdate TYPE apqi-startdate,
starttime TYPE apqi-starttime,
transcnt TYPE apqi-transcnt,
msgcnt TYPE apqi-msgcnt,
END OF ts_apqi.
DATA : lt_apqi TYPE TABLE OF ts_apqi,
ls_apqi TYPE ts_apqi.
*Getting List of recording
PERFORM record_select USING d0100-mapn
d0100-von
d0100-bis
d0100-creator.
LOOP AT gt_apqi INTO gs_apqi.
ls_apqi-creator = gs_apqi-creator.
ls_apqi-groupid = gs_apqi-groupid.
ls_apqi-startdate = gs_apqi-credate.
ls_apqi-starttime = gs_apqi-cretime.
ls_apqi-transcnt = gs_apqi-transcnt.
ls_apqi-msgcnt = gs_apqi-msgcnt.
APPEND ls_apqi TO lt_apqi.
CLEAR ls_apqi.
ENDLOOP.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'GROUPID'"lv_retfield
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'P_GRPID'
value_org = 'S'
TABLES
value_tab = lt_apqi
* return_tab = lT_return_tab
* dynpfld_mapping = lT_map
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc = 0.
* Implement suitable error handling here
ENDIF.
ENDFORM. " F4_HELP_GROUP*&---------------------------------------------------------------------*
*& Form RECORD_SELECT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_BDC_RECORD_GROUPID text
* -->P_D0100_VON text
* -->P_D0100_BIS text
* -->P_BDC_RECORD_CREATOR text
*----------------------------------------------------------------------*
FORM record_select USING p_groupid
p_von
p_bis
p_creator.
IF p_groupid = space.
p_groupid = '*'.
ENDIF.
IF p_creator = space.
p_creator = '*'.
ENDIF.
CALL FUNCTION 'BDC_OBJECT_SELECT'
EXPORTING
name = p_groupid
date_from = p_von
date_to = p_bis
session_creator = p_creator
TABLES
apqitab = gt_apqi
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
* MESSAGE A604 WITH 'BDC_OBJECT_SELECT' SY-SUBRC.
ENDIF.
ENDFORM. " RECORD_SELECT
*&---------------------------------------------------------------------*
*& Form GET_BDC_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_bdc_data .
d0100-mapn = p_grpid.
PERFORM record_select USING d0100-mapn
d0100-von
d0100-bis
d0100-creator.
READ TABLE gt_apqi INTO gs_apqi INDEX 1.
* IF sy-subrc = 0.
* start-of-selection ***************************************************
*START-OF-SELECTION.
* get records *********************************************************
qid = gs_apqi-qid .
CALL FUNCTION 'BDC_OBJECT_READ'
EXPORTING
queue_id = qid
TABLES
dynprotab = dynprotab
EXCEPTIONS
not_found = 1
system_failure = 2
invalid_datatype = 3
OTHERS = 4.
IF sy-subrc >< 0.
* MESSAGE S627 WITH QID. EXIT.
ENDIF.
* create file with testdata *******************************************
* IF TESTDATA = 'X'.
* fill internal table to determine structure of record
PERFORM fill_dynpro_fields.
* Download test file
PERFORM test_file.
* REPORT = 'ZTEST_REC1'.
*Check if table control is there or not..
LOOP AT dynpro_fields.
PERFORM check_table_control .
IF gv_cflag = abap_true .
EXIT.
ENDIF.
ENDLOOP.
* same lines for all records ------------------------------------------
* ***report <report>
CONCATENATE 'report'
report
INTO source SEPARATED BY space.
APPEND source. CLEAR source.
source = ' no standard page heading line-size 255.'.
APPEND source. CLEAR source. APPEND source.
* fill internal table to determine structure of record
PERFORM fill_dynpro_fields.
* ***data: begin of record ... end of record.
PERFORM source_lines_for_record.
* ENDIF.
* ***start-of-selection.
source-line1 = 'start-of-selection.'.
APPEND source. CLEAR source. APPEND source.
source = 'PERFORM GET_FILE_DATA.'.
APPEND source. CLEAR source. APPEND source.
IF gv_cflag = abap_true .
source = '* clear gv_counti." Table controls '.
APPEND source. CLEAR source. APPEND source.
ENDIF.
source-line1 = 'LOOP AT lt_file into wa_file.'.
APPEND source. CLEAR source. APPEND source.
IF gv_cflag = abap_true .
source = '* gv_counti = gv_counti + 1. " Table controls '.
APPEND source. CLEAR source.
source = '* gv_count = gv_counti. " Table controls '.
APPEND source. CLEAR source.
source = '* CONDENSE gv_count. " Table controls '.
APPEND source. CLEAR source. APPEND source.
ENDIF.
APPEND source. CLEAR source. APPEND source.
CLEAR gv_cflag1 .
* lines depending on records ------------------------------------------
LOOP AT dynprotab.
CLEAR gv_cflag1 .
CASE dynprotab-dynbegin.
* new transaction -------------------------------------------------
WHEN 'T'.
** store transaction AFTER getting field values!
* IF NOT TCODE IS INITIAL.
** ***perform bdc_transaction using dynprotab-fnam.
* SOURCE-LINE1 = 'perform bdc_transaction using'.
* CONCATENATE ''''
* TCODE
* '''.'
* INTO SOURCE-LINE2.
* APPEND SOURCE. CLEAR SOURCE. APPEND SOURCE.
* ENDIF.
** save tcode for next transaction
tcode = dynprotab-fnam.
* new dynpro ------------------------------------------------------
WHEN 'X'.
* ***perform bdc_dynpro using dynprotab-program dynprotab-dynpro.
source-line1 = 'perform bdc_dynpro using'.
CONCATENATE ''''
dynprotab-program
''''
' '''
dynprotab-dynpro
'''.'
INTO source-line2.
APPEND source. CLEAR source.
* dynpro field ----------------------------------------------------
WHEN space.
* ***perform bdc_field using <dynprotab-fnam> <dynprotab-fval>.
CHECK dynprotab-fnam <> 'BDC_SUBSCR'.
READ TABLE dynpro_fields WITH KEY fieldname = dynprotab-fnam .
IF sy-subrc = 0.
PERFORM check_table_control .
ENDIF.
IF gv_cflag1 = abap_true .
source = '* Clear GV_TC . " Table controls ' .
APPEND source. CLEAR source.
CONCATENATE '*CONCATENATE ' ''''
gv_field '(' '''' 'gv_count' '''' ')' '''' 'INTO GV_TC . " Table controls ' " dynprotab-fnam
INTO source.
APPEND source. CLEAR source.
source = '*perform bdc_field using " Table controls '.
* IF gv_cflag1 = abap_true .
* CONCATENATE ''''
* dynprotab-fnam
* ''''
* INTO source-line2.
source-line2 = '" GV_TC " Table controls ' .
ENDIF.
* ELSE.
APPEND source. CLEAR source.
source-line1 = 'perform bdc_field using '.
CONCATENATE ''''
dynprotab-fnam
''''
INTO source-line2.
* ENDIF.
APPEND source. CLEAR source.
* source line for read from dataset
IF file = 'X'.
* * ...records-<field>
PERFORM source_line_for_var_field.
* source line for read from records
ELSE.
* * ...<dynprotab-fval>
PERFORM source_line_for_field_content USING dynprotab-fval.
ENDIF.
ENDCASE.
ENDLOOP.
* insert last transaction ---------------------------------------------
IF gv_cflag = abap_true.
source = '*&--Default Table control row is bellow 5 means pls adjust..*.'. " Scroll down for Table control
APPEND source. CLEAR source.
source = '*IF gv_counti => 05. " Table controls'. " Scroll down for Table control
APPEND source. CLEAR source.
source-line1 = '*perform bdc_field using '.
* APPEND source. CLEAR source.
CONCATENATE '''bdc_okcode''' '" Table controls.' INTO source-line2.
APPEND source. CLEAR source.
CONCATENATE '"' '''=NP''. " Table controls' INTO source-line2.
APPEND source. CLEAR source.
source = '*gv_counti = 1." Table controls'.
APPEND source. CLEAR source.
source = '*ENDIF." Table controls'.
APPEND source. CLEAR source. APPEND source.
ENDIF.
*ENDIF.
CONCATENATE 'CALL TRANSACTION ' ''''tcode'''' 'USING ' INTO source ."SEPARATED BY space.
CONCATENATE source 'lt_bdc MODE ' INTO source SEPARATED BY space.
CONCATENATE source ''''gv_mode'''' 'UPDATE' ''''gv_sync'''' INTO source ."SEPARATED BY space.
APPEND source. CLEAR source.
source = 'MESSAGES INTO lT_MSG .' .
APPEND source. CLEAR source. APPEND source.
source = 'perform Error_log.'.
APPEND source. CLEAR source. APPEND source.
source-line1 = 'REFRESH : lt_msg , lt_bdc .'.
APPEND source. CLEAR source. APPEND source.
source-line1 = 'ENDLOOP .'.
APPEND source. CLEAR source. APPEND source.
source = 'PERFORM alv_display.'.
APPEND source. CLEAR source.
PERFORM get_subroutines.
* insert report *******************************************************
INSERT REPORT report FROM source.
* insert selection texts **********************************************
* texts for generated report in textpool of this report
READ TEXTPOOL sy-repid INTO text_tab LANGUAGE sy-langu.
IF sy-subrc = 0.
* delete texts that belong to this report
DELETE text_tab WHERE id >< 'S' AND id >< 'I'.
DELETE text_tab WHERE id = 'S' AND key >< 'DATASET'.
* insert title of actual report
READ TEXTPOOL report INTO text_tab_2 LANGUAGE sy-langu.
text_tab_2-id = 'R'.
READ TABLE text_tab_2 WITH KEY id = 'R'.
MOVE-CORRESPONDING text_tab_2 TO text_tab.
APPEND text_tab.
text_tab_2-id = 'S'.
text_tab_2-key = 'P_FNAME'.
text_tab_2-entry = ' File Name'.
text_tab_2-length = `100`.
APPEND text_tab_2.
text_tab_2-id = 'I'.
text_tab_2-key = '001'.
text_tab_2-entry = 'Selection Screen'.
text_tab_2-length = `100`.
APPEND text_tab_2.
* insert textpool from text_tab
INSERT TEXTPOOL report FROM text_tab_2.
ENDIF.
* actualize EU-tree ***************************************************
CONCATENATE 'PG_'
report
INTO tree_name.
CALL FUNCTION 'WB_TREE_ACTUALIZE'
EXPORTING
tree_name = tree_name.
ENDFORM. "GET_BDC_DATA
**** source_line_for_field_content ************************************
FORM source_line_for_field_content USING p_fval.
DATA: l_fval LIKE dynprotab-fval.
l_fval = p_fval.
IF l_fval+39 = space.
CONCATENATE ''''
l_fval
'''.'
INTO source-line2.
APPEND source. CLEAR source.
ELSE. "field content longer than 38
CONCATENATE ''''
l_fval(38)
''''
INTO source-line2.
APPEND source. CLEAR source.
source-line1+28 = '&'.
DO 4 TIMES.
SHIFT l_fval BY 38 PLACES.
IF l_fval+39 = space.
CONCATENATE ''''
l_fval
'''.'
INTO source-line2.
APPEND source. CLEAR source.
EXIT.
ELSE. "field content longer than n x 38
CONCATENATE ''''
l_fval(38)
''''
INTO source-line2.
APPEND source. CLEAR source-line2.
ENDIF.
ENDDO.
ENDIF.
ENDFORM. "SOURCE_LINE_FOR_FIELD_CONTENT
**** source_line_for_var_field ****************************************
FORM source_line_for_var_field.
IF dynprotab-fnam = 'BDC_OKCODE' OR
dynprotab-fnam = 'BDC_CURSOR' OR
dynprotab-fnam = 'BDC_SUBSCR'.
PERFORM source_line_for_field_content USING dynprotab-fval.
ELSE.
ADD 1 TO dynpro_fields_index.
READ TABLE dynpro_fields INDEX dynpro_fields_index.
IF sy-subrc <> 0.
* MESSAGE A614 WITH DYNPROTAB-FNAM.
ENDIF.
CONCATENATE 'wa_file-'
dynpro_fields-recfield
'.'
INTO source-line2.
APPEND source. CLEAR source.
ENDIF.
ENDFORM. "SOURCE_LINE_FOR_VAR_FIELD
**** fill_dynpro_fields ***********************************************
FORM fill_dynpro_fields.
CALL FUNCTION 'BDC_DYNPROTAB_GET_FIELDS'
TABLES
dynprotab = dynprotab
dynprofields = dynpro_fields.
ENDFORM. "FILL_DYNPRO_FIELDS
**** source_lines_for_record ******************************************
FORM source_lines_for_record.
DATA: l_dfies LIKE dfies,
l_tabname LIKE dcobjdef-name,
l_fieldname LIKE dfies-lfieldname,
l_dummy LIKE dfies-lfieldname.
* *** data: begin of record,
source = 'Types : begin of ts_File,'.
APPEND source. CLEAR source.
LOOP AT dynpro_fields.
* *** <field_n>(<length>)
CLEAR l_dfies.
IF dynpro_fields-fieldname CA '-'.
* create dataelement comment line
SPLIT dynpro_fields-fieldname AT '-'
INTO l_tabname
l_fieldname.
SPLIT l_fieldname AT '('
INTO l_fieldname
l_dummy.
CALL FUNCTION 'DDIF_FIELDINFO_GET'
EXPORTING
tabname = l_tabname
* fieldname = l_fieldname
* LANGU = SY-LANGU
lfieldname = l_fieldname
* ALL_TYPES = ' '
IMPORTING
* X030L_WA =
* DDOBJTYPE =
dfies_wa = l_dfies
* TABLES
* DFIES_TAB =
EXCEPTIONS
not_found = 1
internal_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
CLEAR l_dfies.
ENDIF.
ENDIF.
source = '* data element: '.
source+16 = l_dfies-rollname.
APPEND source. CLEAR source.
CONCATENATE dynpro_fields-recfield
'(' dynpro_fields-length ')' ','
INTO source+8.
APPEND source. CLEAR source.
ENDLOOP.
* *** end of record.
source = ' end of ts_File,'.
APPEND source. CLEAR source. APPEND source.
source = ' begin of ts_msg,'.
APPEND source.
source = ' icon type icon_d ,' .
APPEND source.
source = ' row type i,' .
APPEND source.
source = ' message type char200,' .
APPEND source.
source = ' end of ts_msg.'.
APPEND source.
source = '*** End generated data section ***'.
APPEND source.
source = '*Declaration part'.
APPEND source.
source = 'Data : lT_File type Table of ts_file ,'.
APPEND source.
source = ' WA_File type ts_file,'.
APPEND source.
source = ' lT_BDC type Table of BDCDATA,'.
APPEND source.
source = ' WA_BDC type BDCDATA,'.
APPEND source.
source = ' lT_MSG TYPE TABLE OF bdcmsgcoll, " Collecting Error messages '.
APPEND source.
source = ' WA_MSG TYPE bdcmsgcoll,'.
APPEND source.
source = ' lT_err TYPE table of ts_msg,'.
APPEND source.
source = ' WA_err TYPE ts_msg,'.
APPEND source.
source = ' wa_lay type SLIS_LAYOUT_ALV ,'.
APPEND source.
source = ' lt_fcat type SLIS_T_FIELDCAT_ALV, '.
APPEND source .
source = ' wa_fcat type SLIS_FIELDCAT_ALV .'.
APPEND source.
IF gv_cflag = abap_true.
source = 'Data : gv_counti TYPE i,'.
APPEND source.
source = ' gv_count(3) TYPE c,'.
APPEND source.
source = ' gv_tc(125) type c .'.
APPEND source.
ENDIF.
CLEAR source. APPEND source.
source = '*Selection Screen Part'.
APPEND source.
source = 'SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.'.
APPEND source.
IF p_xls = abap_true.
source = 'PARAMETERS : P_FNAME TYPE RLGRAP-FILENAME..'.
ELSEIF p_txt = abap_true.
source = 'PARAMETERS : P_FNAME TYPE IBIPPARMS-PATH.'.
ENDIF.
APPEND source.
source = 'SELECTION-SCREEN END OF BLOCK b1. '.
APPEND source.
CLEAR source. APPEND source.
source = '*Selection screen F4 help '.
APPEND source.
source = 'AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FNAME.'.
APPEND source.
CLEAR source. APPEND source.
source = ' PERFORM F4_HELP_P_FNAME . '.
APPEND source.
CLEAR source. APPEND source.
ENDFORM. "SOURCE_LINES_FOR_RECORD
*&---------------------------------------------------------------------*
*& Form GET_SUBROUTINES
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_subroutines .
CLEAR source.
APPEND source. CLEAR source.
source = '*&---------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = '*& Form F4_HELP_P_FNAME '.
APPEND source. CLEAR source.
source = '*&---------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = '* text'.
APPEND source. CLEAR source.
source = '*----------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = 'form F4_HELP_P_FNAME.'.
APPEND source. CLEAR source.
source = ' CALL FUNCTION ' .
CONCATENATE source '''F4_FILENAME''' INTO source .
APPEND source. CLEAR source.
source = ' EXPORTING'.
APPEND source. CLEAR source.
source = ' PROGRAM_NAME = SYST-CPROG'.
APPEND source. CLEAR source.
source = ' DYNPRO_NUMBER = SYST-DYNNR'.
APPEND source. CLEAR source.
source = ' IMPORTING'.
APPEND source. CLEAR source.
source = ' FILE_NAME = P_FNAME.'.
APPEND source. CLEAR source.
source = 'endform. " F4_HELP_P_FNAME '.
APPEND source. CLEAR source.
CLEAR source.
APPEND source. CLEAR source.
source = '*&---------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = '*& Form BDC_FIELD '.
APPEND source. CLEAR source.
source = '*&---------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = '* text'.
APPEND source. CLEAR source.
source = '*----------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = '* -->P_0223 text'.
APPEND source. CLEAR source.
source = '* -->P_0224 text'.
APPEND source. CLEAR source.
source = '*----------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = 'form BDC_FIELD using value(p_0223)'.
APPEND source. CLEAR source.
source = ' value(p_0224).'.
APPEND source. CLEAR source.
source = 'wa_bdc-fnam = p_0223.'.
APPEND source. CLEAR source.
source = ' wa_bdc-fval = p_0224.'.
APPEND source. CLEAR source.
source = ' APPEND WA_BDC TO lt_bdc.'.
APPEND source. CLEAR source.
source = 'CLEAR WA_BDC .'.
APPEND source. CLEAR source.
source = 'endform. " BDC_FIELD'.
APPEND source. CLEAR source.
APPEND source. CLEAR source.
source = '*&---------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = '*& Form BDC_DYNPRO'.
APPEND source. CLEAR source.
source = '*&---------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = '* text'.
APPEND source. CLEAR source.
source = '*----------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = '* -->P_0129 text'.
APPEND source. CLEAR source.
source = '* -->P_0130 text'.
APPEND source. CLEAR source.
source = '*----------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = 'form BDC_DYNPRO using value(p_0129)'.
APPEND source. CLEAR source.
source = ' value(p_0130)'.
APPEND source. CLEAR source.
source = ' .'.
APPEND source. CLEAR source.
source = ''.
APPEND source. CLEAR source.
source = 'wa_bdc-program = p_0129.'.
APPEND source. CLEAR source.
source = ' wa_bdc-dynpro = p_0130.'.
APPEND source. CLEAR source.
source = ' WA_BDC-DYNBEGIN = Abap_true.'.
APPEND source. CLEAR source.
source = 'APPEND WA_BDC TO lt_bdc.'.
APPEND source. CLEAR source.
source = 'CLEAR WA_BDC.'.
APPEND source. CLEAR source.
source = ' endform. " BDC_DYNPRO'.
APPEND source. CLEAR source.
source = '*&---------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = '*& Form Error_log '.
APPEND source. CLEAR source.
source = '*&---------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = '* text'.
APPEND source. CLEAR source.
source = '*----------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = 'form Error_log .'.
APPEND source. CLEAR source.
source = 'wa_err-row = wa_err-row + 1 . '.
APPEND source. CLEAR source.
source = 'LOOP AT lT_msg INTO wa_msg ."WHERE msgtyp EQ '.
* CONCATENATE source '''E''' '.' INTO source .
APPEND source. CLEAR source.
** APPEND source. CLEAR source.
** source = ' IF wa_msg-msgnr = 307 .' .
*** CONCATENATE source '''E''' '.' INTO source .
** APPEND source. CLEAR source.
** source = ' wa_err-icon = '.
** CONCATENATE source '''@0A@''' '.' INTO source .
** APPEND source. CLEAR source.
** source =' ELSEIF wa_msg-msgnr = 800 . ' .
*** CONCATENATE source '''S''' '.' INTO source .
** APPEND source. CLEAR source.
** source = ' wa_err-icon = '.
** CONCATENATE source '''@08@''' '.' INTO source .
** APPEND source. CLEAR source.
** source =' ENDIF.'.
** APPEND source. CLEAR source.
** source = 'if wa_msg-msgnr = 307. ' .
*** CONCATENATE source '''E''' '.' INTO source .
** APPEND source. CLEAR source.
** source = 'wa_err-row = wa_err-row + 1 . ' .
** APPEND source. CLEAR source.
** source =' ELSEIF wa_msg-msgnr = 800 .' .
*** CONCATENATE source '''S''' '.' INTO source .
** APPEND source. CLEAR source.
** source = 'wa_err-row = wa_err-row + 1 . ' .
** APPEND source. CLEAR source.
** source = 'endif. ' .
APPEND source. CLEAR source.
* source = 'wa_err-row = sy-tabix .'.
* APPEND source. CLEAR source.
source = '* Format Message'.
APPEND source. CLEAR source.
source = ' CALL FUNCTION ' .
CONCATENATE source '''MESSAGE_TEXT_BUILD''' INTO source SEPARATED BY space.
APPEND source. CLEAR source.
source = ' EXPORTING'.
APPEND source. CLEAR source.
source = ' msgid = wa_msg-msgid'.
APPEND source. CLEAR source.
source = ' msgnr = wa_msg-msgnr'.
APPEND source. CLEAR source.
source = ' msgv1 = wa_msg-msgv1'.
APPEND source. CLEAR source.
source = ' msgv2 = wa_msg-msgv2'.
APPEND source. CLEAR source.
source = ' msgv3 = wa_msg-msgv3'.
APPEND source. CLEAR source.
source = ' msgv4 = wa_msg-msgv4'.
APPEND source. CLEAR source.
source = ' IMPORTING'.
APPEND source. CLEAR source.
source = ' message_text_output = wa_err-message.'.
APPEND source. CLEAR source.
source = 'append wa_err to lt_err. '.
* APPEND source. CLEAR source.
* source = 'clear wa_err .'.
APPEND source. CLEAR source.
source = 'endloop.'.
APPEND source. CLEAR source.
* source = 'PERFORM alv_display.'.
* APPEND source. CLEAR source.
source = ' endform. " Error_log '.
APPEND source. CLEAR source.
source = '*&---------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = '*& Form alv_display '.
APPEND source. CLEAR source.
source = '*&---------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = '* text'.
APPEND source. CLEAR source.
source = '*----------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = 'form alv_display .'.
APPEND source. CLEAR source.
APPEND source. CLEAR source.
source = 'PERFORM fcat USING ' .
* CONCATENATE source '''Icon''' '''ICON''' '.' INTO source SEPARATED BY space.
* APPEND source.
source = 'PERFORM fcat USING ' .
CONCATENATE source '''Row''' '''ROW''' '.' INTO source SEPARATED BY space..
APPEND source.
source = 'PERFORM fcat USING ' .
CONCATENATE source '''Message''' '''MESSAGE''' '.' INTO source SEPARATED BY space..
APPEND source.CLEAR source.
APPEND source.
source = 'wa_lay-colwidth_optimize = abap_true.'.
APPEND source.CLEAR source.
APPEND source.
source = 'CALL FUNCTION ' .
CONCATENATE source '''REUSE_ALV_GRID_DISPLAY''' INTO source.
APPEND source.
source = ' EXPORTING'.
APPEND source.
source = ' IS_LAYOUT = wa_lay'.
APPEND source.
source = ' IT_FIELDCAT = lt_fcat'.
APPEND source.
source = ' TABLES'.
APPEND source.
source = ' t_outtab = lt_err'.
APPEND source.
source = ' EXCEPTIONS'.
APPEND source.
source = ' PROGRAM_ERROR = 1'.
APPEND source.
source = ' OTHERS = 2 .'.
APPEND source.
source = ' endform. " alv_display '.
APPEND source. CLEAR source.
APPEND source. CLEAR source.
source = '*&---------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = '*& Form FCAT'.
APPEND source. CLEAR source.
source = '*&---------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = '* text'.
APPEND source. CLEAR source.
source = '*----------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = '* -->p_text text'.
APPEND source. CLEAR source.
source = '* -->p_value text'.
APPEND source. CLEAR source.
source = '*----------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = 'form FCAT using value(p_text)'.
APPEND source. CLEAR source.
source = ' value(p_value).'.
APPEND source. CLEAR source.
source = 'wa_fcat-seltext_m = p_text.'.
APPEND source. CLEAR source.
source = 'wa_fcat-fieldname = p_value.'.
APPEND source. CLEAR source.
source = 'APPEND wa_fcat to lt_fcat.'.
APPEND source. CLEAR source.
source = 'CLEAR wa_fcat.'.
APPEND source. CLEAR source.
source = 'endform. " FCAT'.
APPEND source. CLEAR source.
APPEND source. CLEAR source.
source = '*&---------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = '*& Form GET_FILE_DATA '.
APPEND source. CLEAR source.
source = '*&---------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = '* text'.
APPEND source. CLEAR source.
source = '*----------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = 'form GET_FILE_DATA .'.
APPEND source. CLEAR source.
IF p_xls = abap_true.
APPEND source. CLEAR source.
source = 'DATA: lt_raw TYPE truxs_t_text_data.'.
APPEND source. CLEAR source.
source = ' CLEAR lt_file.'.
APPEND source. CLEAR source.
source = ' CALL FUNCTION ' .
CONCATENATE source '''TEXT_CONVERT_XLS_TO_SAP''' INTO source.
APPEND source. CLEAR source.
source = ' EXPORTING'.
APPEND source. CLEAR source.
source = ' i_line_header = abap_true'.
APPEND source. CLEAR source.
source = ' i_tab_raw_data = lt_raw'.
APPEND source. CLEAR source.
source = ' i_filename = p_fname'.
APPEND source. CLEAR source.
source = ' TABLES '.
APPEND source. CLEAR source.
source = ' i_tab_converted_data = lt_file'.
APPEND source. CLEAR source.
source = ' EXCEPTIONS '.
APPEND source. CLEAR source.
source = ' conversion_failed = 1'.
APPEND source. CLEAR source.
source = ' OTHERS = 2. .'.
APPEND source. CLEAR source.
ELSEIF p_txt = abap_true.
source = ' CALL FUNCTION '.
CONCATENATE source '''GUI_UPLOAD''' INTO source.
APPEND source. CLEAR source.
source = ' EXPORTING'.
APPEND source. CLEAR source.
source = ' filename = p_Fname'.
APPEND source. CLEAR source.
source = ' HAS_FIELD_SEPARATOR = abap_true '.
APPEND source. CLEAR source.
source = 'tables'.
APPEND source. CLEAR source.
source = ' data_tab = lt_file.'.
APPEND source. CLEAR source.
APPEND source. CLEAR source.
ENDIF.
source = ' endform. " GET_FILE_DATA '.
APPEND source. CLEAR source.
source = '* This report generated from automation report ( Author : Ramkumar K ) '.
APPEND source. CLEAR source.
ENDFORM. " GET_SUBROUTINES
*&---------------------------------------------------------------------*
*& Form CHECK_PRG_NAME
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM check_prg_name .
DATA: l_progname TYPE progname.
DATA: l_answer.
DATA: l_subrc LIKE sy-subrc.
DATA: l_leave_to_editor.
* programname correct?
l_progname = p_prg.
report = p_prg.
CALL FUNCTION 'RS_PROGRAM_CHECK_NAME'
EXPORTING
progname = l_progname
EXCEPTIONS
OTHERS = 04.
IF sy-subrc >< 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* program should not exist
SELECT SINGLE * FROM trdir WHERE name = l_progname.
IF sy-subrc = 0.
CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
EXPORTING
defaultoption = 'N'
textline1 = 'Program already exists! '(040)
textline2 = 'Delete and recreate it? '(041)
titel = 'Creating a new program '(042)
start_column = 25
start_row = 6
IMPORTING
answer = l_answer.
IF l_answer = 'J'.
PERFORM delete_program USING l_progname CHANGING l_subrc.
IF l_subrc = 0.
* MESSAGE I611 WITH L_PROGNAME.
ELSE.
EXIT.
ENDIF.
ELSE.
EXIT.
ENDIF.
ENDIF.
* create program attributes
CLEAR trdir.
trdir-name = l_progname.
trdir-subc = '1'.
CALL FUNCTION 'RS_EDTR_ATTR_ADD'
EXPORTING
program_name = l_progname
called_by_shdb = 'X'
with_trdir_entry = 'X'
IMPORTING
leave_to_editor = l_leave_to_editor
CHANGING
program_trdir = trdir
EXCEPTIONS
program_name_missing = 1
program_exists = 2
wrong_parameter_value = 3
OTHERS = 4.
IF sy-subrc >< 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* attributes saved?
SELECT SINGLE * FROM trdir WHERE name = trdir-name.
CHECK sy-subrc = 0.
* create program
ENDFORM. " CHECK_PRG_NAME
*&---------------------------------------------------------------------*
*& Form DELETE_PROGRAM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_L_PROGNAME text
* <--P_L_SUBRC text
*----------------------------------------------------------------------*
FORM delete_program USING p_progname
CHANGING p_subrc.
DATA: l_devclass LIKE tadir-devclass.
CALL FUNCTION 'RS_PROGRAM_GET_DEVCLASS'
EXPORTING
progname = p_progname
IMPORTING
devclass = l_devclass
EXCEPTIONS
OTHERS.
CALL FUNCTION 'RS_DELETE_PROGRAM'
EXPORTING
program = p_progname
suppress_popup = ' '
tadir_devclass = l_devclass
EXCEPTIONS
enqueue_lock = 1
object_not_found = 2
permission_failure = 3
reject_deletion = 5 "abbr. in popup
OTHERS = 4.
p_subrc = sy-subrc.
IF sy-msgno = '055'. p_subrc = 1. ENDIF. "progr. gesperrt
IF p_subrc < 5.
MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " DELETE_PROGRAM
*&---------------------------------------------------------------------*
*& Form ASSIGN_MODE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM assign_mode .
IF p_ns = abap_true.
gv_mode = 'N'.
ELSEIF p_as = abap_true.
gv_mode = 'A' .
ELSEIF p_es = abap_true.
gv_mode = 'E' .
ELSEIF p_ds = abap_true.
gv_mode = 'P' .
ENDIF.
IF p_st = abap_true.
gv_sync = 'S'.
ELSEIF p_at = abap_true.
gv_sync = 'A' .
ENDIF.
ENDFORM. " ASSIGN_MODE
*&---------------------------------------------------------------------*
*& Form CHECK_TABLE_CONTROL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM check_table_control .
DATA : lv_len TYPE i,
lv_type TYPE dd01v-datatype.
CLEAR gv_cflag1.
lv_len = strlen( dynpro_fields-fieldname ) .
lv_len = lv_len - 3 .
gv_char = dynpro_fields-fieldname+lv_len(2).
CALL FUNCTION 'NUMERIC_CHECK'
EXPORTING
string_in = gv_char
IMPORTING
* STRING_OUT = STRING_OUT
htype = lv_type.
IF lv_type = 'CHAR'.
ELSE.
IF gv_cflag IS INITIAL .
gv_cflag = abap_true.
ENDIF.
gv_cflag1 = abap_true.
lv_len = lv_len - 1.
gv_field = dynpro_fields-fieldname+0(lv_len).
ENDIF.
ENDFORM. " CHECK_TABLE_CONTROL
*&---------------------------------------------------------------------*
*& Form TEST_FILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form TEST_FILE .
*Create Dynamic Structure
FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE,
<dyn_wa> TYPE any,
<dyn_field> TYPE any.
DATA: dy_table TYPE REF TO data,
dy_line TYPE REF TO data.
DATA :lv_sum TYPE i.
DATA :lt_table_s TYPE lvc_t_fcat ,
ls_table_s TYPE lvc_S_fcat ,
lv_s_name TYPE REF TO data,
lv_length TYPE i,
lv_length1 TYPE i,
lv_str TYPE string,
* lv_str(30),
lv_field(30),
lv_value(30),
lv_type TYPE dd01v-datatype,
lt_dd03m TYPE TABLE OF dd03m,
ls_dd03m TYPE dd03m.
DATA : lv_file_path TYPE string .
LOOP AT dynpro_fields .
SPLIT dynpro_fields-fieldname AT '-' INTO lv_str lv_field .
IF lv_field IS NOT INITIAL.
lv_length = strlen( lv_field ).
lv_length = lv_length - 4 .
lv_length1 = lv_length + 4 .
lv_length1 = lv_length1 - 1 .
IF lv_field+lv_length(1) = '(' AND lv_field+lv_length1(1) = ')'.
lv_length = lv_length + 4 .
lv_length = lv_length - 3 .
lv_value = lv_field+lv_length(2).
CALL FUNCTION 'NUMERIC_CHECK'
EXPORTING
string_in = lv_value
IMPORTING
* STRING_OUT = STRING_OUT
htype = lv_type.
IF lv_type = 'CHAR'.
ELSE.
lv_length = lv_length - 1 .
lv_field = lv_field+0(lv_length).
ENDIF.
ENDIF.
ENDIF.
ls_table_s-fieldname = lv_field .
SELECT SINGLE * FROM dd03m INTO ls_dd03m WHERE tabname = lv_str AND fieldname = lv_field AND ddlanguage = 'EN' .
APPEND ls_dd03m to lt_dd03m .
ls_table_s-scrtext_m = ls_dd03m-scrtext_m.
IF ls_dd03m-scrtext_m IS INITIAL .
ls_table_s-scrtext_m = ls_dd03m-ddtext.
ENDIF.
ls_table_s-tabname = lv_str .
ls_table_s-datatype = 'CHAR' ."ls_parame-t_f_dt .
ls_table_s-inttype = 'C'."ls_parame-t_f_inty .
ls_table_s-intlen = 60 .
APPEND ls_table_s TO lt_table_s .
CLEAR ls_table_s.
ENDLOOP.
**********************************************************06/04/2015
*SORT lt_table_s.
*DELETE ADJACENT DUPLICATES FROM lt_table_s COMPARING FIELDNAME .
DATA : lt_table_s_temp TYPE lvc_T_fcat.
TYPES : BEGIN OF lt_FIELDS ,
FIELD TYPE lvc_S_fcat-fieldname,
COUNT TYPE I,
END OF LT_FIELDS.
DATA : LT_FIELDS TYPE TABLE OF lt_FIELDS.
DATA : Ls_FIELDS TYPE lt_FIELDS.
*lt_table_s_temp = lt_table_s.
FIELD-SYMBOLS : <lt_table_s> TYPE lvc_s_fcat .
LOOP AT lt_table_s ASSIGNING <lt_table_s> .
READ TABLE lt_table_s_temp INTO <lt_table_s> WITH KEY fieldname = <lt_table_s>-fieldname .
IF sy-subrc = 0.
READ TABLE lt_FIELDS INTO ls_fields WITH KEY fielD = <lt_table_s>-fieldname .
IF SY-subrc = 0.
ls_fields-field = <lt_table_s>-fieldname .
ls_fields-count = ls_fields-count + 1.
MODIFY lt_FIELDS FROM ls_fields INDEX sy-tabix.
ELSE.
ls_fields-field = <lt_table_s>-fieldname .
ls_fields-count = 1 .
APPEND ls_fields to lt_FIELDS .
ENDIF.
DATA : co(1).
co = ls_fields-Count .
CONCATENATE <lt_table_s>-fieldname'_'co INTO <lt_table_s>-fieldname .
CONDENSE <lt_table_s>-fieldname .
ELSE.
APPEND <lt_table_s> to lt_table_s_temp.
ENDIF.
ENDLOOP.
*********************************************************06/04/2015
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = lt_table_s
i_length_in_byte = 'X'
IMPORTING
ep_table = lv_s_name.
ASSIGN lv_s_name->* TO <dyn_table>.
CREATE DATA dy_line LIKE LINE OF <dyn_table>.
ASSIGN dy_line->* TO <dyn_wa>.
*Adding Header Text Data
APPEND <dyn_wa> TO <dyn_table>.
DATA ls_table_index TYPE i VALUE 1.
LOOP AT lt_table_s INTO ls_table_s.
READ TABLE <dyn_table> INTO <dyn_wa> INDEX 1.
ASSIGN COMPONENT ls_table_index OF STRUCTURE <dyn_wa> TO <dyn_field> .
ls_table_index = ls_table_index + 1.
<dyn_field> = ls_table_s-scrtext_m.
MODIFY <dyn_table> FROM <dyn_wa> INDEX 1.
ENDLOOP.
*Adding Item Data
APPEND <dyn_wa> TO <dyn_table>.
* DATA ls_table_index TYPE i VALUE 1.
CLEAR ls_table_index.
LOOP AT dynpro_fields .
ls_table_index = sy-tabix.
READ TABLE <dyn_table> INTO <dyn_wa> INDEX 2.
ASSIGN COMPONENT ls_table_index OF STRUCTURE <dyn_wa> TO <dyn_field> .
ls_table_index = ls_table_index + 1.
<dyn_field> = dynpro_fields-fieldvalue.
MODIFY <dyn_table> FROM <dyn_wa> INDEX 2.
ENDLOOP.
*download file
lv_file_path = P_File.
*IF P_File = P_File1.
CONCATENATE lv_file_path p_grpid '.XLS' INTO lv_file_path.
* ENDIF.
CALL FUNCTION 'GUI_DOWNLOAD' " TO DOWNLOAD A TEXT DOCUMENT
EXPORTING
filename = lv_file_path
filetype = 'DAT'
TABLES
data_tab = <dyn_table>.
endform. " TEST_FILE
*&---------------------------------------------------------------------*
*& Form FILE_PATH
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form FILE_PATH .
*Download File
DATA :lv_d_file TYPE string.
cl_gui_frontend_services=>get_desktop_directory(
CHANGING
desktop_directory = lv_d_file " Desktop Directory
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4
).
IF sy-subrc <> 0.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
CALL METHOD cl_gui_cfw=>flush.
CONCATENATE lv_d_file '\' INTO p_file.
P_File1 = P_File.
ENDIF.
endform. " FILE_PATH
*&---------------------------------------------------------------------*
*& Form F4_HELP_FILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form F4_HELP_FILE .
CALL FUNCTION 'F4_FILENAME'
EXPORTING
PROGRAM_NAME = SYST-CPROG
DYNPRO_NUMBER = SYST-DYNNR
IMPORTING
FILE_NAME = P_File.
endform. " F4_HELP_FILE
This Report Based on SHDB recording a new BDC report program
will be automatically generated And Even Download the Flat File structure also ..
*************************************************************************
* OBJECT ID : zbdc_auto_create. *
* PROGRAM TITLE : BDC Automation *
* PROGRAM TYPE : Executable *
* OUTPUT : New BDC program based on SHDB recording *
* CREATED BY : Ramkumar.K(51285) *
* CREATION DATE : 06/04/2013 *
*-----------------------------------------------------------------------*
* DESCRIPTION : Based on SHDB recording a new BDC report program *
* will be automatically generated *
* *
* *
*************************************************************************
* Modification history: *
* ----------------------------------------------------------------------*
* DATE |User ID |TS Ver | Transport Request | Description *
* ----------------------------------------------------------------------*
04/06/2015 ram k Field download issues corrected.
* *
*************************************************************************
REPORT zbdc_auto_create.
TABLES :d0100 , trdir.
*&---------------------------------------------------------------------*
DATA : qid TYPE apqd-qid,
report TYPE trdir-name,
testdata ,
dsn(132) TYPE c,
file VALUE abap_true .
* selections of generated program because of texts
DATA: dynprotab LIKE bdcdata OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF source OCCURS 100,
line1(30),
line2(42),
END OF source.
DATA: tcode LIKE tstc-tcode.
DATA: text_tab LIKE textpool OCCURS 0 WITH HEADER LINE,
text_tab_2 LIKE textpool OCCURS 0 WITH HEADER LINE.
DATA: dynpro_fields LIKE bdcdf OCCURS 0 WITH HEADER LINE.
DATA: dynpro_fields_index LIKE sy-tabix,
tree_name(43).
CONSTANTS: c_flg1edt TYPE x VALUE '80'.
*&---------------------------------------------------------------------*
DATA : gt_apqi TYPE TABLE OF apqi,
gs_apqi TYPE apqi,
gt_bdcdata TYPE TABLE OF bdcdata,
gs_bdcdata TYPE bdcdata,
gv_mode TYPE c,
gv_sync TYPE c,
gv_counti TYPE i,
gv_count(3) TYPE c,
gv_char(4) ,
gv_cflag TYPE c,
gv_cflag1 TYPE c,
gv_field TYPE char50.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE ttext ."text-001.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(15) tp_grpid.
PARAMETERS : p_grpid TYPE apqi-groupid OBLIGATORY.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(15) tp_prg.
PARAMETERS p_prg TYPE RS38M-PROGRAMM OBLIGATORY."MATCHCODE OBJECT rid. " progname.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF LINE .
SELECTION-SCREEN COMMENT 1(25) tmsg.
*PARAMETERS p_xls RADIOBUTTON GROUP r1.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE .
SELECTION-SCREEN COMMENT 10(9) tp_xls.
PARAMETERS p_xls RADIOBUTTON GROUP r1.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 10(9) tp_txt.
PARAMETERS p_txt RADIOBUTTON GROUP r1.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF LINE .
SELECTION-SCREEN COMMENT 1(25) tmsg1.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 10(21) tp_as.
PARAMETERS p_as RADIOBUTTON GROUP r2 .
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 10(21) tp_es.
PARAMETERS p_es RADIOBUTTON GROUP r2.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 10(21) tp_ns.
PARAMETERS p_ns RADIOBUTTON GROUP r2 DEFAULT 'X'.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 10(21) tp_ds.
PARAMETERS p_ds RADIOBUTTON GROUP r2.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF LINE .
SELECTION-SCREEN COMMENT 1(25) tmsg2.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 10(21) tp_st.
PARAMETERS p_st RADIOBUTTON GROUP r3.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 10(21) tp_at.
PARAMETERS p_at RADIOBUTTON GROUP r3.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF LINE .
SELECTION-SCREEN COMMENT 1(25) tmsg3.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 10(21) tp_file.
PARAMETERS P_File TYPE RLGRAP-FILENAME..
PARAMETERS P_File1 TYPE RLGRAP-FILENAME NO-DISPLAY..
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_grpid.
PERFORM f4_help_group.
AT SELECTION-SCREEN on VALUE-REQUEST FOR P_File.
PERFORM f4_help_file.
INITIALIZATION.
*Selection screen Text.
ttext = 'Selection Screen ' .
tp_grpid = 'Recording Name'.
tp_prg = 'Program Name'.
tp_txt = 'Text File'.
tp_xls = 'XLS File'.
tp_as = 'Display All Screen(A)'.
tp_es = 'Only Error Screen(E)'.
tp_ns = 'No Screen(N)'.
tp_ds = 'Debugger Mode (P)'.
tp_st = 'synchronous (S)'.
tp_at = 'asynchronous (A)'.
tp_file = 'File Path'.
tmsg = 'Upload file option'.
tmsg1 = 'BDC Transaction mode'.
tmsg2 = 'BDC Upadate mode'.
tmsg3 = 'Download Test File '.
PERFORM file_path.
START-OF-SELECTION.
PERFORM check_prg_name.
PERFORM assign_mode.
PERFORM get_bdc_data.
set PARAMETER ID 'RID' FIELD report.
CALL TRANSACTION 'SE38' AND SKIP FIRST SCREEN.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form F4_HELP_GROUP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM f4_help_group .
TYPES: BEGIN OF ts_apqi,
groupid TYPE apqi-groupid,
creator TYPE apqi-creator,
startdate TYPE apqi-startdate,
starttime TYPE apqi-starttime,
transcnt TYPE apqi-transcnt,
msgcnt TYPE apqi-msgcnt,
END OF ts_apqi.
DATA : lt_apqi TYPE TABLE OF ts_apqi,
ls_apqi TYPE ts_apqi.
*Getting List of recording
PERFORM record_select USING d0100-mapn
d0100-von
d0100-bis
d0100-creator.
LOOP AT gt_apqi INTO gs_apqi.
ls_apqi-creator = gs_apqi-creator.
ls_apqi-groupid = gs_apqi-groupid.
ls_apqi-startdate = gs_apqi-credate.
ls_apqi-starttime = gs_apqi-cretime.
ls_apqi-transcnt = gs_apqi-transcnt.
ls_apqi-msgcnt = gs_apqi-msgcnt.
APPEND ls_apqi TO lt_apqi.
CLEAR ls_apqi.
ENDLOOP.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'GROUPID'"lv_retfield
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'P_GRPID'
value_org = 'S'
TABLES
value_tab = lt_apqi
* return_tab = lT_return_tab
* dynpfld_mapping = lT_map
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc = 0.
* Implement suitable error handling here
ENDIF.
ENDFORM. " F4_HELP_GROUP*&---------------------------------------------------------------------*
*& Form RECORD_SELECT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_BDC_RECORD_GROUPID text
* -->P_D0100_VON text
* -->P_D0100_BIS text
* -->P_BDC_RECORD_CREATOR text
*----------------------------------------------------------------------*
FORM record_select USING p_groupid
p_von
p_bis
p_creator.
IF p_groupid = space.
p_groupid = '*'.
ENDIF.
IF p_creator = space.
p_creator = '*'.
ENDIF.
CALL FUNCTION 'BDC_OBJECT_SELECT'
EXPORTING
name = p_groupid
date_from = p_von
date_to = p_bis
session_creator = p_creator
TABLES
apqitab = gt_apqi
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
* MESSAGE A604 WITH 'BDC_OBJECT_SELECT' SY-SUBRC.
ENDIF.
ENDFORM. " RECORD_SELECT
*&---------------------------------------------------------------------*
*& Form GET_BDC_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_bdc_data .
d0100-mapn = p_grpid.
PERFORM record_select USING d0100-mapn
d0100-von
d0100-bis
d0100-creator.
READ TABLE gt_apqi INTO gs_apqi INDEX 1.
* IF sy-subrc = 0.
* start-of-selection ***************************************************
*START-OF-SELECTION.
* get records *********************************************************
qid = gs_apqi-qid .
CALL FUNCTION 'BDC_OBJECT_READ'
EXPORTING
queue_id = qid
TABLES
dynprotab = dynprotab
EXCEPTIONS
not_found = 1
system_failure = 2
invalid_datatype = 3
OTHERS = 4.
IF sy-subrc >< 0.
* MESSAGE S627 WITH QID. EXIT.
ENDIF.
* create file with testdata *******************************************
* IF TESTDATA = 'X'.
* fill internal table to determine structure of record
PERFORM fill_dynpro_fields.
* Download test file
PERFORM test_file.
* REPORT = 'ZTEST_REC1'.
*Check if table control is there or not..
LOOP AT dynpro_fields.
PERFORM check_table_control .
IF gv_cflag = abap_true .
EXIT.
ENDIF.
ENDLOOP.
* same lines for all records ------------------------------------------
* ***report <report>
CONCATENATE 'report'
report
INTO source SEPARATED BY space.
APPEND source. CLEAR source.
source = ' no standard page heading line-size 255.'.
APPEND source. CLEAR source. APPEND source.
* fill internal table to determine structure of record
PERFORM fill_dynpro_fields.
* ***data: begin of record ... end of record.
PERFORM source_lines_for_record.
* ENDIF.
* ***start-of-selection.
source-line1 = 'start-of-selection.'.
APPEND source. CLEAR source. APPEND source.
source = 'PERFORM GET_FILE_DATA.'.
APPEND source. CLEAR source. APPEND source.
IF gv_cflag = abap_true .
source = '* clear gv_counti." Table controls '.
APPEND source. CLEAR source. APPEND source.
ENDIF.
source-line1 = 'LOOP AT lt_file into wa_file.'.
APPEND source. CLEAR source. APPEND source.
IF gv_cflag = abap_true .
source = '* gv_counti = gv_counti + 1. " Table controls '.
APPEND source. CLEAR source.
source = '* gv_count = gv_counti. " Table controls '.
APPEND source. CLEAR source.
source = '* CONDENSE gv_count. " Table controls '.
APPEND source. CLEAR source. APPEND source.
ENDIF.
APPEND source. CLEAR source. APPEND source.
CLEAR gv_cflag1 .
* lines depending on records ------------------------------------------
LOOP AT dynprotab.
CLEAR gv_cflag1 .
CASE dynprotab-dynbegin.
* new transaction -------------------------------------------------
WHEN 'T'.
** store transaction AFTER getting field values!
* IF NOT TCODE IS INITIAL.
** ***perform bdc_transaction using dynprotab-fnam.
* SOURCE-LINE1 = 'perform bdc_transaction using'.
* CONCATENATE ''''
* TCODE
* '''.'
* INTO SOURCE-LINE2.
* APPEND SOURCE. CLEAR SOURCE. APPEND SOURCE.
* ENDIF.
** save tcode for next transaction
tcode = dynprotab-fnam.
* new dynpro ------------------------------------------------------
WHEN 'X'.
* ***perform bdc_dynpro using dynprotab-program dynprotab-dynpro.
source-line1 = 'perform bdc_dynpro using'.
CONCATENATE ''''
dynprotab-program
''''
' '''
dynprotab-dynpro
'''.'
INTO source-line2.
APPEND source. CLEAR source.
* dynpro field ----------------------------------------------------
WHEN space.
* ***perform bdc_field using <dynprotab-fnam> <dynprotab-fval>.
CHECK dynprotab-fnam <> 'BDC_SUBSCR'.
READ TABLE dynpro_fields WITH KEY fieldname = dynprotab-fnam .
IF sy-subrc = 0.
PERFORM check_table_control .
ENDIF.
IF gv_cflag1 = abap_true .
source = '* Clear GV_TC . " Table controls ' .
APPEND source. CLEAR source.
CONCATENATE '*CONCATENATE ' ''''
gv_field '(' '''' 'gv_count' '''' ')' '''' 'INTO GV_TC . " Table controls ' " dynprotab-fnam
INTO source.
APPEND source. CLEAR source.
source = '*perform bdc_field using " Table controls '.
* IF gv_cflag1 = abap_true .
* CONCATENATE ''''
* dynprotab-fnam
* ''''
* INTO source-line2.
source-line2 = '" GV_TC " Table controls ' .
ENDIF.
* ELSE.
APPEND source. CLEAR source.
source-line1 = 'perform bdc_field using '.
CONCATENATE ''''
dynprotab-fnam
''''
INTO source-line2.
* ENDIF.
APPEND source. CLEAR source.
* source line for read from dataset
IF file = 'X'.
* * ...records-<field>
PERFORM source_line_for_var_field.
* source line for read from records
ELSE.
* * ...<dynprotab-fval>
PERFORM source_line_for_field_content USING dynprotab-fval.
ENDIF.
ENDCASE.
ENDLOOP.
* insert last transaction ---------------------------------------------
IF gv_cflag = abap_true.
source = '*&--Default Table control row is bellow 5 means pls adjust..*.'. " Scroll down for Table control
APPEND source. CLEAR source.
source = '*IF gv_counti => 05. " Table controls'. " Scroll down for Table control
APPEND source. CLEAR source.
source-line1 = '*perform bdc_field using '.
* APPEND source. CLEAR source.
CONCATENATE '''bdc_okcode''' '" Table controls.' INTO source-line2.
APPEND source. CLEAR source.
CONCATENATE '"' '''=NP''. " Table controls' INTO source-line2.
APPEND source. CLEAR source.
source = '*gv_counti = 1." Table controls'.
APPEND source. CLEAR source.
source = '*ENDIF." Table controls'.
APPEND source. CLEAR source. APPEND source.
ENDIF.
*ENDIF.
CONCATENATE 'CALL TRANSACTION ' ''''tcode'''' 'USING ' INTO source ."SEPARATED BY space.
CONCATENATE source 'lt_bdc MODE ' INTO source SEPARATED BY space.
CONCATENATE source ''''gv_mode'''' 'UPDATE' ''''gv_sync'''' INTO source ."SEPARATED BY space.
APPEND source. CLEAR source.
source = 'MESSAGES INTO lT_MSG .' .
APPEND source. CLEAR source. APPEND source.
source = 'perform Error_log.'.
APPEND source. CLEAR source. APPEND source.
source-line1 = 'REFRESH : lt_msg , lt_bdc .'.
APPEND source. CLEAR source. APPEND source.
source-line1 = 'ENDLOOP .'.
APPEND source. CLEAR source. APPEND source.
source = 'PERFORM alv_display.'.
APPEND source. CLEAR source.
PERFORM get_subroutines.
* insert report *******************************************************
INSERT REPORT report FROM source.
* insert selection texts **********************************************
* texts for generated report in textpool of this report
READ TEXTPOOL sy-repid INTO text_tab LANGUAGE sy-langu.
IF sy-subrc = 0.
* delete texts that belong to this report
DELETE text_tab WHERE id >< 'S' AND id >< 'I'.
DELETE text_tab WHERE id = 'S' AND key >< 'DATASET'.
* insert title of actual report
READ TEXTPOOL report INTO text_tab_2 LANGUAGE sy-langu.
text_tab_2-id = 'R'.
READ TABLE text_tab_2 WITH KEY id = 'R'.
MOVE-CORRESPONDING text_tab_2 TO text_tab.
APPEND text_tab.
text_tab_2-id = 'S'.
text_tab_2-key = 'P_FNAME'.
text_tab_2-entry = ' File Name'.
text_tab_2-length = `100`.
APPEND text_tab_2.
text_tab_2-id = 'I'.
text_tab_2-key = '001'.
text_tab_2-entry = 'Selection Screen'.
text_tab_2-length = `100`.
APPEND text_tab_2.
* insert textpool from text_tab
INSERT TEXTPOOL report FROM text_tab_2.
ENDIF.
* actualize EU-tree ***************************************************
CONCATENATE 'PG_'
report
INTO tree_name.
CALL FUNCTION 'WB_TREE_ACTUALIZE'
EXPORTING
tree_name = tree_name.
ENDFORM. "GET_BDC_DATA
**** source_line_for_field_content ************************************
FORM source_line_for_field_content USING p_fval.
DATA: l_fval LIKE dynprotab-fval.
l_fval = p_fval.
IF l_fval+39 = space.
CONCATENATE ''''
l_fval
'''.'
INTO source-line2.
APPEND source. CLEAR source.
ELSE. "field content longer than 38
CONCATENATE ''''
l_fval(38)
''''
INTO source-line2.
APPEND source. CLEAR source.
source-line1+28 = '&'.
DO 4 TIMES.
SHIFT l_fval BY 38 PLACES.
IF l_fval+39 = space.
CONCATENATE ''''
l_fval
'''.'
INTO source-line2.
APPEND source. CLEAR source.
EXIT.
ELSE. "field content longer than n x 38
CONCATENATE ''''
l_fval(38)
''''
INTO source-line2.
APPEND source. CLEAR source-line2.
ENDIF.
ENDDO.
ENDIF.
ENDFORM. "SOURCE_LINE_FOR_FIELD_CONTENT
**** source_line_for_var_field ****************************************
FORM source_line_for_var_field.
IF dynprotab-fnam = 'BDC_OKCODE' OR
dynprotab-fnam = 'BDC_CURSOR' OR
dynprotab-fnam = 'BDC_SUBSCR'.
PERFORM source_line_for_field_content USING dynprotab-fval.
ELSE.
ADD 1 TO dynpro_fields_index.
READ TABLE dynpro_fields INDEX dynpro_fields_index.
IF sy-subrc <> 0.
* MESSAGE A614 WITH DYNPROTAB-FNAM.
ENDIF.
CONCATENATE 'wa_file-'
dynpro_fields-recfield
'.'
INTO source-line2.
APPEND source. CLEAR source.
ENDIF.
ENDFORM. "SOURCE_LINE_FOR_VAR_FIELD
**** fill_dynpro_fields ***********************************************
FORM fill_dynpro_fields.
CALL FUNCTION 'BDC_DYNPROTAB_GET_FIELDS'
TABLES
dynprotab = dynprotab
dynprofields = dynpro_fields.
ENDFORM. "FILL_DYNPRO_FIELDS
**** source_lines_for_record ******************************************
FORM source_lines_for_record.
DATA: l_dfies LIKE dfies,
l_tabname LIKE dcobjdef-name,
l_fieldname LIKE dfies-lfieldname,
l_dummy LIKE dfies-lfieldname.
* *** data: begin of record,
source = 'Types : begin of ts_File,'.
APPEND source. CLEAR source.
LOOP AT dynpro_fields.
* *** <field_n>(<length>)
CLEAR l_dfies.
IF dynpro_fields-fieldname CA '-'.
* create dataelement comment line
SPLIT dynpro_fields-fieldname AT '-'
INTO l_tabname
l_fieldname.
SPLIT l_fieldname AT '('
INTO l_fieldname
l_dummy.
CALL FUNCTION 'DDIF_FIELDINFO_GET'
EXPORTING
tabname = l_tabname
* fieldname = l_fieldname
* LANGU = SY-LANGU
lfieldname = l_fieldname
* ALL_TYPES = ' '
IMPORTING
* X030L_WA =
* DDOBJTYPE =
dfies_wa = l_dfies
* TABLES
* DFIES_TAB =
EXCEPTIONS
not_found = 1
internal_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
CLEAR l_dfies.
ENDIF.
ENDIF.
source = '* data element: '.
source+16 = l_dfies-rollname.
APPEND source. CLEAR source.
CONCATENATE dynpro_fields-recfield
'(' dynpro_fields-length ')' ','
INTO source+8.
APPEND source. CLEAR source.
ENDLOOP.
* *** end of record.
source = ' end of ts_File,'.
APPEND source. CLEAR source. APPEND source.
source = ' begin of ts_msg,'.
APPEND source.
source = ' icon type icon_d ,' .
APPEND source.
source = ' row type i,' .
APPEND source.
source = ' message type char200,' .
APPEND source.
source = ' end of ts_msg.'.
APPEND source.
source = '*** End generated data section ***'.
APPEND source.
source = '*Declaration part'.
APPEND source.
source = 'Data : lT_File type Table of ts_file ,'.
APPEND source.
source = ' WA_File type ts_file,'.
APPEND source.
source = ' lT_BDC type Table of BDCDATA,'.
APPEND source.
source = ' WA_BDC type BDCDATA,'.
APPEND source.
source = ' lT_MSG TYPE TABLE OF bdcmsgcoll, " Collecting Error messages '.
APPEND source.
source = ' WA_MSG TYPE bdcmsgcoll,'.
APPEND source.
source = ' lT_err TYPE table of ts_msg,'.
APPEND source.
source = ' WA_err TYPE ts_msg,'.
APPEND source.
source = ' wa_lay type SLIS_LAYOUT_ALV ,'.
APPEND source.
source = ' lt_fcat type SLIS_T_FIELDCAT_ALV, '.
APPEND source .
source = ' wa_fcat type SLIS_FIELDCAT_ALV .'.
APPEND source.
IF gv_cflag = abap_true.
source = 'Data : gv_counti TYPE i,'.
APPEND source.
source = ' gv_count(3) TYPE c,'.
APPEND source.
source = ' gv_tc(125) type c .'.
APPEND source.
ENDIF.
CLEAR source. APPEND source.
source = '*Selection Screen Part'.
APPEND source.
source = 'SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.'.
APPEND source.
IF p_xls = abap_true.
source = 'PARAMETERS : P_FNAME TYPE RLGRAP-FILENAME..'.
ELSEIF p_txt = abap_true.
source = 'PARAMETERS : P_FNAME TYPE IBIPPARMS-PATH.'.
ENDIF.
APPEND source.
source = 'SELECTION-SCREEN END OF BLOCK b1. '.
APPEND source.
CLEAR source. APPEND source.
source = '*Selection screen F4 help '.
APPEND source.
source = 'AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FNAME.'.
APPEND source.
CLEAR source. APPEND source.
source = ' PERFORM F4_HELP_P_FNAME . '.
APPEND source.
CLEAR source. APPEND source.
ENDFORM. "SOURCE_LINES_FOR_RECORD
*&---------------------------------------------------------------------*
*& Form GET_SUBROUTINES
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_subroutines .
CLEAR source.
APPEND source. CLEAR source.
source = '*&---------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = '*& Form F4_HELP_P_FNAME '.
APPEND source. CLEAR source.
source = '*&---------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = '* text'.
APPEND source. CLEAR source.
source = '*----------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = 'form F4_HELP_P_FNAME.'.
APPEND source. CLEAR source.
source = ' CALL FUNCTION ' .
CONCATENATE source '''F4_FILENAME''' INTO source .
APPEND source. CLEAR source.
source = ' EXPORTING'.
APPEND source. CLEAR source.
source = ' PROGRAM_NAME = SYST-CPROG'.
APPEND source. CLEAR source.
source = ' DYNPRO_NUMBER = SYST-DYNNR'.
APPEND source. CLEAR source.
source = ' IMPORTING'.
APPEND source. CLEAR source.
source = ' FILE_NAME = P_FNAME.'.
APPEND source. CLEAR source.
source = 'endform. " F4_HELP_P_FNAME '.
APPEND source. CLEAR source.
CLEAR source.
APPEND source. CLEAR source.
source = '*&---------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = '*& Form BDC_FIELD '.
APPEND source. CLEAR source.
source = '*&---------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = '* text'.
APPEND source. CLEAR source.
source = '*----------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = '* -->P_0223 text'.
APPEND source. CLEAR source.
source = '* -->P_0224 text'.
APPEND source. CLEAR source.
source = '*----------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = 'form BDC_FIELD using value(p_0223)'.
APPEND source. CLEAR source.
source = ' value(p_0224).'.
APPEND source. CLEAR source.
source = 'wa_bdc-fnam = p_0223.'.
APPEND source. CLEAR source.
source = ' wa_bdc-fval = p_0224.'.
APPEND source. CLEAR source.
source = ' APPEND WA_BDC TO lt_bdc.'.
APPEND source. CLEAR source.
source = 'CLEAR WA_BDC .'.
APPEND source. CLEAR source.
source = 'endform. " BDC_FIELD'.
APPEND source. CLEAR source.
APPEND source. CLEAR source.
source = '*&---------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = '*& Form BDC_DYNPRO'.
APPEND source. CLEAR source.
source = '*&---------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = '* text'.
APPEND source. CLEAR source.
source = '*----------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = '* -->P_0129 text'.
APPEND source. CLEAR source.
source = '* -->P_0130 text'.
APPEND source. CLEAR source.
source = '*----------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = 'form BDC_DYNPRO using value(p_0129)'.
APPEND source. CLEAR source.
source = ' value(p_0130)'.
APPEND source. CLEAR source.
source = ' .'.
APPEND source. CLEAR source.
source = ''.
APPEND source. CLEAR source.
source = 'wa_bdc-program = p_0129.'.
APPEND source. CLEAR source.
source = ' wa_bdc-dynpro = p_0130.'.
APPEND source. CLEAR source.
source = ' WA_BDC-DYNBEGIN = Abap_true.'.
APPEND source. CLEAR source.
source = 'APPEND WA_BDC TO lt_bdc.'.
APPEND source. CLEAR source.
source = 'CLEAR WA_BDC.'.
APPEND source. CLEAR source.
source = ' endform. " BDC_DYNPRO'.
APPEND source. CLEAR source.
source = '*&---------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = '*& Form Error_log '.
APPEND source. CLEAR source.
source = '*&---------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = '* text'.
APPEND source. CLEAR source.
source = '*----------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = 'form Error_log .'.
APPEND source. CLEAR source.
source = 'wa_err-row = wa_err-row + 1 . '.
APPEND source. CLEAR source.
source = 'LOOP AT lT_msg INTO wa_msg ."WHERE msgtyp EQ '.
* CONCATENATE source '''E''' '.' INTO source .
APPEND source. CLEAR source.
** APPEND source. CLEAR source.
** source = ' IF wa_msg-msgnr = 307 .' .
*** CONCATENATE source '''E''' '.' INTO source .
** APPEND source. CLEAR source.
** source = ' wa_err-icon = '.
** CONCATENATE source '''@0A@''' '.' INTO source .
** APPEND source. CLEAR source.
** source =' ELSEIF wa_msg-msgnr = 800 . ' .
*** CONCATENATE source '''S''' '.' INTO source .
** APPEND source. CLEAR source.
** source = ' wa_err-icon = '.
** CONCATENATE source '''@08@''' '.' INTO source .
** APPEND source. CLEAR source.
** source =' ENDIF.'.
** APPEND source. CLEAR source.
** source = 'if wa_msg-msgnr = 307. ' .
*** CONCATENATE source '''E''' '.' INTO source .
** APPEND source. CLEAR source.
** source = 'wa_err-row = wa_err-row + 1 . ' .
** APPEND source. CLEAR source.
** source =' ELSEIF wa_msg-msgnr = 800 .' .
*** CONCATENATE source '''S''' '.' INTO source .
** APPEND source. CLEAR source.
** source = 'wa_err-row = wa_err-row + 1 . ' .
** APPEND source. CLEAR source.
** source = 'endif. ' .
APPEND source. CLEAR source.
* source = 'wa_err-row = sy-tabix .'.
* APPEND source. CLEAR source.
source = '* Format Message'.
APPEND source. CLEAR source.
source = ' CALL FUNCTION ' .
CONCATENATE source '''MESSAGE_TEXT_BUILD''' INTO source SEPARATED BY space.
APPEND source. CLEAR source.
source = ' EXPORTING'.
APPEND source. CLEAR source.
source = ' msgid = wa_msg-msgid'.
APPEND source. CLEAR source.
source = ' msgnr = wa_msg-msgnr'.
APPEND source. CLEAR source.
source = ' msgv1 = wa_msg-msgv1'.
APPEND source. CLEAR source.
source = ' msgv2 = wa_msg-msgv2'.
APPEND source. CLEAR source.
source = ' msgv3 = wa_msg-msgv3'.
APPEND source. CLEAR source.
source = ' msgv4 = wa_msg-msgv4'.
APPEND source. CLEAR source.
source = ' IMPORTING'.
APPEND source. CLEAR source.
source = ' message_text_output = wa_err-message.'.
APPEND source. CLEAR source.
source = 'append wa_err to lt_err. '.
* APPEND source. CLEAR source.
* source = 'clear wa_err .'.
APPEND source. CLEAR source.
source = 'endloop.'.
APPEND source. CLEAR source.
* source = 'PERFORM alv_display.'.
* APPEND source. CLEAR source.
source = ' endform. " Error_log '.
APPEND source. CLEAR source.
source = '*&---------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = '*& Form alv_display '.
APPEND source. CLEAR source.
source = '*&---------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = '* text'.
APPEND source. CLEAR source.
source = '*----------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = 'form alv_display .'.
APPEND source. CLEAR source.
APPEND source. CLEAR source.
source = 'PERFORM fcat USING ' .
* CONCATENATE source '''Icon''' '''ICON''' '.' INTO source SEPARATED BY space.
* APPEND source.
source = 'PERFORM fcat USING ' .
CONCATENATE source '''Row''' '''ROW''' '.' INTO source SEPARATED BY space..
APPEND source.
source = 'PERFORM fcat USING ' .
CONCATENATE source '''Message''' '''MESSAGE''' '.' INTO source SEPARATED BY space..
APPEND source.CLEAR source.
APPEND source.
source = 'wa_lay-colwidth_optimize = abap_true.'.
APPEND source.CLEAR source.
APPEND source.
source = 'CALL FUNCTION ' .
CONCATENATE source '''REUSE_ALV_GRID_DISPLAY''' INTO source.
APPEND source.
source = ' EXPORTING'.
APPEND source.
source = ' IS_LAYOUT = wa_lay'.
APPEND source.
source = ' IT_FIELDCAT = lt_fcat'.
APPEND source.
source = ' TABLES'.
APPEND source.
source = ' t_outtab = lt_err'.
APPEND source.
source = ' EXCEPTIONS'.
APPEND source.
source = ' PROGRAM_ERROR = 1'.
APPEND source.
source = ' OTHERS = 2 .'.
APPEND source.
source = ' endform. " alv_display '.
APPEND source. CLEAR source.
APPEND source. CLEAR source.
source = '*&---------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = '*& Form FCAT'.
APPEND source. CLEAR source.
source = '*&---------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = '* text'.
APPEND source. CLEAR source.
source = '*----------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = '* -->p_text text'.
APPEND source. CLEAR source.
source = '* -->p_value text'.
APPEND source. CLEAR source.
source = '*----------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = 'form FCAT using value(p_text)'.
APPEND source. CLEAR source.
source = ' value(p_value).'.
APPEND source. CLEAR source.
source = 'wa_fcat-seltext_m = p_text.'.
APPEND source. CLEAR source.
source = 'wa_fcat-fieldname = p_value.'.
APPEND source. CLEAR source.
source = 'APPEND wa_fcat to lt_fcat.'.
APPEND source. CLEAR source.
source = 'CLEAR wa_fcat.'.
APPEND source. CLEAR source.
source = 'endform. " FCAT'.
APPEND source. CLEAR source.
APPEND source. CLEAR source.
source = '*&---------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = '*& Form GET_FILE_DATA '.
APPEND source. CLEAR source.
source = '*&---------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = '* text'.
APPEND source. CLEAR source.
source = '*----------------------------------------------------------------------*'.
APPEND source. CLEAR source.
source = 'form GET_FILE_DATA .'.
APPEND source. CLEAR source.
IF p_xls = abap_true.
APPEND source. CLEAR source.
source = 'DATA: lt_raw TYPE truxs_t_text_data.'.
APPEND source. CLEAR source.
source = ' CLEAR lt_file.'.
APPEND source. CLEAR source.
source = ' CALL FUNCTION ' .
CONCATENATE source '''TEXT_CONVERT_XLS_TO_SAP''' INTO source.
APPEND source. CLEAR source.
source = ' EXPORTING'.
APPEND source. CLEAR source.
source = ' i_line_header = abap_true'.
APPEND source. CLEAR source.
source = ' i_tab_raw_data = lt_raw'.
APPEND source. CLEAR source.
source = ' i_filename = p_fname'.
APPEND source. CLEAR source.
source = ' TABLES '.
APPEND source. CLEAR source.
source = ' i_tab_converted_data = lt_file'.
APPEND source. CLEAR source.
source = ' EXCEPTIONS '.
APPEND source. CLEAR source.
source = ' conversion_failed = 1'.
APPEND source. CLEAR source.
source = ' OTHERS = 2. .'.
APPEND source. CLEAR source.
ELSEIF p_txt = abap_true.
source = ' CALL FUNCTION '.
CONCATENATE source '''GUI_UPLOAD''' INTO source.
APPEND source. CLEAR source.
source = ' EXPORTING'.
APPEND source. CLEAR source.
source = ' filename = p_Fname'.
APPEND source. CLEAR source.
source = ' HAS_FIELD_SEPARATOR = abap_true '.
APPEND source. CLEAR source.
source = 'tables'.
APPEND source. CLEAR source.
source = ' data_tab = lt_file.'.
APPEND source. CLEAR source.
APPEND source. CLEAR source.
ENDIF.
source = ' endform. " GET_FILE_DATA '.
APPEND source. CLEAR source.
source = '* This report generated from automation report ( Author : Ramkumar K ) '.
APPEND source. CLEAR source.
ENDFORM. " GET_SUBROUTINES
*&---------------------------------------------------------------------*
*& Form CHECK_PRG_NAME
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM check_prg_name .
DATA: l_progname TYPE progname.
DATA: l_answer.
DATA: l_subrc LIKE sy-subrc.
DATA: l_leave_to_editor.
* programname correct?
l_progname = p_prg.
report = p_prg.
CALL FUNCTION 'RS_PROGRAM_CHECK_NAME'
EXPORTING
progname = l_progname
EXCEPTIONS
OTHERS = 04.
IF sy-subrc >< 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* program should not exist
SELECT SINGLE * FROM trdir WHERE name = l_progname.
IF sy-subrc = 0.
CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
EXPORTING
defaultoption = 'N'
textline1 = 'Program already exists! '(040)
textline2 = 'Delete and recreate it? '(041)
titel = 'Creating a new program '(042)
start_column = 25
start_row = 6
IMPORTING
answer = l_answer.
IF l_answer = 'J'.
PERFORM delete_program USING l_progname CHANGING l_subrc.
IF l_subrc = 0.
* MESSAGE I611 WITH L_PROGNAME.
ELSE.
EXIT.
ENDIF.
ELSE.
EXIT.
ENDIF.
ENDIF.
* create program attributes
CLEAR trdir.
trdir-name = l_progname.
trdir-subc = '1'.
CALL FUNCTION 'RS_EDTR_ATTR_ADD'
EXPORTING
program_name = l_progname
called_by_shdb = 'X'
with_trdir_entry = 'X'
IMPORTING
leave_to_editor = l_leave_to_editor
CHANGING
program_trdir = trdir
EXCEPTIONS
program_name_missing = 1
program_exists = 2
wrong_parameter_value = 3
OTHERS = 4.
IF sy-subrc >< 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* attributes saved?
SELECT SINGLE * FROM trdir WHERE name = trdir-name.
CHECK sy-subrc = 0.
* create program
ENDFORM. " CHECK_PRG_NAME
*&---------------------------------------------------------------------*
*& Form DELETE_PROGRAM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_L_PROGNAME text
* <--P_L_SUBRC text
*----------------------------------------------------------------------*
FORM delete_program USING p_progname
CHANGING p_subrc.
DATA: l_devclass LIKE tadir-devclass.
CALL FUNCTION 'RS_PROGRAM_GET_DEVCLASS'
EXPORTING
progname = p_progname
IMPORTING
devclass = l_devclass
EXCEPTIONS
OTHERS.
CALL FUNCTION 'RS_DELETE_PROGRAM'
EXPORTING
program = p_progname
suppress_popup = ' '
tadir_devclass = l_devclass
EXCEPTIONS
enqueue_lock = 1
object_not_found = 2
permission_failure = 3
reject_deletion = 5 "abbr. in popup
OTHERS = 4.
p_subrc = sy-subrc.
IF sy-msgno = '055'. p_subrc = 1. ENDIF. "progr. gesperrt
IF p_subrc < 5.
MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " DELETE_PROGRAM
*&---------------------------------------------------------------------*
*& Form ASSIGN_MODE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM assign_mode .
IF p_ns = abap_true.
gv_mode = 'N'.
ELSEIF p_as = abap_true.
gv_mode = 'A' .
ELSEIF p_es = abap_true.
gv_mode = 'E' .
ELSEIF p_ds = abap_true.
gv_mode = 'P' .
ENDIF.
IF p_st = abap_true.
gv_sync = 'S'.
ELSEIF p_at = abap_true.
gv_sync = 'A' .
ENDIF.
ENDFORM. " ASSIGN_MODE
*&---------------------------------------------------------------------*
*& Form CHECK_TABLE_CONTROL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM check_table_control .
DATA : lv_len TYPE i,
lv_type TYPE dd01v-datatype.
CLEAR gv_cflag1.
lv_len = strlen( dynpro_fields-fieldname ) .
lv_len = lv_len - 3 .
gv_char = dynpro_fields-fieldname+lv_len(2).
CALL FUNCTION 'NUMERIC_CHECK'
EXPORTING
string_in = gv_char
IMPORTING
* STRING_OUT = STRING_OUT
htype = lv_type.
IF lv_type = 'CHAR'.
ELSE.
IF gv_cflag IS INITIAL .
gv_cflag = abap_true.
ENDIF.
gv_cflag1 = abap_true.
lv_len = lv_len - 1.
gv_field = dynpro_fields-fieldname+0(lv_len).
ENDIF.
ENDFORM. " CHECK_TABLE_CONTROL
*&---------------------------------------------------------------------*
*& Form TEST_FILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form TEST_FILE .
*Create Dynamic Structure
FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE,
<dyn_wa> TYPE any,
<dyn_field> TYPE any.
DATA: dy_table TYPE REF TO data,
dy_line TYPE REF TO data.
DATA :lv_sum TYPE i.
DATA :lt_table_s TYPE lvc_t_fcat ,
ls_table_s TYPE lvc_S_fcat ,
lv_s_name TYPE REF TO data,
lv_length TYPE i,
lv_length1 TYPE i,
lv_str TYPE string,
* lv_str(30),
lv_field(30),
lv_value(30),
lv_type TYPE dd01v-datatype,
lt_dd03m TYPE TABLE OF dd03m,
ls_dd03m TYPE dd03m.
DATA : lv_file_path TYPE string .
LOOP AT dynpro_fields .
SPLIT dynpro_fields-fieldname AT '-' INTO lv_str lv_field .
IF lv_field IS NOT INITIAL.
lv_length = strlen( lv_field ).
lv_length = lv_length - 4 .
lv_length1 = lv_length + 4 .
lv_length1 = lv_length1 - 1 .
IF lv_field+lv_length(1) = '(' AND lv_field+lv_length1(1) = ')'.
lv_length = lv_length + 4 .
lv_length = lv_length - 3 .
lv_value = lv_field+lv_length(2).
CALL FUNCTION 'NUMERIC_CHECK'
EXPORTING
string_in = lv_value
IMPORTING
* STRING_OUT = STRING_OUT
htype = lv_type.
IF lv_type = 'CHAR'.
ELSE.
lv_length = lv_length - 1 .
lv_field = lv_field+0(lv_length).
ENDIF.
ENDIF.
ENDIF.
ls_table_s-fieldname = lv_field .
SELECT SINGLE * FROM dd03m INTO ls_dd03m WHERE tabname = lv_str AND fieldname = lv_field AND ddlanguage = 'EN' .
APPEND ls_dd03m to lt_dd03m .
ls_table_s-scrtext_m = ls_dd03m-scrtext_m.
IF ls_dd03m-scrtext_m IS INITIAL .
ls_table_s-scrtext_m = ls_dd03m-ddtext.
ENDIF.
ls_table_s-tabname = lv_str .
ls_table_s-datatype = 'CHAR' ."ls_parame-t_f_dt .
ls_table_s-inttype = 'C'."ls_parame-t_f_inty .
ls_table_s-intlen = 60 .
APPEND ls_table_s TO lt_table_s .
CLEAR ls_table_s.
ENDLOOP.
**********************************************************06/04/2015
*SORT lt_table_s.
*DELETE ADJACENT DUPLICATES FROM lt_table_s COMPARING FIELDNAME .
DATA : lt_table_s_temp TYPE lvc_T_fcat.
TYPES : BEGIN OF lt_FIELDS ,
FIELD TYPE lvc_S_fcat-fieldname,
COUNT TYPE I,
END OF LT_FIELDS.
DATA : LT_FIELDS TYPE TABLE OF lt_FIELDS.
DATA : Ls_FIELDS TYPE lt_FIELDS.
*lt_table_s_temp = lt_table_s.
FIELD-SYMBOLS : <lt_table_s> TYPE lvc_s_fcat .
LOOP AT lt_table_s ASSIGNING <lt_table_s> .
READ TABLE lt_table_s_temp INTO <lt_table_s> WITH KEY fieldname = <lt_table_s>-fieldname .
IF sy-subrc = 0.
READ TABLE lt_FIELDS INTO ls_fields WITH KEY fielD = <lt_table_s>-fieldname .
IF SY-subrc = 0.
ls_fields-field = <lt_table_s>-fieldname .
ls_fields-count = ls_fields-count + 1.
MODIFY lt_FIELDS FROM ls_fields INDEX sy-tabix.
ELSE.
ls_fields-field = <lt_table_s>-fieldname .
ls_fields-count = 1 .
APPEND ls_fields to lt_FIELDS .
ENDIF.
DATA : co(1).
co = ls_fields-Count .
CONCATENATE <lt_table_s>-fieldname'_'co INTO <lt_table_s>-fieldname .
CONDENSE <lt_table_s>-fieldname .
ELSE.
APPEND <lt_table_s> to lt_table_s_temp.
ENDIF.
ENDLOOP.
*********************************************************06/04/2015
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = lt_table_s
i_length_in_byte = 'X'
IMPORTING
ep_table = lv_s_name.
ASSIGN lv_s_name->* TO <dyn_table>.
CREATE DATA dy_line LIKE LINE OF <dyn_table>.
ASSIGN dy_line->* TO <dyn_wa>.
*Adding Header Text Data
APPEND <dyn_wa> TO <dyn_table>.
DATA ls_table_index TYPE i VALUE 1.
LOOP AT lt_table_s INTO ls_table_s.
READ TABLE <dyn_table> INTO <dyn_wa> INDEX 1.
ASSIGN COMPONENT ls_table_index OF STRUCTURE <dyn_wa> TO <dyn_field> .
ls_table_index = ls_table_index + 1.
<dyn_field> = ls_table_s-scrtext_m.
MODIFY <dyn_table> FROM <dyn_wa> INDEX 1.
ENDLOOP.
*Adding Item Data
APPEND <dyn_wa> TO <dyn_table>.
* DATA ls_table_index TYPE i VALUE 1.
CLEAR ls_table_index.
LOOP AT dynpro_fields .
ls_table_index = sy-tabix.
READ TABLE <dyn_table> INTO <dyn_wa> INDEX 2.
ASSIGN COMPONENT ls_table_index OF STRUCTURE <dyn_wa> TO <dyn_field> .
ls_table_index = ls_table_index + 1.
<dyn_field> = dynpro_fields-fieldvalue.
MODIFY <dyn_table> FROM <dyn_wa> INDEX 2.
ENDLOOP.
*download file
lv_file_path = P_File.
*IF P_File = P_File1.
CONCATENATE lv_file_path p_grpid '.XLS' INTO lv_file_path.
* ENDIF.
CALL FUNCTION 'GUI_DOWNLOAD' " TO DOWNLOAD A TEXT DOCUMENT
EXPORTING
filename = lv_file_path
filetype = 'DAT'
TABLES
data_tab = <dyn_table>.
endform. " TEST_FILE
*&---------------------------------------------------------------------*
*& Form FILE_PATH
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form FILE_PATH .
*Download File
DATA :lv_d_file TYPE string.
cl_gui_frontend_services=>get_desktop_directory(
CHANGING
desktop_directory = lv_d_file " Desktop Directory
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4
).
IF sy-subrc <> 0.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
CALL METHOD cl_gui_cfw=>flush.
CONCATENATE lv_d_file '\' INTO p_file.
P_File1 = P_File.
ENDIF.
endform. " FILE_PATH
*&---------------------------------------------------------------------*
*& Form F4_HELP_FILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form F4_HELP_FILE .
CALL FUNCTION 'F4_FILENAME'
EXPORTING
PROGRAM_NAME = SYST-CPROG
DYNPRO_NUMBER = SYST-DYNNR
IMPORTING
FILE_NAME = P_File.
endform. " F4_HELP_FILE