Описание работы сервиса ======================= В xDE для SAP имеются отдельные :ref:`REST-сервисы` для работы с ИМ и архивом. Для работы с REST-сервисом для архива используются класс ``CL_HTTP_CLIENT``. В :ref:`глобальном классе /TRL/XDE_CL_REST` используются следующие атрибуты. .. table:: Описание атрибутов класса для работы с архивом :widths: 4 1 1 5 2 4 +-------------------+-----------+-----------+--------------------------+---------------+------------------------+ | Имя | Тип | Видимость | Технический | Описание | | | атрибута | | | тип | | | | | | | | | | +===================+===========+===========+==========================+===============+========================+ | MC_REST_ARCH | Конст. | Private | /TRL/XDE_ED_REST_ID | Имя | 'REST_ARCH' | | | | | | идентификатора| | | | | | | сервиса | | +-------------------+-----------+-----------+--------------------------+---------------+------------------------+ | MC_PATH_TOKEN | Конст. | Private | CHAR10 | Часть | 'Token' | | | | | | пути к | | | | | | | xDE-архиву | | +-------------------+-----------+-----------+--------------------------+---------------+------------------------+ | Описание методов класса для работы с архивом приведено ниже. ---------------------------------------------- **SEND_FILE** .. table:: SEND_FILE :widths: auto +------------+---------------+-----------+------------------------+ | Имя метода | Вид метода | Видимость | Описание | +============+===============+===========+========================+ | SEND_FILE | Static Method | Public | Отправить файл в архив | +------------+---------------+-----------+------------------------+ .. list-table:: Параметры метода :widths: auto :header-rows: 1 * - Имя параметра - Вид - Тип - Описание * - IV_OPERATION - Importing - CHAR100 - Код операции * - IS_INPUT - Importing - /TRL/XDE_S_BIN_DATA - Бинарные данные и имя файла * - IV_ATTACHMENT_TYPE - Importing - /TRL/XDE_ED_ATTACHMENT_TYPE - Тип вложения * - EV_LINK - Exporting - /TRL/XDE_ED_LINK - Ссылка на файл на сервере * - ES_RETURN - Exporting - /TRL/XDE_RETURN - Код и текст сообщения Сначала вызывается метод ``GET_REST_SV``, который заполняет нужные статические атрибуты класса. Далее запускается цикл на два повторения выполнения запроса для сохранения файла в архиве. Делается это для того чтобы, в случае получения ошибки с кодом 401 или 403 (авторизация неуспешна), запросить новый токен для авторизации и повторения попытки. В противном случае, независимо от успеха или неуспеха, будет выполнен выход из цикла. Чтобы выполнить сохранение файла, сначала выполняется вызов метода ``GET_TOKEN``, который получает актуальный токен. Затем вызывается метод ``GET_URI``, который вернет необходимый адрес для выполнения http-запроса. На основании этого адреса создается объект с помощью вызова метода ``CREATE_BY_URL`` класса ``CL_HTTP_CLIENT``. Далее устанавливаются заголовки для выполнения запроса, устанавливается тип передаваемого контента. После этого с помощью метода ``ADD_NULTIPART`` создаются еще два объекта, для которых также устанавливаются заголовки и тип контента. Первый объект - это сам файл в бинарном виде, бинарные данные прикрепляются с помощью метода ``SET_DATA``. Второй объект - это тело JSON, для JSON собирается тело и прикрепляется к запросу с помощью запроса ``SET_CDATA``. Далее с помощью вызова метода ``SEND`` выполняется запрос. Если вызов метода прошел успешно - вызывается метод ``RECEIVE``, который получает ответ запроса. Для того, чтобы узнать, насколько успешно был выполнен запрос, - вызывается метод ``GET_STATUS``. Если возвращается код 401 или 403 - чистится токен в ``MS_REST_SV-TOKEN``. Если возвращается код, отличный от 200, - произошла ошибка, вызывается особая ситуация ``HTTP_ERROR``. Если возвращается код 200 - запрос выполнен успешно. Далее вызывается метод ``GET_CDATA``, в результате которого будет получена ссылка на файл. ---------------------------------------- **GET_FILE** .. table:: GET_FILE :widths: auto +------------+---------------+-----------+-------------------------+ | Имя метода | Вид метода | Видимость | Описание | +============+===============+===========+=========================+ | GET_FILE | Static Method | Public | Получить файл из архива | +------------+---------------+-----------+-------------------------+ .. table:: Параметры метода :widths: auto +-----------------+------------+---------------------+-----------------------+ | Имя параметра | Вид | Ссылочный тип | Описание | +=================+============+=====================+=======================+ | IV_OPERATION | Importing | CHAR100 | Код операции | +-----------------+------------+---------------------+-----------------------+ | I_INPUT | Importing | ANY | Данные в любом виде | +-----------------+------------+---------------------+-----------------------+ | ES_OUTPUT | Exporting | /TRL/XDE_S_BIN_DATA | Бинарные данные файла | +-----------------+------------+---------------------+-----------------------+ | ES_RETURN | Exporting | /TRL/XDE_RETURN | Код и текст сообщения | +-----------------+------------+---------------------+-----------------------+ Сначала вызывается метод ``GET_REST_SV``, который заполняет нужные статические атрибуты класса. Далее запускается цикл на два повторения выполнения запроса для сохранения файла в архиве. Делается это для того чтобы, в случае получения ошибки с кодом 401 или 403 (авторизация неуспешна), запросить новый токен для авторизации и повторения попытки. В противном случае, независимо от успеха или неуспеха, будет выполнен выход из цикла. Чтобы выполнить получение файла - сначала выполняется вызов метода ``GET_TOKEN``, который получает актуальный токен. Затем вызывается метод ``GET_URI``, который вернет необходимый адрес для выполнения http-запроса. На основании этого адреса создается объект с помощью вызова метода ``CREATE_BY_URL`` класса ``CL_HTTP_CLIENT``. Далее устанавливаются заголовки для выполнения запроса, устанавливается тип передаваемого контента. Далее с помощью вызова метода ``SEND`` выполняется запрос . Если вызов метода прошел успешно - вызывается метод ``RECEIVE``, который получает ответ запроса. Для того, чтобы узнать насколько успешно был выполнен запрос, - вызывается метод ``GET_STATUS``. Если возвращается код 401 или 403 - чистится токен в ``MS_REST_SV-TOKEN``. Если возвращается код, отличный от 200, - произошла ошибка, вызывается особая ситуация ``HTTP_ERROR``. Если возвращается код 200 - запрос выполнен успешно. Далее вызывается метод ``GET_DATA``, в результате которого будет получен файл в бинарном виде. С помощью метода ``GET_DATA_LENGTH`` будет получена длина файла.