Зачастую есть потребность вызывать команды операционной системы из ABAP. Это бывает крайне удобно. К примеру, в ситуации когда необходимо, склеить вместе несколько файлов, перенести файлы на уровне Ф.С. и.т.д.
Здесь будет расмотрен именно этот пример.
Шаг 1
Определить поля для команд:
" для UNIX команд line(2000), END OF tabl.
Шаг 2
Записать саму команду:
* где fullpath2 - путь до директории \ файла. * выполнить команду в ОС CALL 'SYSTEM' ID 'COMMAND' FIELD command ID 'TAB' FIELD tabl-*sys*.
Собственно говоря все. Можно выполнять подобным образом любые UNIX команды
Ниже приведен пример программы, которая писалась для Проекта XXXX XXX
Суть программы в том, чтобы консолидировать множество, подобных файлов (сходство по маске)
В один. перемещать их в нужный каталог. Старые файлы тоже перемещать, задавать нужные права итд
Код ниже:
*&---------------------------------------------------------------------* *& Report ZTST *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZTST. fullpath2 type string, FullpathR TYPE string, FullpathR2 TYPE string, fn(64), mask like EPSF-EPSFILNAM, dl like EPSFILI OCCURS 0 WITH HEADER LINE. " для UNIX команд line(2000), END OF tabl. *if maskin eq 'NI11TRUD'. * mask = 'NI11TRUD********.csv'. *ELSEIF maskin eq 'NI01_1'. *mask = 'NI01_1********.csv'. * ELSEIF maskin eq 'NI01_2'. * mask = 'NI01_2******.csv'. * ELSE. * mask = ''. * ENDIF. mask = maskin. " получаем список файлов CALL FUNCTION 'EPS_GET_DIRECTORY_LISTING' EXPORTING DIR_NAME = '/usr/sap/DBW/DVEBMGS00/work/Kons/RNCP' FILE_MASK = mask * IMPORTING * DIR_NAME = * FILE_COUNTER = * ERROR_COUNTER = DIR_LIST = dl 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 . WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. loop at dl. * собираем пути к файлам. разделитеть - пробел "command = 'cat /tmp/file1.txt /tmp/file2.txt /tmp/file3.txt > /tmp/file4.txt'. * ставим на все файлы которые будем клеить права 777 дабы избежать нюансов CONDENSE command. CALL 'SYSTEM' ID 'COMMAND' FIELD command ID 'TAB' FIELD tabl-*sys*. *write command. *fn = maskin. * если файл есть, то сначала, удалить его *p_file = '/usr/sap/DBW/DVEBMGS00/work/Kons/RNCP/con/con.csv'. OPEN DATASET p_file FOR INPUT in BINARY MODE. "MESSAGE e899(bd) WITH p_file 'DOES NOT EXIST'. "EXIT. ELSE. DELETE DATASET p_file. CLOSE DATASET p_file. * UNIX команды * конкантинация. сортируем. собираем уникальный строки *CONCATENATE 'cat' fullpath '| uniq > /usr/sap/DBW/DVEBMGS00/work/Kons/RNCP/con/con.csv' INTO command SEPARATED BY SPACE. CONDENSE command. CALL 'SYSTEM' ID 'COMMAND' FIELD command ID 'TAB' FIELD tabl-*sys*. * изменяем права CONDENSE command. CALL 'SYSTEM' ID 'COMMAND' FIELD command ID 'TAB' FIELD tabl-*sys*. * изменяем владельца CONDENSE command. CALL 'SYSTEM' ID 'COMMAND' FIELD command ID 'TAB' FIELD tabl-*sys*. * изменяем группу CONDENSE command. CALL 'SYSTEM' ID 'COMMAND' FIELD command ID 'TAB' FIELD tabl-*sys*. * создать папку куда переместим обработанные файлы CONDENSE command. CALL 'SYSTEM' ID 'COMMAND' FIELD command ID 'TAB' FIELD tabl-*sys*. * изменяем владельца CONDENSE command. CALL 'SYSTEM' ID 'COMMAND' FIELD command ID 'TAB' FIELD tabl-*sys*. * изменяем группу CONDENSE command. CALL 'SYSTEM' ID 'COMMAND' FIELD command ID 'TAB' FIELD tabl-*sys*. * утановим на нее права CONDENSE command. CALL 'SYSTEM' ID 'COMMAND' FIELD command ID 'TAB' FIELD tabl-*sys*. *перемещаем туда файлы. loop at dl. CONDENSE command. CALL 'SYSTEM' ID 'COMMAND' FIELD command ID 'TAB' FIELD tabl-*sys*. *write command.