Technology Blog Posts by Members
cancel
Showing results for 
Search instead for 
Did you mean: 
manijangiti
Explorer
531

Hi Everyone – My Motivation for Writing This

I recently worked on a requirement where users were uploading and processing files in an ABAP program. During testing, I noticed that many errors occurred simply because the file path was either incorrect or pointing to the wrong location (local system vs SAP application server).
Since this is a common challenge—especially in data migration and background processing—I decided to document a clean and reusable approach.
I prepared this post with the help of a generative AI tool, but all code, explanations, and examples reflect my own experience on an SAP S/4HANA system.

Why Validating File Paths Matters

Before reading the file, ABAP must know where it is located:

  • File Uploads: Detect if the user is picking a file from their PC.

  • File Export: Decide whether to save on SAP server or local desktop.

  • Batch/Background Jobs: Only application-server paths are allowed.

  • Data Migration: Large files usually reside on the SAP server.

  • File Processing: Avoid runtime errors caused by invalid paths.

Approach

In ABAP, local (presentation server) files are handled through CL_GUI_FRONTEND_SERVICES, while server files use OPEN DATASET.
So the idea is:

  1. Check if the path exists on the local system.

  2. If not, try accessing it as an application server path.

  3. If both fail → invalid path.

Example Program Code :

REPORT zsap_val_path.

DATA: lv_file_exist TYPE abap_bool VALUE abap_false,
      lv_dir_exist  TYPE abap_bool VALUE abap_false,
      file_type     TYPE char10,
      file_path     TYPE string.

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-002.
PARAMETERS: p_fname TYPE string LOWER CASE.
SELECTION-SCREEN END OF BLOCK b2.

"-------------------------------------------------------
" F4 Help – Let user browse directories on local machine
"-------------------------------------------------------
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fname.
  CALL METHOD cl_gui_frontend_services=>directory_browse
    CHANGING
      selected_folder = p_fname
    EXCEPTIONS
      cntl_error           = 1
      error_no_gui         = 2
      not_supported_by_gui = 3
      OTHERS               = 4.

  IF sy-subrc <> 0.
    MESSAGE 'File path not selected' TYPE 'E' DISPLAY LIKE 'W'.
  ENDIF.


"-------------------------------------------------------
" Validate Path
"-------------------------------------------------------
file_path = p_fname.

TRY.
    "Check if it's a LOCAL file
    cl_gui_frontend_services=>file_exist(
      EXPORTING file   = file_path
      RECEIVING result = lv_file_exist ).

    "If not a file, check if it's a LOCAL directory
    IF lv_file_exist = abap_false.
      cl_gui_frontend_services=>directory_exist(
        EXPORTING directory = file_path
        RECEIVING result    = lv_dir_exist ).
    ENDIF.

  CATCH cx_root INTO DATA(lx_root).
    lv_file_exist = abap_false.
    lv_dir_exist  = abap_false.
ENDTRY.


"-------------------------------------------------------
" Determine: Local (LOC) or Application Server (APP)
"-------------------------------------------------------
IF lv_file_exist = abap_true OR lv_dir_exist = abap_true.
  file_type = 'LOC'.
ELSE.
  "Try Application Server
  OPEN DATASET file_path FOR INPUT IN BINARY MODE.
  IF sy-subrc = 0.
    CLOSE DATASET file_path.
    file_type = 'APP'.
  ELSE.
    MESSAGE 'Invalid path. Enter a valid LOCAL or Application Server path.'
      TYPE 'E'.
    EXIT.
  ENDIF.
ENDIF.


"-------------------------------------------------------
" Output
"-------------------------------------------------------
CASE file_type.
  WHEN 'APP'.
    WRITE: 'APPLICATION SERVER PATH'.
  WHEN 'LOC'.
    WRITE: 'LOCAL FILE PATH (PRESENTATION SERVER)'.
  WHEN OTHERS.
    WRITE: 'UNKNOWN FILE TYPE'.
ENDCASE.

From my experience, users often assume a path will behave the same in dialog and background modes—but that’s not true.
Always remember:
 Local files work only in GUI mode
 Background jobs can only access application-server paths

This validation step saves a lot of debugging time later.
Thank You !!

ABAP Development 

1 Comment