Методика создания DMS-документа посредством BAPI
В статье рассмотрим на примере методику автоматического создания прототипа DMS-документа и прикрепления оригинала к нему.
Оглавление
Создание нового вида документа
Создание прототипа DMS-документа
Работа над ошибками и проверка корректности процесса
Работа с оригиналами документа
Прикрепление файла расположенного на стороне клиента
Прикрепление файла расположенного на сервере
Получение содержимого оригинала документа
Введение
В SAP ERP можно найти такой компонент, как DMS (Document Management System или Система управления документами). DMS позволяет избежать избыточности данных и минимизировать рабочую нагрузку при обновлении и обмене данными. Система управления документами, предназначенная для создания, хранения, изменения и просмотра документов доступна через транзакции: CV01N, CV02N, CV03N.
В статье рассмотрим на примере методику автоматического создания прототипа DMS-документа и прикрепления оригинала к нему.
Создание прототипа
Создание нового вида документа
Если требуется создать новый вид документа - заходим в SPRO и в строке поиска вводим:
"Определение видов документов" (в англ. варианте "Define Document Type") (Рисунок 1).
Рисунок 1 – Поиск в структуре
В списке совпадений находим "Система управления документами" (или "Document management system") (Рисунок 2):
Рисунок 2 – Окно списка совпадений
После чего произойдет позиционирование на нашем элементе (Рисунок 3):
Рисунок 3 – IMG-операция «Определение видов документов» в структуре
Затем кликаем на иконку с часами и попадаем на экран определения видов документов.
Инструмент также доступен из транзакции DC10, но запуск через SPRO предпочтителен, потому как в этом случае будет автоматически создан настроечный запрос с записью IMG-операции.
Рисунок 4 – «Определение видов документов»
Рисунок 5 – Создание нового вида документа
В открывшемся окне (Рисунок 4) в строке инструментов нажимаем на «Новые записи» (Рисунок 5).
Далее, кликаем на подпункт "Описание зависящих от языка видов документов", где указываем требуемые данные для языка (Рисунок 6).
Рисунок 6 Описание вида документа для языка.
Создание прототипа DMS-документа
Для создания прототипа DMS-документа будем использовать BAPI_DOCUMENT_CREATE2. Пример:
DATA:
ls_document TYPE bapi_doc_aux,
ls_return TYPE bapiret2,
ls_document_in TYPE bapi_doc_draw2.
ls_document_in-documenttype = 'ZTS'.
ls_document_in-description = 'Документ для теста'.
ls_document_in-username = sy-uname.
CALL FUNCTION 'BAPI_DOCUMENT_CREATE2'
EXPORTING
documentdata = ls_document_in
IMPORTING
documenttype = ls_document-doctype
documentnumber = ls_document-docnumber
documentpart = ls_document-docpart
documentversion = ls_document-docversion
return = ls_return.
На вход ФМ «BAPI_DOCUMENT_CREATE2» подается:
- documentdata - структура типа bapi_doc_draw2, где требуется заполнение минимум одного поля - типа документа – documenttype.
- pf_ftp_dest - логический адрес назначения, ставим константу 'SAPFTPA' (опционально).
- pf_http_dest - передаем константу 'SAPHTTP' (опционально).
Работа над ошибками и проверка корректности процесса
ФМ должен вернуть информацию о созданном документе в структуре LS_DOCUMENT или информацию об ошибке в LS_RETURN, если что-то пошло не так.
Если ошибки нет (LS_RETURN-TYPE <> 'E'), выполняем COMMIT, чтобы изменения вступили в силу или, в противном случае, откатываем изменения. Пример:
IF ls_return-type NE 'E'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' .
ENDIF.
После COMMIT проверяем успешность создания через транзакцию CV02N, с указанием типа LS_DOCUMENT-DOCTYPE и номера LS_DOCUMENT-DOCNUMBER документа. Где можем убедиться, что документ создан (Рисунок 7).
Рисунок 7 – Просмотр созданного документа
Может так случиться, что LS_RETURN вернет ошибку(E 26 068): «Сетевой адрес DEFAULT вашей ЭВМ не определен» (англ. "Network address DEFAULT of your computer is not maintained").
В этом случае, требуется задать тип носителя данных в транзакции DC20, например, как показано на следующей серии рисунков (Рисунок 8, Рисунок 9, Рисунок 10).
Рисунок 8 – Определение типа носителя данных для внешнего интерфейса
Рисунок 9 – Указание носителя данных
Рисунок 10 – Идентификация компьютеров внешнего интерфейса
Прикрепление оригинала к прототипу
Прикрепление файла, расположенного на стороне клиента
Далее приступим к прикреплению оригинала к созданному прототипу документа. Для этого, используем ФМ BAPI_DOCUMENT_CHANGE2.
Также потребуется файл, если быть точнее, адрес файла для загрузки.
Перед вызовом BAPI_DOCUMENT_CHANGE2 для загрузки оригинала можно проверить наличие документа, тип и номер которого следует передать на вход ФМ. Для этого следует использовать BAPI_DOCUMENT_GETDETAIL2. Пример:
DATA: lt_files TYPE TABLE OF bapi_doc_files2.
CALL FUNCTION 'BAPI_DOCUMENT_GETDETAIL2'
EXPORTING
documenttype = ls_document-doctype
documentnumber = ls_document-docnumber
documentpart = ls_document-docpart
documentversion = ls_document-docversion
getdocfiles = 'X'
IMPORTING
documentdata = ls_document_in
return = ls_return
TABLES
documentfiles = lt_files.
На вход подаются поля типа документа DOCUMENTTYPE и его номера DOCUMENTNUMBER из структуры LS_DOCUMENT, полученной на выходе BAPI_DOCUMENT_CREATE2, при создании DMS. Выставление флага GETDOCFILES, дает возможность увидеть в таблице LT_FILES уже имеющиеся оригиналы в документе.
В случае успеха, BAPI вернет пустую структуру LS_RETURN и структуру LS_DOCUMENT_IN с заполненными данными документа.
Если файл, требующий загрузки, находится на стороне клиента. Загрузка оригинала так, как показано ниже.
DATA:
lt_file_table TYPE filetable,
lv_filename TYPE string,
lv_rc TYPE i.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = 'Выбор файла'
default_extension = '*.txt'
CHANGING
file_table = lt_file_table
rc = lv_rc
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4
OTHERS = 5.
IF sy-subrc <> 0.
"Обработка ошибки...
ENDIF.
IF lv_rc EQ 0.
"Обработка ошибки...
ENDIF.
"Возьмем путь до первого выбранного файла
READ TABLE lt_file_table INTO lv_filename INDEX 1.
* Данные файла
ls_documentdata-wsapplication2 = 'TXT'.
ls_documentdatax-wsapplication2 = 'X'.
ls_documentdata-docfile2 = lv_filename.
ls_documentdatax-docfile2 = 'X'.
"Прикрепление файла
APPEND INITIAL LINE TO lt_files ASSIGNING <fs_file2>.
<fs_file2>-documenttype = ls_document-doctype. " Вид документа
<fs_file2>-documentnumber = ls_document-docnumber. " Номер документа
<fs_file2>-documentpart = ls_document-docpart. " Поддокумент
<fs_file2>-documentversion = ls_document-docversion. " Версия документа
<fs_file2>-originaltype = '1'. " Номер оригинала
<fs_file2>-sourcedatacarrier = 'PC'. " Имя носителя данных
<fs_file2>-storagecategory = 'DMS_C1_ST'. " Категория хранения для файлов оригиналов
<fs_file2>-wsapplication = 'TXT'. " Приложение рабочей станции (TDWP)
<fs_file2>-docfile = lv_filename. " Оригинал документа
<fs_file2>-description = 'Файл для теста загрузки оригинала'. " Краткое описание оригинала
<fs_file2>-language = sy-langu. " Код языка
<fs_file2>-created_by = sy-uname. " Имя ответственного исполнителя
<fs_file2>-changed_by = sy-uname. " Имя ответственного исполнителя
CALL FUNCTION 'BAPI_DOCUMENT_CHANGE2'
EXPORTING
documenttype = ls_document-doctype
documentnumber = ls_document-docnumber
documentpart = ls_document-docpart
documentversion = ls_document-docversion
documentdata = ls_documentdata
documentdatax = ls_documentdatax
IMPORTING
return = ls_return
TABLES
documentfiles = lt_files.
IF ls_return-type EQ 'E'.
"Обработка ошибки и откат изменения
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
RETURN.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
Выше в качестве приложения рабочей станции указан WSAPPLICATION = ‘TXT’, хотя наиболее вероятно, что потребуется иметь дело с файлами другого типа, например PDF. В этом случае стоит свериться с таблицей TDWP, чтобы выбрать подходящее приложение рабочей станции TDWP–DAPPL.
Прикрепление файла, расположенного на сервере
Также имеется возможность загрузить оригинал файла, находящийся на стороне сервера SAP. Сначала потребуется, чтобы на сервере был файл, который будет прикреплен к документу в качестве оригинала.
Далее, будет показано сохранение файла на сервер посредством ABAP-программы. Для поиска каталога, в который можно произвести сохранение следует обратиться к транзакции AL11. В моем случае, это /tmp/ каталог. Ниже код самой ABAP-программа для сохранения файла на стороне сервера.
DATA: lt_data TYPE TABLE OF x255,
lv_filename TYPE string,
lt_file_table TYPE filetable,
lv_rc TYPE i.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = CONV #( 'Выбор файла'(001) )
default_extension = '*.txt'
CHANGING
file_table = lt_file_table
rc = lv_rc
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4
OTHERS = 5.
IF sy-subrc <> 0.
"Обработка ошибки...
ENDIF.
"Возьмем путь до первого выбранного файла
READ TABLE lt_file_table INTO lv_filename INDEX 1.
"Загрузка файла в lt_data
CALL METHOD cl_gui_frontend_services=>gui_upload
EXPORTING
Если хотите прочитать статью полностью и оставить свои комментарии присоединяйтесь к sapland
ЗарегистрироватьсяУ вас уже есть учетная запись?
Войти