0% found this document useful (0 votes)
22 views

ZGPUTR_BDC_LOG_REPORT

The document describes a utility program (ZGPUTR_BDC_LOG_REPORT_NEW) developed to enhance the user experience of tracing error logs generated during data loading via LSMW using BDC. It outlines the program's structure, including selection screens, data declarations, and processing logic for retrieving and displaying error records. The program aims to simplify the identification and reporting of errors that occur during batch data input sessions.

Uploaded by

Ravindra A
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
22 views

ZGPUTR_BDC_LOG_REPORT

The document describes a utility program (ZGPUTR_BDC_LOG_REPORT_NEW) developed to enhance the user experience of tracing error logs generated during data loading via LSMW using BDC. It outlines the program's structure, including selection screens, data declarations, and processing logic for retrieving and displaying error records. The program aims to simplify the identification and reporting of errors that occur during batch data input sessions.

Uploaded by

Ravindra A
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 25

************************************************************************

* PROGRAM ID : ZGPUTR_BDC_LOG_REPORT_NEW *
* PROGRAM TITLE : Utility Program to BDC Log Report *
* AUTHOR : Ravindra Anagani *
* SUPPLIER : IBM *
* DATE : 08/27/2009 *
* DEVELOPMENT ID : N/A *
* TRANSPORT NUMBER: ECDK937069 *
* Description : While loading data through LSMW's using BDC , *
* tracing error logs is not user friendly through *
* SM35. Hence to trace all the error records and *
* their messages this program has been developed. *
*=======================================================================
* CHANGE HISTORY LOG *
*----------------------------------------------------------------------*
* MOD. ID| DATE | NAME | TRANSPORT # | CHANGE REF. # *
************************************************************************

REPORT zgputr_bdc_log_report_new NO STANDARD PAGE HEADING


LINE-SIZE 1000
MESSAGE-ID zut.

TYPE-POOLS : slis. " Global types for generic components


DATA: v_grpid TYPE apql-groupid,
v_date TYPE apql-credate,
v_time TYPE apql-cretime,
v_trans(6) TYPE n, " Transaction counter: Batch input, statistics
v_usrid TYPE apql-creator.
***********************************************************************
* SELECTION SCREEN OUTPUT *
***********************************************************************
TABLES: apql.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
* (text-002 Session Details)
SELECT-OPTIONS: s_grpid FOR v_grpid OBLIGATORY, "BDC Session Name
s_date FOR v_date OBLIGATORY, "Date BDC Created
s_userid FOR v_usrid. "BDC Created By
PARAMETERS: cb_file AS CHECKBOX USER-COMMAND d2. " DEFAULT 'X'.
SELECT-OPTIONS: s_index FOR v_trans MODIF ID md4.

SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN:
BEGIN OF BLOCK a1 WITH FRAME TITLE text-014.
*-- File destination Radio Button
SELECTION-SCREEN BEGIN OF LINE.

PARAMETERS: rb_unix RADIOBUTTON GROUP r1 USER-COMMAND sr.

SELECTION-SCREEN:
COMMENT 4(25) text-012,
POSITION 33.

PARAMETERS: rb_pc RADIOBUTTON GROUP r1 .


SELECTION-SCREEN:
COMMENT 37(25) text-013,
POSITION 33.
SELECTION-SCREEN END OF LINE.
*-- Server Path
PARAMETERS p_srpath(50) LOWER CASE MODIF ID md1.
*-- Local File Path
PARAMETERS p_pcpath TYPE string
VISIBLE LENGTH 50 LOWER CASE MODIF ID md2.
*-- Path and File Names
PARAMETERS: p_infile TYPE string LOWER CASE NO-DISPLAY.
*-- File Names
PARAMETERS: p_fname1 TYPE zlppa_ca_int_fn DEFAULT text-015
OBLIGATORY .

PARAMETERS: cb_headr AS CHECKBOX.


SELECTION-SCREEN END OF BLOCK a1.

***********************************************************************
* DATA DECLARATION *
***********************************************************************
TABLES:
apqi,
apqd,
d020t.

TABLES:
bdcth,
bdcmh.

TYPES:
BEGIN OF ty_content, " OCCURS 0,
entry(200) TYPE c,
END OF ty_content.

TYPES:
BEGIN OF ty_fld, " OCCURS 0,
program TYPE bdc_prog, " BDC module pool
dynpro TYPE bdc_dynr, " BDC Screen number
fnam TYPE fnam_____4, " Field name
tabname TYPE tabname, " Table Name
fieldname TYPE fieldname, " Field Name
fieldtext TYPE as4text, " Short Description of Repository Objects
END OF ty_fld,

BEGIN OF ty_final, "OCCURS 0,


groupid LIKE apqi-groupid,
credate TYPE char10,
cretime TYPE char8,
pernr TYPE p_pernr,
subty TYPE subty,
msg TYPE string,
index(6) TYPE n,
record TYPE string,
END OF ty_final,

BEGIN OF ty_err, " OCCURS 0,


groupid LIKE apqi-groupid,
credate TYPE char10,
cretime TYPE char8,
qid LIKE apqi-qid,
trans LIKE apqd-trans,
block LIKE apqd-block,
tcode LIKE tstc-tcode,
program LIKE bdcdata-program,
dynpro LIKE bdcdata-dynpro,
fnam LIKE bdcdata-fnam,
fval LIKE bdcdata-fval,
END OF ty_err,

BEGIN OF ty_selfld, " OCCURS 0,


program LIKE bdcdata-program,
dynpro LIKE bdcdata-dynpro,
fnam LIKE bdcdata-fnam,
END OF ty_selfld,
BEGIN OF ty_tab,
line(5000) TYPE c,
END OF ty_tab,
BEGIN OF ty_mnr, " OCCURS 0,
old_msg_no TYPE bdc_mnr,
END OF ty_mnr.
**********Internal tables

DATA: i_selerr TYPE STANDARD TABLE OF ty_err,


i_content TYPE STANDARD TABLE OF ty_content,
i_fld TYPE STANDARD TABLE OF ty_fld,
i_final TYPE STANDARD TABLE OF ty_final,
i_err TYPE STANDARD TABLE OF ty_err,
i_selfld TYPE STANDARD TABLE OF ty_selfld,
i_tab TYPE STANDARD TABLE OF ty_tab,
i_data TYPE STANDARD TABLE OF ty_tab,
i_mnr TYPE STANDARD TABLE OF ty_mnr.

DATA: i_apqi TYPE STANDARD TABLE OF apqi, " OCCURS 0 WITH HEADER LINE,
i_apqd TYPE STANDARD TABLE OF apqd, " OCCURS 0 WITH HEADER LINE,
i_dfies TYPE STANDARD TABLE OF dfies. " OCCURS 0 WITH HEADER LINE.
DATA: i_sort TYPE slis_t_sortinfo_alv,
wa_sort TYPE slis_sortinfo_alv.
DATA: wa_selerr TYPE ty_err,
wa_content TYPE ty_content,
wa_fld TYPE ty_fld,
wa_final TYPE ty_final,
wa_err TYPE ty_err,
wa_selfld TYPE ty_selfld,
wa_mnr TYPE ty_mnr,
wa_apqi TYPE apqi,
wa_apqd TYPE apqd,
wa_tab TYPE ty_tab,
wa_data TYPE ty_tab,
wa_dfies TYPE dfies.
* Interne Felder
DATA:
flg_intensified TYPE char1,
flg_select TYPE char1,
flg_done TYPE char1,
flg_newgroup TYPE char1,
flg_newtrans TYPE char1,
flg_uline TYPE char1,
offset TYPE i,
length TYPE i,
vardata LIKE apqd-vardata,
rest TYPE i,
l_count TYPE i,
char20(20) TYPE c,
part1 LIKE bdcdata-fnam,
part2 LIKE bdcdata-fnam,
part3 LIKE bdcdata-fnam,
string(100) TYPE c,
checkbox TYPE char1,
line_counter TYPE i,
nr_lines TYPE i,
l_v_date TYPE char10,
l_v_time TYPE char8,
groupid LIKE apqi-groupid.

* Konstanten
CONSTANTS:
yes TYPE char1 VALUE 'X',
no TYPE char1 VALUE ' ',
c_0 TYPE char1 VALUE '0',
c_1 TYPE char1 VALUE '1'.

DATA: l_c_var LIKE sy-tabix,


l_c_var1 LIKE sy-tabix,
l_v_colhead TYPE string,
l_v_msg TYPE string.
DATA:v_apqd_out(1).
DATA:v_pernr(1).
DATA: v_old_trans TYPE apq_tran.
DATA : v_bdclm_trans TYPE apq_tran.
DATA: v_count TYPE i.

DATA: l_trans_low LIKE apqd-trans,


l_trans_high LIKE apqd-trans.

RANGES : r_index FOR v_trans,


r_sess FOR v_grpid,
r_date FOR v_date.

****** INCLUDES
INCLUDE rsbdcil1. " data definitionen fuer rsbdcil2
INCLUDE zgputn_bdc_log_forms_new. " Forms zur Protokollanzeige
INCLUDE rsbdcil3. " Form zum Lesen des TemSe Files

*************************************************************************
** At Selection Screen
*************************************************************************

AT SELECTION-SCREEN OUTPUT.
PERFORM modify_screen.

PERFORM default_file_paths.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_pcpath.


PERFORM select_pc_path.

AT SELECTION-SCREEN.
IF rb_pc EQ yes.
CONCATENATE:
p_pcpath p_fname1 INTO p_infile.
ELSE.
CONCATENATE:
p_srpath p_fname1 INTO p_infile.
ENDIF.

START-OF-SELECTION.
IF cb_file = yes.
*Get data from PC or Application Server
PERFORM get_data.
ENDIF.
*--- Unicode related corrections: 2 lines -------------------------*
* DESCRIBE FIELD BDCMH LENGTH OFFSET.

DESCRIBE FIELD bdcmh LENGTH offset IN CHARACTER MODE.

PERFORM select_error_sessions.
SORT i_apqi BY groupid credate.

IF cb_headr = yes.
r_sess-low = s_grpid-low.
r_date-low = s_date-low.
*****Write to in System Formatted date
WRITE r_date-low TO l_v_date USING EDIT MASK '____/__/__' .. "YYYY/MM/DD.
wa_final-groupid = r_sess-low.
wa_final-credate = l_v_date.
wa_final-cretime = ''.
wa_final-pernr = ''.
wa_final-subty = ''.
wa_final-msg = ''.
wa_final-index = 0.
CLEAR l_v_date.
READ TABLE i_tab INTO wa_tab INDEX 1.
IF sy-subrc IS INITIAL.
wa_final-record = wa_tab-line.
ENDIF.
APPEND wa_final TO i_final.
CLEAR: wa_final, wa_tab.

r_index-sign = 'I'.
r_index-option = 'EQ'.
r_index-low = s_index-low + 1.
r_index-high = s_index-high + 1.
APPEND r_index.

LOOP AT i_tab INTO wa_tab.


CLEAR wa_data.
CHECK sy-tabix GE r_index-low.
CHECK sy-tabix LE r_index-high.
wa_data-line = wa_tab-line.
APPEND wa_data TO i_data.
ENDLOOP.
ELSE.
r_index-sign = 'I'.
r_index-option = 'EQ'.
r_index-low = s_index-low.
r_index-high = s_index-high.
APPEND r_index.
LOOP AT i_tab INTO wa_tab.
CLEAR wa_data.
CHECK sy-tabix GE r_index-low.
CHECK sy-tabix LE r_index-high.
wa_data-line = wa_tab-line.
APPEND wa_data TO i_data.
ENDLOOP.
ENDIF.

* APQI contains all sessions data


LOOP AT i_apqi INTO wa_apqi.
CLEAR v_apqd_out.
CLEAR i_apqd[].
* Retrieve all BDC Session Logs that match
SELECT * FROM apql INTO TABLE bdcld WHERE mandant = sy-mandt
AND qid EQ wa_apqi-qid.
IF sy-subrc EQ 0.
* Produce summary of of the logs retrieved
LOOP AT bdcld.
* Retrieve log messages for current BDC log
PERFORM log_mes.
ENDLOOP.
ENDIF.

CLEAR: l_trans_low,
l_trans_high.

l_trans_low = 1.
l_trans_high = 500.

DO.

CLEAR i_apqd[].

* APQD contains errors in each session


* Retrieve all BDC Session data that match
SELECT * FROM apqd
INTO TABLE i_apqd
WHERE qid = wa_apqi-qid
AND trans BETWEEN l_trans_low AND l_trans_high.
IF sy-subrc EQ 0.ENDIF.

LOOP AT i_apqd INTO wa_apqd.


CASE wa_apqd-vardata(1).
WHEN 'S'.
bdcth = wa_apqd-vardata.
CLEAR:
wa_err.
wa_err-groupid = wa_apqi-groupid.
wa_err-credate = wa_apqi-credate.
wa_err-cretime = wa_apqi-cretime.
wa_err-qid = wa_apqi-qid.
wa_err-tcode = bdcth-tcode.
wa_err-trans = wa_apqd-trans.
wa_err-block = wa_apqd-block.
CASE bdcth-state.
WHEN 'E'.
flg_select = yes.
WHEN OTHERS.
flg_select = no.
ENDCASE.
WHEN 'M'.
IF flg_select = yes.
bdcmh = wa_apqd-vardata.
wa_err-program = bdcmh-prog.
wa_err-dynpro = bdcmh-dynr.
CLEAR vardata.
length = wa_apqd-varlen - offset.
IF length > 0.
vardata = wa_apqd-vardata+offset(length).
CLEAR i_content[].
SPLIT vardata AT bdcmh-sepc INTO TABLE i_content.
IF NOT v_apqd_out IS INITIAL AND
v_old_trans EQ wa_apqd-trans.
CONTINUE.
ELSE.

* BDCLM contains all the error messages for one record.


* To show all the error msgs in the report we need to loop
* on TRANS field
LOOP AT bdclm WHERE tcnt EQ wa_apqd-trans.
IF v_bdclm_trans NE wa_apqd-trans.
CLEAR wa_mnr.
REFRESH i_mnr.
ELSE.
READ TABLE i_mnr INTO wa_mnr WITH KEY old_msg_no = bdclm-mnr.
IF sy-subrc EQ 0.
CONTINUE.
ENDIF.
ENDIF.
* Retrieve message text
CLEAR mtext.
PERFORM get_text.
IF NOT wa_final-msg IS INITIAL.
CONCATENATE wa_final-msg
mtext
INTO wa_final-msg
SEPARATED BY ';'.
ELSE.
wa_final-msg = mtext.
ENDIF.
* There is no need of this FM call...But as program is tested and working fine
* we do not have enough time to clean the unnecessary code it remains as it is.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
id = bdclm-mid
lang = 'E'
no = bdclm-mnr
IMPORTING
msg = l_v_msg
EXCEPTIONS
not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
ELSE.
v_bdclm_trans = wa_apqd-trans.
wa_mnr-old_msg_no = bdclm-mnr.
APPEND wa_mnr TO i_mnr.
CLEAR wa_mnr.
IF NOT wa_final-msg IS INITIAL.
ELSE.
MOVE l_v_msg TO wa_final-msg.
ENDIF.
CLEAR l_v_msg.

ENDIF.
ENDLOOP.
ENDIF.
* i_content is the KEY table for this program. It contains all the fields
* and their values for that record. In future if we need to add any further fields
* we have to add in this section like the way PERNR and SEARK added below
LOOP AT i_content INTO wa_content.
rest = sy-tabix MOD 2.
IF rest = 1.
wa_err-fnam = wa_content.
IF wa_content CS 'PERNR'.
v_pernr = 'X'.
CLEAR l_c_var.
l_c_var = sy-tabix.
ENDIF.
IF wa_content CS 'SEARK'.
CLEAR v_pernr.
CLEAR l_c_var.
l_c_var = sy-tabix.
ENDIF.
ELSE.
wa_err-fval = wa_content.
IF NOT l_c_var IS INITIAL.
CLEAR l_c_var1.
l_c_var1 = l_c_var + 1.
CLEAR l_c_var.
ENDIF.

IF l_c_var1 EQ sy-tabix.
CLEAR wa_final-pernr.
wa_final-pernr = wa_content.
wa_final-groupid = wa_apqi-groupid.
*****Write to in System Formatted date
WRITE wa_apqi-credate TO l_v_date USING EDIT MASK
'____/__/__' .. "YYYY/MM/DD.
wa_final-credate = l_v_date.
* wa_final-credate = wa_apqi-credate.
WRITE wa_apqi-cretime TO l_v_time USING EDIT MASK
'__:__:__' .. "HH:MM:SS.
wa_final-cretime = l_v_time.
* wa_final-cretime = wa_apqi-cretime.
wa_final-index = wa_apqd-trans.
REPLACE '&1' IN wa_final-msg WITH ' '.
REPLACE '&2' IN wa_final-msg WITH ' '.
REPLACE '&3' IN wa_final-msg WITH ' '.
REPLACE '&4' IN wa_final-msg WITH ' '.
CONDENSE wa_final-msg.
*Get Subtype
LOOP AT i_content INTO wa_content.
IF wa_content CS 'SUBTY'.
CLEAR l_c_var.
l_c_var = sy-tabix.
ENDIF.
ENDLOOP.
IF NOT l_c_var IS INITIAL.
CLEAR l_c_var1.
l_c_var1 = l_c_var + 1.
CLEAR l_c_var.
LOOP AT i_content INTO wa_content FROM l_c_var1 TO
l_c_var1.
wa_final-subty = wa_content.
ENDLOOP.
ENDIF.
*****************If input file contains header, count will increase
* IF cb_headr = yes.
* l_count = wa_apqd-trans + 1.
* ELSE.
* l_count = wa_apqd-trans.
* ENDIF.
READ TABLE i_data INTO wa_data INDEX wa_apqd-trans.
"l_count.
IF sy-subrc IS INITIAL.
wa_final-record = wa_data-line.
ENDIF.
CLEAR: l_count, wa_data.
APPEND wa_final TO i_final.
CLEAR wa_final.
v_apqd_out = 'X'.
v_old_trans = wa_apqd-trans.
CLEAR l_c_var1.
EXIT.
ENDIF.
APPEND wa_err TO i_err.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
WHEN OTHERS.
ENDCASE.
ENDLOOP.
IF sy-subrc NE 0.
EXIT.
ENDIF.

l_trans_low = l_trans_high + 1.
ADD 500 TO l_trans_high.

ENDDO.

ENDLOOP.

END-OF-SELECTION.

* ALV Display of the final internal table


PERFORM display_report.

*&---------------------------------------------------------------------*
*& Form DISPLAY_REPORT
*&-------------------------------------------------------------------#-*
* Display the output report for the final internal table
*----------------------------------------------------------------------*
FORM display_report .

* Local data declaration for populating ALV


DATA: l_i_fieldcat TYPE slis_t_fieldcat_alv, " Field Catalog table
l_wa_fieldcat TYPE slis_fieldcat_alv. " Field Catalog table
DATA: l_r_fieldcat TYPE slis_fieldcat_alv. " Field Catalog work area
DATA: l_layout TYPE slis_layout_alv. " Layout structure

DATA: l_v_seltext_l LIKE dd03p-scrtext_l. " long key word

** Defining Macro for Populating the fieldcatalog


DEFINE populate_fieldcat.
clear: l_r_fieldcat.
add 1 to l_r_fieldcat-col_pos. " Column Position
l_r_fieldcat-fieldname = &1. "FieldName
l_r_fieldcat-ref_tabname = 'I_FINAL'. "Internal table Used
l_r_fieldcat-outputlen = 25. "Output Length
l_r_fieldcat-seltext_l = &2. "Text to be displayed on Output
l_r_fieldcat-just = &3. "Justification of Output
append l_r_fieldcat to l_i_fieldcat.
END-OF-DEFINITION.

IF v_pernr IS INITIAL.
l_v_seltext_l = 'Object ID'.
ELSE.
l_v_seltext_l = 'Personnel No.'.
ENDIF.

l_v_colhead = 'Input File Records'.

* Populating the fieldcatalog for Detail Output


populate_fieldcat 'GROUPID' 'Group ID' 'C'.
populate_fieldcat 'CREDATE' 'Create Date' 'C'.
populate_fieldcat 'CRETIME' 'Create Time' 'C'.
populate_fieldcat 'INDEX' 'Index' 'C'.
populate_fieldcat 'PERNR' l_v_seltext_l 'C'.
populate_fieldcat 'SUBTY' 'Subty' 'C'.
populate_fieldcat 'MSG' 'Message' 'L'.
populate_fieldcat 'RECORD' l_v_colhead 'L'.

* Preperation of the Layout


l_layout-colwidth_optimize = 'X'.
l_layout-cell_merge = 'X'.

PERFORM do_sort.

* Function Module to display the output


CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_callback_top_of_page = 'TOP_OF_PAGE'
i_grid_title = 'US Loading Evaluation'
is_layout = l_layout
it_fieldcat = l_i_fieldcat
it_sort = i_sort[]
TABLES
t_outtab = i_final[]
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

ENDFORM. " DISPLAY_REPORT


*&---------------------------------------------------------------------*
*& Form TOP_OF_PAGE
*&---------------------------------------------------------------------*
* Header Declaration
*----------------------------------------------------------------------*
FORM top_of_page .

* Local Data Declaration


DATA : i_header TYPE slis_t_listheader,
r_header TYPE slis_listheader.
CONSTANTS: k_dash(1) TYPE c VALUE '-'.
DATA: v_lines TYPE i,
l_v_lines TYPE i.

REFRESH: i_header.
CLEAR: r_header.

DESCRIBE TABLE i_final LINES v_lines.

IF cb_headr = yes.
l_v_lines = v_lines - 1.
ELSE.
l_v_lines = v_lines.
ENDIF.

* Header Title
r_header-typ = 'H'.
r_header-info = 'BDC Error Evaluation'.

APPEND r_header TO i_header.


CLEAR r_header.
* Date
r_header-typ = 'S'.
r_header-key = 'Error Records:'.
r_header-info = l_v_lines.

APPEND r_header TO i_header.


CLEAR: r_header.

* Writing the Report Header


CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = i_header.

ENDFORM. " TOP_OF_PAGE


*&---------------------------------------------------------------------*
*& Form DO_SORT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM do_sort.
CLEAR wa_sort.
wa_sort-fieldname = 'CRETIME'.
wa_sort-up = yes.
APPEND wa_sort TO i_sort.
CLEAR wa_sort.
wa_sort-fieldname = 'CREDATE'.
wa_sort-up = yes.
APPEND wa_sort TO i_sort.
ENDFORM. " DO_SORT
****************************************************************************
ZGPUTN_BDC_LOG_FORMS_NEW:

************************************************************************
*
* (c) SAP Aktiengesellschaft
* Systeme, Anwendungen und Produkte in der Datenverarbeitung
*
* authors: Brigitte Hering (Digital) based on RSBDCLOG by Volker Harms
************************************************************************
* Common include file for RSBDCLOG (> 4.0), RSBDCCKT, ...
* Needed data definitions in Include RSBDCIL1.

*-HISTORY-------------------------
* 30.04.1997 first Version
*-END-HISTORY--------------------

*---------------------------------------------------------------------*
* FORM : log_mes *
* *
*---------------------------------------------------------------------*
FORM log_mes.
*
CLEAR: bdclm.
REFRESH: bdclm.
FREE bdclm.
*
PERFORM read_bdc_log_plain
TABLES
logtable
USING
bdcld-temseid bdcld-mandant.

IF sy-subrc GT 0. " Fehler beim Lesen des


return = 325. " TemSe Protokollfiles
MOVE bdcld-temseid TO logname.
EXIT.
ENDIF.

LOOP AT logtable.
bdclm-indate = logtable-enterdate.
bdclm-intime = logtable-entertime.
bdclm+14 = logtable-logmessage.
APPEND bdclm.
ENDLOOP.

*
ENDFORM. " log_mes.
*/
*---------------------------------------------------------------------*
* FORM : show_mes *
* *
*---------------------------------------------------------------------*
FORM show_mes.
*
IF return GT 0.
EXIT.
ENDIF.
*
CLEAR: old.
LOOP AT bdclm. " Ausgabe der Log-Partition
FORMAT RESET.
IF old-tcnt EQ bdclm-tcnt AND
old-mcnt EQ bdclm-mcnt .
ELSE.
WRITE:/01(102) space COLOR COL_NORMAL.
WRITE: 10(01) '.'.
PERFORM write_vline USING ' ' 10.
PERFORM write_vline USING ' ' 15.
PERFORM write_vline USING ' ' 29.
PERFORM write_vline USING ' ' 1.
PERFORM write_vline USING ' ' 102.
ENDIF.
MOVE: bdclm-tcnt TO old-tcnt,
bdclm-mcnt TO old-mcnt.
WRITE:/01(102) space COLOR COL_NORMAL.
WRITE: 02(08) bdclm-intime USING EDIT MASK '__:__:__'
COLOR COL_NORMAL,
11(04) bdclm-tcode COLOR COL_NORMAL,
16(08) bdclm-module COLOR COL_NORMAL,
25(04) bdclm-dynr COLOR COL_NORMAL,
30(01) bdclm-mart COLOR COL_NORMAL,
31(02) bdclm-mid COLOR COL_NORMAL,
33(03) bdclm-mnr COLOR COL_NORMAL.
PERFORM write_vline USING ' ' 10.
PERFORM write_vline USING ' ' 15.
PERFORM write_vline USING ' ' 29.
PERFORM write_vline USING ' ' 1.
MOVE bdclm TO lm.
PERFORM get_text.
WRITE: 37(098) mtext COLOR COL_NORMAL.
PERFORM write_vline USING ' ' 102.
MOVE lm-mpar TO bdclm-mpar.
HIDE: bdclm, mtext.
ENDLOOP.
*
ENDFORM. " show_mes.
*/

*---------------------------------------------------------------------*
* FORM : write_vline *
* *
*---------------------------------------------------------------------*
FORM write_vline USING mode pos.
*
*** Vline schreiben
*
IF mode NE 'T'.
FORMAT INTENSIFIED.
ENDIF.
POSITION pos.
WRITE: sy-vline.
IF mode NE 'T'.
FORMAT RESET.
ENDIF.
*
ENDFORM. " last_listline
*/

*---------------------------------------------------------------------*
* FORM : get_text # *
* *
*---------------------------------------------------------------------*
FORM get_text.
*
*** aufbereiten des Messagetextes
*
*REAK-POINT 1.
PERFORM get_text1.
EXIT.
*
IF bdclm-mparcnt CN digits. "Korrupter Datensatz:
bdclm-mparcnt = 0. "z.B. Hexnullen
ENDIF.
*
SELECT SINGLE * FROM t100
WHERE sprsl = sy-langu
AND arbgb = bdclm-mid
AND msgnr = bdclm-mnr.
*
*
IF sy-subrc EQ 0.
* REFRESH: MT.
CLEAR: mtext,
parcnt,
mparcnt,
charcnt,
wcnt,
mt,
sy-fdpos.
*
MOVE bdclm-mparcnt TO mparcnt.
*
IF t100-text CA '$&'. "Kennung fuer parameter:
MOVE t100-text TO mtext1. " alt '$' --- neu '&'
ELSE.
MOVE t100-text TO mtext.
EXIT.
ENDIF.
CLEAR: mt.
WHILE wcnt LE 73.
IF mtext1 CA '$&'.
parcnt = parcnt + 1.
CLEAR: mt-text.
WRITE: mtext1 TO mt-text+0(sy-fdpos).
mt-off = charcnt.
mt-len = sy-fdpos.
WRITE: mt-text TO mtext+mt-off(mt-len).
* APPEND MT.
charcnt = charcnt + sy-fdpos.
wcnt = charcnt.
SHIFT mtext1 BY sy-fdpos PLACES.
* kopiere parameter aus bdclm-mpar nach tabelle mt
IF parcnt > mparcnt.
SHIFT mtext1 BY 1 PLACES.
wcnt = wcnt + 1 .
ELSE.
CLEAR: mt-text.
MOVE bdclm-mpar TO par.
* SHIFT PAR BY 2 PLACES.
IF par-len CN digits. "convert_no_number
par-len = 1. "entsch�rfen
ENDIF.
WRITE: par-text TO mt-text+0(par-len).
mt-off = charcnt.
mt-len = par-len.
sp_len = par-len - 1.
WRITE: mt-text TO mtext+mt-off(mt-len).
* APPEND MT.
charcnt = charcnt + par-len.
wcnt = wcnt + 1.
SHIFT mtext1 .
par-len = par-len + 2. "laenge von par = 2.
SHIFT bdclm-mpar BY par-len PLACES.
ENDIF.
ELSE.
CLEAR: mt, par-len.
par-len = 73 - charcnt.
WRITE: mtext1 TO mt-text+0(par-len).
IF parcnt > mparcnt.
mt-off = wcnt.
ELSE.
mt-off = wcnt + sp_len.
ENDIF.
mt-len = par-len.
WRITE: mt-text TO mtext+mt-off(mt-len).
* APPEND MT.
wcnt = 74.
ENDIF.
ENDWHILE.
ELSE.
* MOVE 'Text unbekannt ... ' TO MTEXT.
IF bdclm-mparcnt EQ '0'.
EXIT.
ENDIF.
CLEAR: mparcnt, mtext.
WHILE mparcnt LT bdclm-mparcnt. "#EC PORTABLE
CLEAR: mt.
mparcnt = mparcnt + 1.
MOVE bdclm-mpar TO par.
WRITE: par-text TO mt-text+0(par-len).
IF mparcnt EQ 1.
mt-off = 0.
ELSE.
mt-off = sp_len + 1.
ENDIF.
mt-len = par-len.
sp_len = mt-off + par-len.
WRITE: mt-text TO mtext+mt-off(mt-len).
par-len = par-len + 2. "laenge von par = 2.
SHIFT bdclm-mpar BY par-len PLACES.
ENDWHILE.
ENDIF.
*
* CONDENSE MTEXT.
*
ENDFORM. " get_text
*/
*---------------------------------------------------------------------*
* FORM : get_text1 *
* *
*---------------------------------------------------------------------*
FORM get_text1.
*
*** aufbereiten des Messagetextes
*
DATA: shiftln TYPE i,
vartcnt TYPE i,
fdpos LIKE sy-fdpos.
*
*REAK HARMS.
*
IF bdclm-mparcnt CN digits. "Korrupter Datensatz:
bdclm-mparcnt = 0. "z.B. Hexnullen
ENDIF.
*
SELECT SINGLE * FROM t100
WHERE sprsl = sy-langu
AND arbgb = bdclm-mid
AND msgnr = bdclm-mnr.
*
*
IF sy-subrc EQ 0.
CLEAR: mtext,
parcnt,
mparcnt,
charcnt,
wcnt,
mt,
sp_len,
sy-fdpos.
*
MOVE bdclm-mparcnt TO mparcnt.
*
IF t100-text CA '$&'. "Kennung fuer parameter:
MOVE t100-text TO mtext1. " alt '$' --- neu '&'
ELSE.
MOVE t100-text TO mtext.
EXIT.
ENDIF.
* variable teile aus batch-input protokoll in mttab bringen.
REFRESH mttab.
CLEAR shiftln.
DO mparcnt TIMES.
CLEAR: par, mttab.
MOVE bdclm-mpar TO par.
IF par-len CN digits. "convert_no_number
par-len = 1. "entsch�rfen
ENDIF.
WRITE par-text TO mttab-text(par-len).
MOVE par-len TO mttab-len.
MOVE mparcnt TO mttab-off.
APPEND mttab.
shiftln = par-len + 2.
SHIFT bdclm-mpar BY shiftln PLACES.
ENDDO.
*
mtext2 = mtext1.
IF bdclm-mid EQ '00' AND " sonderbehandlung s00368
bdclm-mnr EQ '368' AND
bdclm-mart EQ 'S'.
CLEAR mtext2.
CLEAR mttab.
READ TABLE mttab INDEX 1.
WRITE mttab-text TO mtext2+0(mttab-len).
CLEAR mttab.
READ TABLE mttab INDEX 2.
WRITE mttab-text TO mtext2+35(mttab-len).
mtext = mtext2.
EXIT.
ENDIF.

do_condense = x.
CLEAR: mt, vartcnt, mtvaroff.
WHILE vartcnt LE 3.
vartcnt = vartcnt + 1.
IF mtext1 CA '$&'.
parcnt = parcnt + 1.
IF sy-fdpos GT 0.
fdpos = sy-fdpos - 1. " neu sy-fdpos -1
ELSE.
fdpos = sy-fdpos.
ENDIF.
SHIFT mtext1 BY sy-fdpos PLACES.
IF mtext1(1) EQ '&'.
SHIFT mtext1 BY 1 PLACES.
CASE mtext1(1).
WHEN ' '. "'& '
PERFORM replace_var USING '& ' parcnt fdpos.
WHEN '$'. "'&&'
PERFORM replace_var USING '&&' 0 fdpos.
WHEN '1'. "'&1'
PERFORM replace_var USING '&1' 1 fdpos.
WHEN '2'. "'&2'
PERFORM replace_var USING '&2' 2 fdpos.
WHEN '3'. "'&3'
PERFORM replace_var USING '&3' 3 fdpos.
WHEN '4'. "'&4'
PERFORM replace_var USING '&4' 4 fdpos.
WHEN OTHERS. "'&'
PERFORM replace_var USING '&<' parcnt fdpos.
ENDCASE.
ENDIF.
IF mtext1(1) EQ '$'.
SHIFT mtext1 BY 1 PLACES.
CASE mtext1(1).
WHEN ' '. "'$ '
PERFORM replace_var USING '$ ' parcnt fdpos.
WHEN '$'. "'$$'
PERFORM replace_var USING '$$' 0 fdpos.
WHEN '1'. "'$1'
PERFORM replace_var USING '$1' 1 fdpos.
WHEN '2'. "'$2'
PERFORM replace_var USING '$2' 2 fdpos.
WHEN '3'. "'$3'
PERFORM replace_var USING '$3' 3 fdpos.
WHEN '4'. "'$4'
PERFORM replace_var USING '$4' 4 fdpos.
WHEN OTHERS. "'$'
PERFORM replace_var USING '$<' parcnt fdpos.
ENDCASE.
ENDIF.
ENDIF.
ENDWHILE.
*
IF mtext2 CA '%%_D_%%'.
REPLACE '%%_D_%%' WITH '$' INTO mtext2.
ENDIF.
IF mtext2 CA '%%_A_%%'.
REPLACE '%%_A_%%' WITH '&' INTO mtext2.
ENDIF.
IF do_condense EQ space.
mtext = mtext2.
ELSE.
CONDENSE mtext2 .
mtext = mtext2.
ENDIF.
ELSE.
mtext = '???????????????????????????????????????????????????'(999).
ENDIF.
*
ENDFORM. " get_text1
*---------------------------------------------------------------------*
* FORM : replace_var *
* *
*---------------------------------------------------------------------*
FORM replace_var USING vark vari varpos.
*
* ersetzen der variablen teile einer fehlermeldung
*
DATA: var(02),
var1,
moff TYPE i.
*
CLEAR: mttab , moff.
var = vark.
SHIFT var BY 1 PLACES.
CASE var.
WHEN ' '. "'& '
READ TABLE mttab INDEX vari.
IF NOT mttab-len IS INITIAL.
IF sy-subrc EQ 0.
moff = varpos + mtvaroff. "neu
ASSIGN mtext2+moff(*) TO <mtxt>. "neu
ASSIGN mttab-text(mttab-len) TO <vtxt>.
var1 = vark.
REPLACE var1 WITH <vtxt> INTO <mtxt>. "neu
mtvaroff = mttab-len. "neu
ELSE.
IF vari GT mparcnt.
moff = varpos + mtvaroff. "neu
ASSIGN mtext2+moff(*) TO <mtxt>. "neu
REPLACE vark WITH ' ' INTO <mtxt>. "neu
mtvaroff = 2. "neu
ELSE.
moff = varpos + mtvaroff. "neu
ASSIGN mtext2+moff(*) TO <mtxt>. "neu
REPLACE vark WITH '%%_Z_%%' INTO <mtxt>. "neu
mtvaroff = 7. "neu
ENDIF.
ENDIF.
ENDIF.
WHEN '$'. "'&&'
moff = varpos + mtvaroff. "neu
ASSIGN mtext2+moff(*) TO <mtxt>. "neu
REPLACE vark WITH '%%_D_%%' INTO <mtxt>. "neu
mtvaroff = 7. "neu
WHEN '&'. "'&&'
moff = varpos + mtvaroff. "neu
ASSIGN mtext2+moff(*) TO <mtxt>. "neu
REPLACE vark WITH '%%_A_%%' INTO <mtxt>. "neu
mtvaroff = 7. "neu
WHEN '<'. "'&1'
READ TABLE mttab INDEX vari.
IF NOT mttab-len IS INITIAL.
IF sy-subrc EQ 0.
IF vark EQ '&<'.
moff = varpos + mtvaroff. "neu
ASSIGN mtext2+moff(*) TO <mtxt>. "neu
ASSIGN mttab-text(mttab-len) TO <vtxt>.
REPLACE '&' WITH <vtxt> INTO <mtxt>. "neu
mtvaroff = mttab-len. "neu
ENDIF.
IF vark EQ '$<'.
moff = varpos + mtvaroff. "neu
ASSIGN mtext2+moff(*) TO <mtxt>. "neu
ASSIGN mttab-text(mttab-len) TO <vtxt>.
REPLACE '$' WITH <vtxt> INTO <mtxt>. "neu
mtvaroff = mttab-len. "neu
ENDIF.
ENDIF.
ELSE.
IF vark EQ '&<'.
moff = varpos + mtvaroff. "neu
ASSIGN mtext2+moff(*) TO <mtxt>. "neu
REPLACE '&' WITH ' ' INTO <mtxt>. "neu
mtvaroff = 1. "neu
ENDIF.
IF vark EQ '$<'.
moff = varpos + mtvaroff. "neu
ASSIGN mtext2+moff(*) TO <mtxt>. "neu
REPLACE '$' WITH ' ' INTO <mtxt>. "neu
mtvaroff = 1. "neu
ENDIF.
ENDIF.
WHEN '1'. "'&1'
READ TABLE mttab INDEX 1.
IF NOT mttab-len IS INITIAL.
IF sy-subrc EQ 0.
moff = varpos + mtvaroff. "neu
ASSIGN mtext2+moff(*) TO <mtxt>. "neu
ASSIGN mttab-text(mttab-len) TO <vtxt>.
REPLACE vark WITH <vtxt> INTO <mtxt>. "neu
mtvaroff = mttab-len. "neu
ELSE.
IF vari GT mparcnt.
moff = varpos + mtvaroff. "neu
ASSIGN mtext2+moff(*) TO <mtxt>. "neu
REPLACE vark WITH ' ' INTO <mtxt>. "neu
mtvaroff = 2. "neu
ELSE.
moff = varpos + mtvaroff. "neu
ASSIGN mtext2+moff(*) TO <mtxt>. "neu
REPLACE vark WITH '%%_Z_%%' INTO <mtxt>. "neu
mtvaroff = 7. "neu
ENDIF.
ENDIF.
ENDIF.
WHEN '2'. "'&2'
READ TABLE mttab INDEX 2.
IF NOT mttab-len IS INITIAL.
IF sy-subrc EQ 0.
moff = varpos + mtvaroff. "neu
ASSIGN mtext2+moff(*) TO <mtxt>. "neu
ASSIGN mttab-text(mttab-len) TO <vtxt>.
REPLACE vark WITH <vtxt> INTO <mtxt>. "neu
mtvaroff = mttab-len. "neu
ELSE.
IF vari GT mparcnt.
moff = varpos + mtvaroff. "neu
ASSIGN mtext2+moff(*) TO <mtxt>. "neu
REPLACE vark WITH ' ' INTO <mtxt>. "neu
mtvaroff = 2. "neu
ELSE.
moff = varpos + mtvaroff. "neu
ASSIGN mtext2+moff(*) TO <mtxt>. "neu
REPLACE vark WITH '%%_Z_%%' INTO <mtxt>. "neu
mtvaroff = 7. "neu
ENDIF.
ENDIF.
ENDIF.
WHEN '3'. "'&3'
READ TABLE mttab INDEX 3.
IF NOT mttab-len IS INITIAL.
IF sy-subrc EQ 0.
moff = varpos + mtvaroff. "neu
ASSIGN mtext2+moff(*) TO <mtxt>. "neu
ASSIGN mttab-text(mttab-len) TO <vtxt>.
REPLACE vark WITH <vtxt> INTO <mtxt>. "neu
mtvaroff = mttab-len. "neu
ELSE.
IF vari GT mparcnt.
moff = varpos + mtvaroff. "neu
ASSIGN mtext2+moff(*) TO <mtxt>. "neu
REPLACE vark WITH ' ' INTO <mtxt>. "neu
mtvaroff = 2. "neu
ELSE.
moff = varpos + mtvaroff. "neu
ASSIGN mtext2+moff(*) TO <mtxt>. "neu
REPLACE vark WITH '%%_Z_%%' INTO <mtxt>. "neu
mtvaroff = 7. "neu
ENDIF.
ENDIF.
ENDIF.
WHEN '4'. "'&4'
READ TABLE mttab INDEX 4.
IF NOT mttab-len IS INITIAL.
IF sy-subrc EQ 0.
moff = varpos + mtvaroff. "neu
ASSIGN mtext2+moff(*) TO <mtxt>. "neu
ASSIGN mttab-text(mttab-len) TO <vtxt>.
REPLACE vark WITH <vtxt> INTO <mtxt>. "neu
mtvaroff = mttab-len. "neu
ELSE.
IF vari GT mparcnt.
moff = varpos + mtvaroff. "neu
ASSIGN mtext2+moff(*) TO <mtxt>. "neu
REPLACE vark WITH ' ' INTO <mtxt>. "neu
mtvaroff = 2. "neu
ELSE.
moff = varpos + mtvaroff. "neu
ASSIGN mtext2+moff(*) TO <mtxt>. "neu
REPLACE vark WITH '%%_Z_%%' INTO <mtxt>. "neu
mtvaroff = 7. "neu
ENDIF.
ENDIF.
ENDIF.
ENDCASE.
*
do_condense = space.
*
ENDFORM. "replace_var
*/

*---------------------------------------------------------------------*
* FORM : prot_titel *
* # *
*---------------------------------------------------------------------*
FORM prot_titel.
WRITE:/01(102) sy-uline.
WRITE:/01(102) space COLOR COL_HEADING INTENSIFIED OFF.
WRITE: 02 'Zeit '(001) COLOR COL_HEADING INTENSIFIED OFF,
11 'Tran'(008) COLOR COL_HEADING INTENSIFIED OFF,
16 'Dynpro'(007) COLOR COL_HEADING INTENSIFIED OFF,
30 'Nachricht'(002) COLOR COL_HEADING INTENSIFIED OFF.
* 63 DATE1 DD/MM/YYYY.
PERFORM write_vline USING 'T' 10.
PERFORM write_vline USING 'T' 15.
PERFORM write_vline USING 'T' 29.
PERFORM write_vline USING 'T' 1.
PERFORM write_vline USING 'T' 102.
WRITE: /02(09) sy-uline,
11(04) sy-uline,
16(13) sy-uline,
30(72) sy-uline.
PERFORM write_vline USING 'T' 10.
PERFORM write_vline USING 'T' 15.
PERFORM write_vline USING 'T' 29.
PERFORM write_vline USING 'T' 1.
PERFORM write_vline USING 'T' 102.
*
FORMAT RESET.
ENDFORM. "PROT_TITEL
*&---------------------------------------------------------------------*
*& Form SELECT_ERROR_SESSIONS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM select_error_sessions .
* Select the error sessions for the Session mentioned on selection screen
SELECT * FROM apqi INTO TABLE i_apqi WHERE groupid IN s_grpid
AND credate IN s_date
AND creator IN s_userid
AND mandant EQ sy-mandt
AND qstate EQ 'E'.
IF sy-subrc NE 0 .
WRITE: / text-006.
EXIT.
ENDIF.
ENDFORM. " SELECT_ERROR_SESSIONS
*&---------------------------------------------------------------------*
*& Form MODIFY_SCREEN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM modify_screen .
* Make the Application Server path as read-only

IF rb_pc = yes.
LOOP AT SCREEN.
IF screen-group1 EQ 'MD1'.
screen-active = c_0.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ELSE. " rb_unix = c_x.
LOOP AT SCREEN.
IF screen-group1 EQ 'MD2'.
screen-active = c_0.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDIF.
LOOP AT SCREEN.
CHECK screen-group1 EQ 'MD4'.
IF cb_file = yes.
screen-active = c_1.
ELSE.
screen-active = c_0.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDFORM. " MODIFY_SCREEN
*&---------------------------------------------------------------------*
*& Form DEFAULT_FILE_PATHS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM default_file_paths .
CONCATENATE:
* Unix path set according to the rules defined Globally
text-004 syst-sysid text-005 INTO p_srpath,

* Unix Files
p_srpath p_fname1 INTO p_infile.
ENDFORM. " DEFAULT_FILE_PATHS
*&---------------------------------------------------------------------*
*& Form SELECT_PC_PATH
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM select_pc_path .
DATA:
l_upath TYPE string,
l_offset TYPE i.

* Default PC Download path


cl_gui_frontend_services=>get_upload_download_path(
CHANGING
upload_path = l_upath
download_path = p_pcpath
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
gui_upload_download_path = 4
upload_download_path_failed = 5
OTHERS = 6
).
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

cl_gui_frontend_services=>directory_browse(
EXPORTING
initial_folder = p_pcpath
CHANGING
selected_folder = p_pcpath
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4
).
IF sy-subrc NE 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

IF NOT p_pcpath IS INITIAL.


l_offset = STRLEN( p_pcpath ) - 1.
IF p_pcpath+l_offset(1) NE '\'.
CONCATENATE p_pcpath '\' INTO p_pcpath.
ENDIF.
ELSE.
p_pcpath = text-031.
ENDIF.
ENDFORM. " SELECT_PC_PATH
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_data .
IF rb_unix EQ yes.
PERFORM from_appl_server. " Upload Data from Application Server
ELSE.
PERFORM from_pres_server. " Upload Data from Presentation Server
ENDIF.
ENDFORM. " GET_DATA
*&---------------------------------------------------------------------*
*& Form FROM_APPL_SERVER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM from_appl_server .
DATA: l_wa_data TYPE ty_tab,
l_wa_head TYPE ty_tab.

* Open the input file for reading


OPEN DATASET p_infile
FOR INPUT IN TEXT MODE
ENCODING NON-UNICODE.
IF sy-subrc IS INITIAL.
DO.
*Read single line to the work area
READ DATASET p_infile INTO l_wa_data-line.
IF sy-subrc IS INITIAL.
APPEND l_wa_data TO i_tab.
CLEAR l_wa_data.
ELSE.
EXIT.
ENDIF.
ENDDO.
* READ TABLE i_tab INTO l_wa_head INDEX 1.
* IF sy-subrc IS INITIAL.
* l_v_colhead = l_wa_head-line.
* ENDIF.
* DELETE i_tab INDEX 1.
CLOSE DATASET p_infile. "Close the input file
ELSE.
MESSAGE e000 WITH text-m02.
ENDIF.

ENDFORM. " FROM_APPL_SERVER


*&---------------------------------------------------------------------*
*& Form FROM_PRES_SERVER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*

FORM from_pres_server .
DATA: l_wa_head TYPE ty_tab.
* Upload data from input file to the internal table
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = p_infile
filetype = 'ASC'
TABLES
data_tab = i_tab
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17.
IF NOT sy-subrc IS INITIAL.
* READ TABLE i_tab INTO l_wa_head INDEX 1.
* IF sy-subrc IS INITIAL.
* l_v_colhead = l_wa_head-line.
* ENDIF.
* DELETE i_tab INDEX 1.
* ELSE.
MESSAGE e000 WITH text-m02.
ENDIF.
ENDFORM. " FROM_PRES_SERVER

You might also like