In this Blog Post we will understand how to process multiple files of certain File Masks from Application Server (AL11) via ABAP Program.
Lets try to understand it via following steps :
Input to our Executable Program will be following 3 parameters:
◉ File Mask for processing Files from Server (e.g. ABC* , files starting with ABC*)
◉ Directory path from Application Server where File are stored.
◉ Process Chain to execute that consists of steps for Processing this Files.
1. In the next step, we will get all the Files from Application Server using Function “EPS2_GET_DIRECTORY_LISTING” and we will pass directory path and File mask we passed as an Input to this Function Module and the Function will return a table with the details related to the files fetched from Application Server.
CALL FUNCTION 'EPS2_GET_DIRECTORY_LISTING'
EXPORTING
iv_dir_name = lv_iv_dir_name
file_mask = lv_file_mask
TABLES
dir_list = lt_file_tab
EXCEPTIONS
invalid_eps_subdir = 1
sapgparam_failed = 2
build_directory_failed = 3
no_authorization = 4
read_directory_failed = 5
too_many_read_errors = 6
empty_directory_list = 7
OTHERS = 8.
IF sy-subrc = 0.
"sorting by name to get the oldest file
SORT lt_file_tab BY name.
ENDIF.
2. As a next step, we wanted the count of Files fetched from server with same File Mask we passed, to achieve this we will make use of Internal table where we have passed data related to Files fetched from Server.
*Code to get count of Files
DESCRIBE TABLE lt_file_tab LINES files_count.
3. Now since we have the count of files fetched for processing, we will execute a DO Loop based on the the count of files fetched and Call Function “RSPC_API_CHAIN_START” for executing process chain we passed as a parameter to the program and also which contains the steps that Processes the Files fetched.
*Code to loop through Files Count and Executing Process chain correspondingly
IF files_count >= 1.
DO files_count TIMES.
CALL FUNCTION 'RSPC API CHAIN START'
EXPORTING
i_chain = p_pchain
IMPORTING
e_loqid = lv_logid.
4. Once process chain is executed in above step within same DO loop execution , we will check the status of Process chain before beginning the next iteration of DO Loop by calling Function “RSPC_API_CHAIN_GET_STATUS” and passing process chain name and log id of the Process chain run which we will get as a output from previous function call of “RSPC_API_CHAIN_START“.
IF sy-subrc <> 0.
ELSE.
DO.
WAIT UP TO 2 SECONDS.
CALL FUNCTION ‘RSPC_API_CHAIN_GET_STATUS‘
EXPORTING
i_chain = p_pchain
i_logid = lv_logid
IMPORTING
e_status = lv_status.
IF lv_status = 'G' OR lv_status = 'R'
EXIT.
ENDIF.
ENDDO.
IF lv_status = ‘R'.
MESSAGE ‘File has errors' TYPE "E”
EXIT.
ENDIF.
ENDIF.
ENDDO.
5. Once, we get status of Process chain from previous function call of “RSPC_API_CHAIN_GET_STATUS” if its Green or Red we will exit that particular Iteration of DO Loop to process next file ( In this particular scenario , Process chain has step to move the file to different folders based on the execution status of DTP)
No comments:
Post a Comment