Standard service - a fixed amount of work that is performed at a fixed price.  Post Service

  

Monday, 20 May 2019 03:17

A to Z of AL11 Operations

Written by  https://sapyard.com/a-to-z-of-al11-operations/
Rate this item
(0 votes)

With A to Z of OLE Excel in ABAP 7.4 we explored a lot about excel file in SAP. GUI_DOWNLOAD/UPLOAD is also very straight forward. But whenever I

get requirement to read multiple files from application server, do processing and store multiple files on another server… well it stressed me hard in the beginning. ?

The other day one junior askedme, when we have GUI_DOWNLOAD and UPLOAD, then why do we need to save file inAL11. I had to say one line, so that you can shut down your laptop and goto sleep and when you come in the morning the files would be ready foryou to review in AL11. He did not understand my abstract sentence and I amsure, many of you might also be wondering what I wrote.

Question: Why cannot we do GUI_DOWNLOAD/UPLOAD in background mode?

Answer: Jobs can be scheduled in background mode not only at the current time, but it can also be scheduled for future time. If you schedule a background job which does GUI_DOWNLOAD/UPLOAD, your program would dump or cancel out. The reason being, SAP did not want to take chance. GUI_DOWNLOAD/UPLOAD needs your laptop/computer to be switched on for it to save the data in the presentation server path. Say you scheduled a job which has GUI_DOWNLOAD/UPLOD and switched off your laptop and went to bed. When the job actually triggers, where will it save the file since your laptop is switched off? Do you get the catch 22 situation?

Therefore SAP came with Application File Concept (although not just for background job).

Now, let us do the same exercise. You have OPEN DATASET (for AL11) syntax in your program. You schedule a job. Switch off your laptop and go to sleep. In the middle of the night, the job triggers and it saves the file in Application Server (AL11). It is not dependent on your local laptop or desktop. It is at the Server level and Servers normally never sleep (except at planned outage or downtime). ?

Also Read: Test Driven Development ABAP

Although the File Directory (AL11) concepts are well known to all of us, we always Google for the syntax/tcode/FMs and use them without worrying much about the details and concepts behind the scene (especially lazy programmers like me). ?

So I thought of doing a favor to myself. Next time I need anything related to T-Code AL11 i.e. SAP Directories, I will not Google. Instead, I will come to this SAPYard page directly where I have listed almost everything we do in AL11. This should be a one stop page for not only all ABAP developers, but also the Basis Team and the Functional/Business team should also find it enriching.

In this article we will try to cover everything about AL11. What AL11 is all about? How to create folder in AL11? Ways to download files from AL11 and upload multiple files into AL11?How to delete files etc. As the title suggests, this is A to Z of all AL11 Operations. ?

1. What is AL11 and what is it’s use?

Well, AL11 is used for storing files/data on application server so that anyone (SAP) and even third-party systems (Non-SAP) can pick files from it. It is SAP File Directory as it contains directories, multiple folders and files in them. We can upload/download/modify/delete files/folders in t-code AL11.

Below is a quick lookof AL11 t-code.

It has two columns:

Name of Directory Parameter: Contains the directory names. It can contain multiple folders and files.

Directory: Contains the whole path of the folders.

2. How to create our own directory in AL11?

This is not supposed to be done by any ABAP developer and usually we will not get any authorization to perform this activity.

Just for sake of a complete document, I coaxed one of my Basis friends in this crime. See I have secret contacts in the SAP Administration and Security Team. My Basis friend was kind enough to provide the below steps. Now, I am wondering what would be the return price I need to pay for this favor. Just kidding. Tell me what you want. Open offer for you. ?

Hesaid it is no rocket science.

Directoriesare nothing but folders on Server System paths.

Basis folks and some privileged ones who have the authorization, log into the SAP Server System and create Folders and File. Just like how we create Folders and Files in our Windows/MAC Laptop and PC. As simple as that.

Now suppose we want to create a directory name as ‘ZMM_SOURCE’ on application server, Basis team will login in that Server System and create a folder with the same name which will be our directory.

Below is a screenshot of one such SAP Server System. It looks like normal Windows Folder. Right? But look closely. It is not part of the Windows operating system. It is another Server. If they create a folder in this Server, we can see that same folder in AL11 t-code in SAP.

Nowwe need to configure this directory in AL11.

There is an option in AL11 called name ‘Configure User Directories

We need to click on that button and need to configure our directory.

After execution, you can see your directory in AL11.

If you double click on this, you will see one file in it as I already created it.

That’s all. These directories are nothing but folders and as easy as right click and create new folder action of Windows. ?

Also Check – Free Video Course on HANA Models/Views

3. How to create new folder in directory in AL11?

This is also not partof ABAP work. Only Basis teams have authorization to create it. And this isnothing but creating new subfolder under our main folder in application server.Whereas main folder works like directory and subfolder works like folders/subdirectoriesin AL11.

Whatever locations on server system, where we are creating folders are called as Physical Paths of directories.

If main folder/directory is already configured then there is no need to configure the sub directory again after addition of subfolders. Those would be displayed in AL11 directory path automatically.

4. How to write/upload files on specific folder of AL11?

There are 2 ways toupload the file in AL11:

i) Manually via T-Code CG3Z:

After hitting this T-Code CG3Z, you will get below screen.

Source file on front end: Select your file from your laptop or desktop system and put it in this parameter.

Target file on application server: Provide path of file location in the AL11 directory.

Overwrite file: If it is checked, whatever file name you provided in target file parameter, if it exists in AL11, it will be overwriting with provided file else it will create new file there.

I have provided below details:

And got below message after clicking on the uploadbutton:

Let’s check in AL11 folder now. We can see our file test.xls is created here.

Note: We can ONLY read Doc or Txt files directly by double clicking on the file in AL11 but we can’t read XLS or XLSX files directly. XLS File will give below error.

This error comes because .XLS is a proprietary format of Microsoft. So, unless you have some addons installed on SAP Server, you can’t read XLS files from Application Server.

Do not worry. That is not the end of the world. If you really want to read the XLS file, you can download the file to your local machine (laptop/desktop) and then you can open and read it. ?

This brings us to question. How to downloadAL11 files? Please be patient. It will be covered in the later sections in thisarticle.

Here we are still covering how to createFolders/Files in AL11. Let’s look the second way.

ii) By writing ABAP code:

As an ABAP Programmer, usually we do not play with t-codes. We want everything should be done by our code. That gives us more sense of Power. ?

Sometimes we get requirement to upload multiple files on application server in a single go with some conditions. Let us look into one practical example:

Suppose I have a requirement to collect datafrom EKKO and EKPO tables and prepare multiple files for each new PO (EBELN)and store them on AL11 path. Each file should have PO number as file_name.

Sounds interesting yeah… Let’s do this…

First, we will select data from EKKO and EKPOtables and stores them in one internal table.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<code>***Popoluatetables
SELECTebeln,
bukrs,
bstyp,
bsart
INTOTABLE@DATA(gt_ekko)
FROMekko
UP TO15ROWS
WHEREebelnLIKE'45%'.
IFgt_ekko[]ISNOTINITIAL.
SELECTebeln,
ebelp,
matnr,
bukrs
INTOTABLE@DATA(gt_ekpo)
FROMekpo
FORALLENTRIESIN@gt_ekko
WHEREebeln=@gt_ekko-ebeln
ORDER BYPRIMARY KEY.
ENDIF.</code>

There is a table called FILEPATH.

All folders of an application server are stored in the database table FILEPATH. We can pass our directory/folder name there and can confirm whether the folder exists or not.

1
2
3
4
5
6
7
8
<code>CONSTANTS:lc_filenameTYPEfilepath-pathintern
VALUE'ZMM_BATCH_DATA_FOR_ASPECT'.
SELECTSINGLEpathintern
FROMfilepath
INTO@DATA(lv_logical_path)
WHEREpathintern=@lc_filename.</code>

As we want to upload multiple files in our folder, we need to call FM FILE_GET_NAME_USING_PATH to get full path of that file and then can open it with Dataset concept:

1
2
3
4
5
6
7
8
9
10
11
12
13
<code>CALL FUNCTION'FILE_GET_NAME_USING_PATH'
EXPORTING
logical_path=lv_logical_path
file_name=lv_file_post
IMPORTING
file_name_with_path=lv_filepath
EXCEPTIONS
path_not_found=1
missing_parameter=2
operating_system_not_found=3
file_system_not_found=4
OTHERS=5.</code>

Now using OPENDATASET, we can open the file to write fetched data from EKPO into it.

1
2
3
<code>"Open the file to write.
OPENDATASETlv_filepathFOROUTPUTINTEXT MODEENCODINGDEFAULT.</code>

Mode ‘Output’ is usedfor writing data in application server file (all dataset concepts are explainedin the 5th point below).

Now using TRANSFER andCLOSE DATASET concept, we can pass all relevant data to corresponding files,save them and take exit from the files.

Whole executable codeis provided below:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
<code>REPORTzal11_working.
CONSTANTS:lc_eTYPEcVALUE'E',
lc_sTYPEcVALUE'S',
lc_textTYPEstringVALUE'No specific data found for the input',
lc_msgTYPEstringVALUE'The batch data is/are stored at the directory successfully',
lc_filenameTYPEfilepath-pathinternVALUE'ZMM_BATCH_DATA_FOR_ASPECT'.
DATA:lv_filepathTYPEstring.
*** Popoluate tables
SELECTebeln,
bukrs,
bstyp,
bsart
INTOTABLE@DATA(gt_ekko)
FROMekko
UP TO15ROWS
WHEREebelnLIKE'45%'.
IFgt_ekko[]ISNOTINITIAL.
SELECTebeln,
ebelp,
matnr,
bukrs
INTOTABLE@DATA(gt_ekpo)
FROMekpo
FORALLENTRIESIN@gt_ekko
WHEREebeln=@gt_ekko-ebeln
ORDER BYPRIMARY KEY.
ENDIF.
IFgt_ekpo[]ISINITIAL.
MESSAGElc_textTYPElc_sDISPLAY LIKElc_e.
ELSE.
CONSTANTS:lc_filenameTYPEfilepath-pathinternVALUE'ZMM_BATCH_DATA_FOR_ASPECT'.
SELECTSINGLEpathintern
FROMfilepath
INTO@DATA(lv_logical_path)
WHEREpathintern=@lc_filename.
LOOP ATgt_ekpoASSIGNINGFIELD-SYMBOL(&lt;fs_ekpo>).
AT NEWebeln.
"Logic to create unique file name with each PO number.
DATA(lv_file_post)=|{&lt;fs_ekpo>-ebeln}.csv|.
"Remove spaces.
CONDENSElv_file_postNO-GAPS.
CALL FUNCTION'FILE_GET_NAME_USING_PATH'
EXPORTING
logical_path=lv_logical_path
file_name=lv_file_post
IMPORTING
file_name_with_path=lv_filepath
EXCEPTIONS
path_not_found=1
missing_parameter=2
operating_system_not_found=3
file_system_not_found=4
OTHERS=5.
"Open the file to write.
OPENDATASETlv_filepathFOROUTPUTINTEXT MODEENCODINGDEFAULT.
"Set intensity of the background color to default.
FORMATINTENSIFIEDON.
"Prepare header of file with comma ',' separated.
DATA(lv_file)=|EBELN,EBELP,MATNR,BUKRS|.
"set non-intensified background color.
FORMATINTENSIFIEDOFF.
"Transfer header data line by line to file.
TRANSFERlv_fileTOlv_filepath.
CLEARlv_file.
ENDAT.
"Prepare data of file with comma ',' separated.
lv_file=|{&lt;fs_ekpo>-ebeln},{&lt;fs_ekpo>-ebelp},{&lt;fs_ekpo>-matnr},{&lt;fs_ekpo>-bukrs}|.
"Remove spaces.
CONDENSElv_file.
"Transfer data line by line to file.
TRANSFERlv_fileTOlv_filepath.
AT END OFebeln.
"CLose the file and save on Application server.
CLOSEDATASETlv_filepath.
IFsy-subrcISINITIAL.
MESSAGElc_msgTYPElc_s.
ENDIF.
CLEARlv_filepath.
ENDAT.
CLEAR:lv_file.
ENDLOOP.
ENDIF.</code>

By using COMMAND-BREAK statements (AT END OF), I have achieved to create new file for new PO. The output is likebelow:

As shown above, theseare different files with different POs. If you open any file, you can getheader text line as well as values of cells.

Also Take – End to End Debugging Course for SAP Functionals

5. How to read/download files from AL11?

Above we learned how to write to AL11 file. Now let’s learn how to download them. Here we will discuss 4different approaches:

i) Download via T-Code CG3Y:

After hitting thistcode, you will see below screen:

  • Source file on application server: Provide the path of file location from AL11 directorywhich you need to download.
  • Target file on front end: Provide the file name from your system (can be new file) andput it in this parameter.
  • Overwrite file: Ifit is checked, whatever file name you provided in target file parameter, if itexists in system, it will be overwriting with provided file else it will createnew file there.
  • Transfer format for data: Usually ASC format works. Do check your requirement. Youmight need BIN as well.

As I wanted to save/download test excel filefrom application server to my desktop, I have provided below details:

It will create testfile on the desktop and if it is already present then will overwrite it.

ii) Download using list menu:

If the file is not so long, you can directly download the content from AL11. Navigate to the file.Then Open the file. On System Menu, go to List->Save/Send/Local file:

Question: Why is my AL11 exported file truncated?

Answer: In some case, the exported file is truncated. For List export in AL11, the limit is 512 characters. Apply SAP Note 952766 to increase the limit in AL11.

iii) By using FM ARCHIVFILE_SERVER_TO_CLIENT:

The standard Function module ARCHIVFILE_SERVER_TO_CLIENT can be used for downloading file from AL11. Just provide the PATH:the full path to the file on SAP server and the TARGETPATH: the destinationpath.

iv) By writing ABAP code:

Now if we havecomplex requirement like reading/downloading multiple files and do some calculationand massaging of data from the AL11 file then we need to create an ABAPprogram.

For downloading thefile from application server, we must know the below concepts:

a) OPEN DATASET:

1
2
3
4
<code>OPENDATASETdsetFORaccessINmode[position]
[os_additions]
[error_handling].</code>

Dset: Containsthe file path of AL11.

Access:It has below options –

  • Input: It opens the file for reading. If the file does not exist, the sy-subrc is set to 8.
  • Output: Opens the file for writing. If the file exists, the content will be deleted and replaced. If the file does not exist, the file will be created.
  • Appending: It opens the file for appending. The new content will be added to the end of existing file or the file will be created if it does not exist. SY-SUBRC = 4 will be triggered if appending is not successful.
  • Update: Itopens the file for changes to the existing content.

Mode: You can specify which mode you want to read the file likebinary or text.

ii) TRANSFER DATASET: This statement passes the content of data object dobj tothe file specified in dset.

Syntax:

1
2
3
<code>TRANSFERdobjTOdset[LENGTHlen]
[NOEND OF LINE].</code>

The file must be openfor writes, appends, or changes. If a closed or invalid file is accessed, ahandleable exception is raised.

iii) CLOSE DATASET: This statement closes the file specified in dset.

Syntax:

1
2
<code>CLOSEDATASETdset.</code>

If the file isalready closed or does not exist, the statement is ignored and the return codesy-subrc is set to 0.

An opened file that was not explicitly closed using CLOSEDATASET is automatically closed when the program is exited.

Did I bore you to death with too much of theories?? ufff.. Even I am tired, so I can understand your plight. ?

Let’s bring somecharm to our learning with the below examples:

In the point 4 above, we created multiple files on our application server now. Let’s read them all. Here I have passed only one file for demonstration. You can make it dynamic as well by passing all file names:

1
2
3
4
5
<code>DATA:v_fileLIKEv_excel_stringVALUE'E:\Interfaces\ZMM_BATCH_DATA_FOR_ASPECT\4500000001.csv'." name of the file
*--- read the file from the application server
OPENDATASETv_fileFORINPUTINTEXT MODEENCODINGDEFAULT.</code>

Open the file in READmode. We can read each line from the file in a loop and split the data based ondelimiter to separate the data and store in internal table:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<code>DO.
READ DATASETv_fileINTOwa_tab.
IFsy-subrcISINITIAL.
CLEARit_string[].
SPLITwa_tabATdelimiterINTOTABLEit_string.
LOOP ATit_stringASSIGNINGFIELD-SYMBOL(&lt;fs>).
ASSIGN COMPONENTsy-tabixOFSTRUCTUREwa_tab2TOFIELD-SYMBOL(&lt;fs_f>).
IFsy-subrc=0.
&lt;fs_f>=&lt;fs>.
ENDIF.
AT LAST.
APPENDwa_tab2TOit_tab2.
ENDAT.
ENDLOOP.
ELSE.
EXIT.
ENDIF.
ENDDO.</code>

After receiving thedata in an internal table, we can CLOSE the file using CLOSE DATSET syntax:

1
2
<code>CLOSEDATASETv_file.</code>

Here I have used ALV factory method to display the results in ALV format. Below is the whole executable program:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
<code>REPORTzal11_working.
*--- Type structure declaration.
TYPES:BEGIN OFty_tab1,
ebelnTYPEstring,
ebelpTYPEstring,
matnrTYPEstring,
bukrsTYPEstring,
END OFty_tab1.
*--- work area and internal table declaration.
DATA:it_tabTYPESTANDARD TABLE OFalsmex_tabline,
wa_tabTYPEalsmex_tabline,
it_tab2TYPESTANDARD TABLE OFty_tab1,
wa_tab2TYPEty_tab1,
it_stringTYPETABLEOFstring.
*--- variable declaration
DATA:v_excel_string(2000)TYPEc,
v_fileLIKEv_excel_stringVALUE'E:\Interfaces\ZMM_BATCH_DATA_FOR_ASPECT\4500000001.csv'," name of the file
delimiterTYPEcVALUE',',
t_field(1000)TYPEcOCCURS0." delimiter with default value space
*--- Factory method objects
DATA:lr_tableTYPEREF TOcl_salv_table,
lr_columnstyperef tocl_salv_columns_table,
lr_columntyperef tocl_salv_column_table.
*--- read the file from the application server
OPENDATASETv_fileFORINPUTINTEXT MODEENCODINGDEFAULT.
IFsy-subrcNE0.
WRITE:/'error opening file'.
ELSE.
DO.
READ DATASETv_fileINTOwa_tab.
IFsy-subrcISINITIAL.
CLEARit_string[].
SPLITwa_tabATdelimiterINTOTABLEit_string.
LOOP ATit_stringASSIGNINGFIELD-SYMBOL(&lt;fs>).
ASSIGN COMPONENTsy-tabixOFSTRUCTUREwa_tab2TOFIELD-SYMBOL(&lt;fs_f>).
IFsy-subrc=0.
&lt;fs_f>=&lt;fs>.
ENDIF.
AT LAST.
APPENDwa_tab2TOit_tab2.
ENDAT.
ENDLOOP.
ELSE.
EXIT.
ENDIF.
ENDDO.
ENDIF.
CLOSEDATASETv_file.
*------display the data from the internal table
IFit_tab2[]ISNOTINITIAL.
DELETEit_tab2INDEX1."Delete header line.
ENDIF.
cl_salv_table=>factory(
IMPORTINGr_salv_table=lr_table
CHANGINGt_table=it_tab2).
lr_columns=lr_table->get_columns().
try.
lr_column?=lr_columns->get_column('EBELN').
lr_column->set_short_text('EBELN').
lr_column?=lr_columns->get_column('EBELP').
lr_column->set_short_text('EBELP').
lr_column?=lr_columns->get_column('MATNR').
lr_column->set_short_text('MATNR').
lr_column?=lr_columns->get_column('BUKRS').
lr_column->set_short_text('BUKRS').
catchcx_salv_not_found."#EC NO_HANDLER
endtry.
lr_table->display().</code>

After its execution,you will get below screen:

Also Read: How I created my First OData Service in SAP

6. How to delete files from AL11?

After all you would not want to keep the test files in the application server after testing. So, to delete all unwanted files, you can use below FM: EPS_DELETE_FILE

It has below structures init:

Enter the File name in theFILE_NAME and the directory path (Excluding the file name) in the DIR_NAME andexecute.

After execution, the file will disappear permanently from the AL11 location. As Spiderman’s uncle said, “With more Power comes more Responsibility“. So please use it judiciously.

This FM we can use at program level as well if required to delete files in mass.

We can use DELETE DATASET statement too at program level to delete files from application server.

Syntax:

1
2
<code>DELETE DATASETdset.</code>

7. Standard SAP Report to upload and download files?

Yes, you read it right. SAPhas already provided a report which is used for uploading file frompresentation server to application server and vice versa. Awesome yeah ✌

Report name: CACS_FILE_COPY

When you execute this report,you will get below selection screen.

Now I wanted to store a fileon application server from my desktop:

After successful execution,we can get below pop-up message:

Now let’s check in AL11:

Ohh yeah!!.. So easy and gotthe file too in AL11.

8. Get all files from the directory/folder of application server?

If you want to know what filesare present in any AL11 folder, then you can use below 2 FMs:

EPS_GET_DIRECTORY_LISTING or EPS2_GET_DIRECTORY_LISTING

Let’s see how it works.

Here, we have to providedirectory/folder path to get list of files present in it.

As you see in above snapshot, we got 62 files of our directory. If you check the DIR_LIST table, you will get below details:

This functionality you canuse in the program whenever you want to do mass processing like readfile/download file/delete file etc from single directory. It indeed saves timeand good for performance.

Well, what else you want to do with AL11? I am blank now. Hell tired. Honestly, I don’t think you will need to search any other thread in future for any queries related to AL11. This page should be mother of all pages for AL11 and one source of truth for all AL11 requirements.

If I learn something newabout AL11, I will come back and update this page.

Do you have any trick or tipto share for AL11? Feel free to email us at This email address is being protected from spambots. You need JavaScript enabled to view it.or This email address is being protected from spambots. You need JavaScript enabled to view it.. Or you mayalso leave your findings in the comment section below.

Sharing is Caring. Would you mind sharing the link so that it reaches maximum audience? And our SAP Fraternity can benefit from our work.

If you want to have real time discussions and resolutions, do join our SAP Technical Telegram Group where we have more than 4885+ active SAP consultants from 6 Continents.

Please Note: You need to install Telegram App on your mobile first and then you can join the group using the above link.

Please SUBSCRIBE to SAPYard’s Youtube Channel for Free End to End SAP Video Course and Training.

Free SAP ABAP for HANA Training Tutorials Exercises.

Read 47 times

Leave a comment

Make sure you enter all the required information, indicated by an asterisk (*). HTML code is not allowed.