11-30-2006 5:49 PM
hi all,
i need to run a program in the background(sm36) where I need to upload a file from the application server.
how do i define the path of the application server and what function module shall i use to upload the *.txt file from the application server ???
thx..
paul
11-30-2006 5:50 PM
For reading the file from application use the OPEN DATASET statements
OPEN DATASET p_f2 IN TEXT MODE ENCODING DEFAULT FOR INPUT.
IF sy-subrc EQ 0.
DO.
CLEAR wa_input_rec.
READ DATASET p_f2 INTO wa_input_rec.
ENDDO.
ENDIF.
Here p_f2 is the file path for your text file.
Just click F1 on the OPEN DATASET for help to get a list of options
11-30-2006 5:51 PM
you have to use the OPEN DATASET statement to read files from the App Server..
~Suresh
11-30-2006 5:54 PM
check this code...
**********************************************************
REPORT z_check_ach NO STANDARD PAGE HEADING
LINE-SIZE 120
MESSAGE-ID zz.
TABLES : dfkkko, "Header Data in Open Item Accounting Document
dfkkop, "Items in contract account document
dfkkcr. "Repository For Checks
*-- include containing the declarations
INCLUDE zf_inc_chk_ach.
----
S E L E C T I O N S C R E E N *
----
----
S E L E C T O P T I O N S *
----
Block for File Path
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS : s_opbel FOR dfkkko-opbel ,
s_cpudt FOR dfkkko-cpudt.
PARAMETERS:
Radio Button for Presentation Server
rb_pres RADIOBUTTON GROUP file ,
PC File Name
p_pfile LIKE rlgrap-filename,
p_pfile1 LIKE rlgrap-filename,
Radio Button for Application Server
rb_unix RADIOBUTTON GROUP file DEFAULT 'X',
*Application Server File Name
p_afile LIKE rlgrap-filename ,
" default '/global/data/transfer/3520/pub/OUT' .
p_afile1 LIKE rlgrap-filename .
" default '/global/data/transfer/3503/pub/OUT' .
SELECTION-SCREEN END OF BLOCK b1.
AT SELECTION SCREEN
AT SELECTION-SCREEN.
Validate File Name based on the Server Selected
PERFORM validate_filename.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_pfile.
F4 help for file path of Presentation Server
PERFORM get_val_help USING p_pfile.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_pfile1.
F4 help for file path of Presentation Server
PERFORM get_val_help USING p_pfile1.
INITIALIZATION .
INITIALIZATION.
PERFORM build_file_names.
START-OF-SELECTION.
Get required Data from Database Tables
PERFORM get_data.
**Process data
PERFORM process_data .
Download the data into Application server
PERFORM download_data.
&----
*& Form validate_filename
&----
File validation
----
FORM validate_filename .
Initialize Error Flag
CLEAR v_error_flag.
IF rb_pres = c_x.
Mandatory Entry for Filename
IF p_pfile IS INITIAL.
MESSAGE i009 .
Set Error Flag
v_error_flag = c_x.
Go to the End of Selection Event
STOP.
ENDIF.
Mandatory Entry for Filename
IF p_pfile1 IS INITIAL.
MESSAGE i009 .
Set Error Flag
v_error_flag = c_x.
Go to the End of Selection Event
STOP.
ENDIF.
Check for any Invalid Characters & Others for PC File
IF ( p_pfile CA c_invalid_pc ) OR
( p_pfile0(1) = '\' AND p_pfile1(120) = space ).
MESSAGE i010. "Invalid PC File Name
Set Error Flag
v_error_flag = c_x.
Go to the End of Selection Event
STOP.
ENDIF.
Check for any Invalid Characters & Others for PC File
IF ( p_pfile1 CA c_invalid_pc ) OR
( p_pfile10(1) = '\' AND p_pfile11(120) = space ).
MESSAGE i010. "Invalid PC File Name
Set Error Flag
v_error_flag = c_x.
Go to the End of Selection Event
STOP.
ENDIF.
ELSE.
IF p_afile IS INITIAL.
Mandatory Entry for Filename
MESSAGE i011. "Enter Unix File Name.
Set Error Flag
v_error_flag = c_x.
Go to the End of Selection Event
STOP.
ENDIF.
IF p_afile1 IS INITIAL.
Mandatory Entry for Filename
MESSAGE i011. "Enter Unix File Name.
Set Error Flag
v_error_flag = c_x.
Go to the End of Selection Event
STOP.
ENDIF.
Check for any Invalid Characters
IF ( p_afile CA '\' ).
MESSAGE i012. "Invalid Unix File Name
Set Error Flag
v_error_flag = c_x.
Go to the End of Selection Event
STOP.
ENDIF.
Check for any Invalid Characters
IF ( p_afile1 CA '\' ).
MESSAGE i012. "Invalid Unix File Name
Set Error Flag
v_error_flag = c_x.
Go to the End of Selection Event
STOP.
ENDIF.
ENDIF.
ENDFORM. " validate_filename
&----
*& Form get_val_help
&----
Selection of probable file name from presentation server
----
FORM get_val_help USING l_file LIKE p_pfile.
Function Module for F4 Help of File Name
CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = sy-cprog
dynpro_number = sy-dynnr
IMPORTING
file_name = l_file.
ENDFORM. " get_val_help
&----
*& Form get_data
&----
Extract the data
----
FORM get_data.
DATA: wa_vlxx_mwtot LIKE vlxx_mwtot.
DATA: lt_dfkkop TYPE TABLE OF ty_ach WITH HEADER LINE.
*Default the date to todays date -1 because it is expected to run after
*midnight and it is suppose to pick up all the payments for the previous
day
IF s_cpudt[] IS INITIAL.
s_cpudt-sign = 'I'.
s_cpudt-option = 'EQ'.
s_cpudt-low = sy-datum - 1.
APPEND s_cpudt.
ENDIF.
*Select data from DFKKKO
SELECT opbel cpudt blart herkf INTO TABLE it_dfkkko FROM dfkkko
WHERE opbel IN s_opbel
AND cpudt IN s_cpudt.
SELECT opbel augbl INTO TABLE it_dfkkko_orig FROM dfkkop
FOR ALL ENTRIES IN it_dfkkko
WHERE augbl = it_dfkkko-opbel
.
IF NOT it_dfkkko_orig[] IS INITIAL.
Select the data from DFKKOP
SELECT opbel
zzposnrop
gpart
vtref
augbd
augbl
augbt
kontl
kontt
pymet
blart
INTO TABLE lt_dfkkop
FROM dfkkop FOR ALL ENTRIES IN it_dfkkko_orig
WHERE opbel = it_dfkkko_orig-opbel " AND
AND blart = '10'
AND augst = '9'. "only paid items
IF sy-subrc = 0.
SORT lt_dfkkop. "by opbel augdt.
ELSE.
EXIT.
ENDIF.
Extraction of Data Source by using the function module DECODE_KONTL.
REFRESH it_ach_nonach.
LOOP AT lt_dfkkop.
IF NOT lt_dfkkop-augbl IS INITIAL.
CLEAR wa_vlxx_mwtot.
CALL FUNCTION 'DECODE_KONTL'
EXPORTING
i_kontt = lt_dfkkop-kontt
i_kontl = lt_dfkkop-kontl
IMPORTING
e_vlxx_mwtot = wa_vlxx_mwtot.
IF ( wa_vlxx_mwtot-zdatsrc = c_3520 OR
wa_vlxx_mwtot-zdatsrc = c_3503 ).
CLEAR it_ach_nonach.
it_ach_nonach-opbel = lt_dfkkop-opbel.
it_ach_nonach-augbd = lt_dfkkop-augbd.
it_ach_nonach-augbl = lt_dfkkop-augbl.
it_ach_nonach-augbt = lt_dfkkop-augbt.
it_ach_nonach-kontl = lt_dfkkop-kontl.
it_ach_nonach-zdatsrc = wa_vlxx_mwtot-zdatsrc.
it_ach_nonach-gpart = lt_dfkkop-gpart.
it_ach_nonach-vtref = lt_dfkkop-vtref.
it_ach_nonach-zzposnrop = lt_dfkkop-zzposnrop.
it_ach_nonach-blart = lt_dfkkop-blart.
APPEND it_ach_nonach.
ENDIF.
IF lt_dfkkop-pymet = 'C'.
IF NOT lt_dfkkop-augbl IS INITIAL.
it_non_ach-doc1r = lt_dfkkop-augbl.
APPEND it_non_ach.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
SORT it_ach_nonach.
Get the Check payment related data.
IF NOT it_non_ach[] IS INITIAL.
SELECT ztnum
doc1r
rwbtr
budat
FROM dfkkcr
INTO TABLE it_check
FOR ALL ENTRIES IN it_non_ach
WHERE doc1r EQ it_non_ach-doc1r.
IF sy-subrc = 0.
SORT it_check .
ENDIF.
ENDIF.
To get the entry code, Leg check no
IF NOT lt_dfkkop[] IS INITIAL.
SELECT gpart
vtref
posnr
zzentrcod
zzsrc_pay_reqno
INTO TABLE it_vvsc
FROM zzvvscpos
FOR ALL ENTRIES IN lt_dfkkop
WHERE gpart = lt_dfkkop-gpart
AND vtref = lt_dfkkop-vtref
AND posnr = lt_dfkkop-zzposnrop .
SORT it_vvsc.
ENDIF.
ENDIF.
ENDFORM. " get_data
&----
*& Form process_data
&----
Process data
----
FORM process_data .
DATA l_doc1r TYPE dfkkcr-doc1r.
SELECT * FROM zfpc_code_map INTO TABLE it_code_map
WHERE app_code = 'CHECKSTOP'
OR app_code = 'CHECKVOID'.
it_ach_nonach_temp[] = it_ach_nonach[].
it_vvsc_temp[] = it_vvsc[].
PERFORM remove_oroginal_for_voids.
LOOP AT it_ach_nonach.
CLEAR it_code_map.
it_final-zdatsrc = it_ach_nonach-zdatsrc.
READ TABLE it_vvsc WITH KEY gpart = it_ach_nonach-gpart
"it_ach-opbel
vtref = it_ach_nonach-vtref
posnr = it_ach_nonach-zzposnrop.
IF sy-subrc = 0.
it_final-zzentrcod = it_vvsc-zzentrcod.
it_final-chckn = it_vvsc-zzsrc_pay_reqno.
READ TABLE it_code_map WITH KEY
entry_code_id = it_final-zzentrcod.
IF it_code_map-app_code = 'CHECKSTOP'
OR it_code_map-app_code = 'CHECKVOID'.
LOOP AT it_vvsc_temp WHERE
zzsrc_pay_reqno = it_vvsc-zzsrc_pay_reqno AND
zzentrcod <> it_final-zzentrcod.
ENDLOOP.
IF sy-subrc = 0.
READ TABLE it_ach_nonach_temp WITH KEY
zzposnrop = it_vvsc_temp-posnr.
IF sy-subrc = 0.
SELECT SINGLE * FROM dfkkrapt WHERE
opbel = it_ach_nonach_temp-opbel.
IF sy-subrc = 0.
SELECT SINGLE * FROM dfkkcr
WHERE doc1r = dfkkrapt-augbl.
IF sy-subrc = 0.
it_final-ztnum = dfkkcr-ztnum.
it_final-budat = dfkkcr-budat.
it_final-rwbtr = dfkkcr-rwbtr.
it_final-rec_type = 'C'.
APPEND it_final.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ELSE.
READ TABLE it_check WITH KEY doc1r = it_ach_nonach-augbl.
IF sy-subrc = 0.
l_doc1r = it_ach_nonach-opbel.
it_final-ztnum = it_check-ztnum.
it_final-budat = it_check-budat.
it_final-rwbtr = it_check-rwbtr.
it_final-rec_type = 'C'.
ELSE.
it_final-augbd = it_ach_nonach-augbd.
it_final-augbl = it_ach_nonach-augbl.
it_final-augbt = it_ach_nonach-augbt.
it_final-rec_type = 'A'.
ENDIF.
APPEND it_final.
ENDIF.
ENDIF.
ENDLOOP..
PERFORM process_output_file.
ENDFORM. " process_data
&----
*& Form download_data
&----
Download the data into pc and unix
----
FORM download_data .
DATA: w_fname TYPE string,
w_fname1 TYPE string.
w_fname = p_pfile.
w_fname1 = p_pfile1.
Presentation Server is Selected
IF rb_pres = c_x.
Download final Data to PC
PERFORM download_data_to_pc USING w_fname w_fname1.
App. Server is Selected
ELSEIF rb_unix = c_x.
Download final Data to Application Server
PERFORM build_unix_filename.
PERFORM download_data_to_app_serv.
ENDIF.
ENDIF.
ENDFORM. " download_data
&----
*& Form download_data_to_pc
&----
Download file into presentation server
----
FORM download_data_to_pc USING l_pfile TYPE string
l_pfile1 TYPE string.
*IF NOT it_file[] is initial .
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = l_pfile
filetype = 'ASC'
write_field_separator = 'X'
TABLES
data_tab = it_file[]
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
OTHERS = 22.
IF sy-subrc <> 0.
MESSAGE i014. "Unable to write file on Presentation Server
ENDIF.
*elseif NOT it_file1[] is initial.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = l_pfile1
filetype = 'ASC'
write_field_separator = 'X'
TABLES
data_tab = it_file1[]
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
OTHERS = 22.
IF sy-subrc <> 0.
MESSAGE i014. "Unable to write file on Presentation Server
ENDIF.
*endif.
ENDFORM. " download_data_to_pc
&----
*& Form download_data_to_app_serv
&----
Transfer data to Application server
----
FORM download_data_to_app_serv.
Open the unix file for writing the extracted information.
OPEN DATASET v_unix_path FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc = 0.
Populate Final Data to the required Path
LOOP AT it_file.
TRANSFER it_file TO v_unix_path .
ENDLOOP.
Close Dataset
CLOSE DATASET v_unix_path.
ELSE.
Message : Error in downloading the data
MESSAGE i013. "Unable to Open file on Application Server
ENDIF.
open the unix file for writing the extracted information.
OPEN DATASET v_unix_path1 FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc = 0.
Populate Final Data to the required Path
LOOP AT it_file1.
TRANSFER it_file1 TO v_unix_path1 .
ENDLOOP.
Close Dataset
CLOSE DATASET v_unix_path1.
ELSE.
Message : Error in downloading the data
MESSAGE i013. "Unable to Open file on Application Server
ENDIF.
ENDFORM. " download_data_to_app_serv
&----
*& Form build_unix_filename
&----
Unix file name with date and time
----
FORM build_unix_filename .
DATA: l_file_3520 LIKE rlgrap-filename,
l_file_3503 LIKE rlgrap-filename.
DATA: l_path1 LIKE rlgrap-filename VALUE '/global/data/transfer/',
l_path2 LIKE rlgrap-filename VALUE '/3520/pub/out/',
l_path3 LIKE rlgrap-filename VALUE '/3503/pub/out/'.
CONCATENATE l_path1 sy-sysid l_path2 INTO l_file_3520.
CONCATENATE l_path1 sy-sysid l_path3 INTO l_file_3503.
File name of Source code of 3520 file name.
CLEAR v_unix_path.
CLEAR v_unix_path1.
CONCATENATE l_file_3520 "p_afile
'3329'
'-'
'BA'
'-'
'01'
'-'
sy-datum
'-'
sy-uzeit+0(4)
'.OUT'
INTO v_unix_path.
File name of Source code of 3503 file name.
CONCATENATE l_file_3503 "p_afile
'3329'
'-'
'BA'
'-'
'02'
'-'
sy-datum
'-'
sy-uzeit+0(4)
'.OUT'
INTO v_unix_path1.
CONDENSE v_unix_path1.
ENDFORM. " build_unix_filename
&----
*& Form process_output_file
&----
output file
----
FORM process_output_file .
DATA : v_amt TYPE i,
v_temp12 TYPE string.
DATA: l_amt(16) TYPE n,
l_amount(16).
v_error_msg = text-002.
Populating the the data for Data Source value.
LOOP AT it_final WHERE zdatsrc EQ c_3520 OR
zdatsrc EQ c_3503.
Original Check request from Source System
WRITE it_final-chckn RIGHT-JUSTIFIED TO v_leg_chk_no.
v_string+0(10) = v_leg_chk_no.
IF v_leg_chk_no IS INITIAL OR v_leg_chk_no = ' '.
CONTINUE.
ENDIF.
CLEAR v_checkno.
For Check payment date
IF it_final-rec_type = 'C'.
FSCD Check number
WRITE it_final-ztnum RIGHT-JUSTIFIED TO v_checkno.
UNPACK v_checkno TO v_checkno.
v_string+10(10) = v_checkno.
CONCATENATE it_final-budat+4(2)
it_final-budat+6(2)
it_final-budat+2(2)
INTO v_date_check.
v_string+20(6) = v_date_check.
l_amt = it_final-rwbtr.
PACK l_amt TO l_amount.
CONDENSE l_amount.
v_string+26(13) = l_amount.
CONDENSE v_string+26(13).
UNPACK v_string26(13) TO v_string26(13).
ACH payment date
ELSE. "ACH
ACH Check number
MOVE it_final-augbl TO v_checkno.
v_string+10(10) = v_checkno.
CONCATENATE it_final-augbd+4(2)
it_final-augbd+6(2)
it_final-augbd+2(2)
INTO v_date_check.
v_string+20(6) = v_date_check.
l_amt = it_final-augbt.
PACK l_amt TO l_amount.
CONDENSE l_amount.
v_string+26(13) = l_amount.
CONDENSE v_string+26(13).
UNPACK v_string26(13) TO v_string26(13).
ENDIF.
CONDENSE v_checkno.
IF v_checkno IS INITIAL.
v_string+39(60) = v_error_msg.
ENDIF.
READ TABLE it_code_map WITH KEY entry_code_id = it_final-zzentrcod.
IF sy-subrc = 0.
CASE it_code_map-app_code.
WHEN 'CHECKSTOP'.
v_tran_type = 3. "Paid/Stop/Void
v_string+99(1) = v_tran_type.
WHEN 'CHECKVOID'.
v_tran_type = 2. "Paid/Stop/Void
v_string+99(1) = v_tran_type.
ENDCASE.
ELSE.
v_tran_type = 1. " Paid
v_string+99(1) = v_tran_type.
ENDIF.
IF it_final-zdatsrc EQ c_3520.
it_file-vline = v_string.
APPEND it_file.
CLEAR it_file.
CLEAR: l_amt, l_amount.
ELSEIF it_final-zdatsrc EQ c_3503.
it_file1-vline = v_string.
APPEND it_file1.
CLEAR it_file1.
CLEAR: l_amt, l_amount.
ENDIF.
ENDLOOP.
ENDFORM. " process_output_file
&----
*& Form build_file_names
&----
Build file names
----
FORM build_file_names .
File convention for 3520.
CONCATENATE '3329'
'-'
'BA'
'-'
'01'
'-'
sy-datum
'-'
sy-uzeit+0(4)
'.OUT'
INTO p_afile.
File convention for 3503.
CONCATENATE '3329'
'-'
'BA'
'-'
'02'
'-'
sy-datum
'-'
sy-uzeit+0(4)
'.OUT'
INTO p_afile1.
ENDFORM. " build_file_names
&----
*& Form remove_oroginal_for_voids
&----
text
----
--> p1 text
<-- p2 text
----
FORM remove_oroginal_for_voids .
DATA v_tabix LIKE sy-tabix.
LOOP AT it_ach_nonach.
v_tabix = sy-tabix.
CLEAR it_code_map.
it_final-zdatsrc = it_ach_nonach-zdatsrc.
READ TABLE it_vvsc WITH KEY gpart = it_ach_nonach-gpart
"it_ach-opbel
vtref = it_ach_nonach-vtref
posnr = it_ach_nonach-zzposnrop.
IF sy-subrc = 0.
it_final-zzentrcod = it_vvsc-zzentrcod.
it_final-chckn = it_vvsc-zzsrc_pay_reqno.
READ TABLE it_code_map WITH KEY
entry_code_id = it_final-zzentrcod.
IF it_code_map-app_code = 'CHECKSTOP'
OR it_code_map-app_code = 'CHECKVOID'.
LOOP AT it_vvsc_temp WHERE
zzsrc_pay_reqno = it_vvsc-zzsrc_pay_reqno AND
zzentrcod <> it_final-zzentrcod.
ENDLOOP.
IF sy-subrc = 0.
READ TABLE it_ach_nonach_temp WITH KEY
zzposnrop = it_vvsc_temp-posnr.
IF sy-subrc = 0.
DELETE it_ach_nonach where opbel = it_ach_nonach_temp-opbel.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM. " remove_oroginal_for_voids
11-30-2006 9:09 PM
For files in presentation servers you use - WS_DOWNLOAD and WS_UPLOAD FM.
For Application servers you use - Open Datasets.