Подписание/отклонение входящей отправки (и запроса на аннулирование) ==================================================================== .. code:: abap *"---------------------------------------------------------------------- *"*"Локальный интерфейс: *" IMPORTING *" VALUE(IV_RECORD_ID) TYPE /TRL/XDE_HEADER-RECORD_ID *" VALUE(IV_COMMENT) TYPE STRING OPTIONAL *" VALUE(IV_ACCEPT) TYPE XFELD OPTIONAL *" VALUE(IS_CERT) TYPE /TRL/XDE_S_SAP_DOC_TYPE_CERT OPTIONAL *" VALUE(IV_SIGN_ONLY) TYPE /TRL/XDE_ED_FLAG_SIGN DEFAULT '' *" VALUE(IV_UNAME) TYPE SYUNAME DEFAULT SY-UNAME *" VALUE(IV_ONLY_CHECK) TYPE XFELD OPTIONAL *" VALUE(IT_DOC_TYPE_DATA) TYPE /TRL/XDE_T_DOC_TYPE_DAT OPTIONAL *" VALUE(IV_UPD_ACCEPT_CODE) TYPE /TRL/XDE_ED_TIT_RESULT_CODE OPTIONAL *" EXPORTING *" VALUE(ES_RETURN) TYPE /TRL/XDE_RETURN *" VALUE(EV_COMMENT) TYPE STRING *"---------------------------------------------------------------------- Функциональный модуль ``/TRL/XDE_API_SHIPM_SIGN_IN`` выполняет подписание/отклонение входящей отправки, а также подтверждение/отклонение запроса на аннулирование отправки. .. table:: Описание интерфейса функционального модуля ``/TRL/XDE_API_SHIPM_SIGN_IN`` :align: center :widths: 2 8 +------------------------------------+-------------------------------------------------------------------------------------------------------+ | Параметр | Описание | +====================================+=======================================================================================================+ | ``IMPORTING`` | +------------------------------------+-------------------------------------------------------------------------------------------------------+ | ``IV_RECORD_ID`` | Уникальный идентификатор отправки. | +------------------------------------+-------------------------------------------------------------------------------------------------------+ | ``IV_COMMENT`` | Комментарий – причина отклонения. | +------------------------------------+-------------------------------------------------------------------------------------------------------+ | ``IV_ACCEPT`` | Если равен «X», то выполняется согласование отправки/подтверждение запроса на аннулирование. | | | Если не равен «X», то выполняется отклонение отправки/запроса на аннулирование. | +------------------------------------+-------------------------------------------------------------------------------------------------------+ | ``IS_CERT`` | Сертификат для подписания. | +------------------------------------+-------------------------------------------------------------------------------------------------------+ | ``IV_SIGN_ONLY`` | Если равен «X», то при раздельном подписании выполняется только подписание, | | | без отправки в систему ОЭД. | +------------------------------------+-------------------------------------------------------------------------------------------------------+ | ``IV_UNAME`` | Пользователь системы SAP, выполняющий операцию. | +------------------------------------+-------------------------------------------------------------------------------------------------------+ | ``IV_ONLY_CHECK`` | Если равен «X», то выполняется проверка возможности выполнения подписания/отклонения, | | | при этом непосредственно подписание/отклонение не выполняется. | +------------------------------------+-------------------------------------------------------------------------------------------------------+ | ``IT_DOC_TYPE_DATA`` | Бинарные данные документов отправки. | +------------------------------------+-------------------------------------------------------------------------------------------------------+ | ``IV_UPD_ACCEPT_CODE`` | Код итога для УПД(820). | +------------------------------------+-------------------------------------------------------------------------------------------------------+ | ``EXPORTING`` | +------------------------------------+-------------------------------------------------------------------------------------------------------+ | ``ES_RETURN`` | Код и описание ошибки в случае, если операцию выполнить не удалось. | +------------------------------------+-------------------------------------------------------------------------------------------------------+ | ``EV_COMMENT`` | Если ``IV_COMMENT`` не заполнен – содержит комментарий, введенный пользователем. | | | Иначе равен ``IV_COMMENT``. | +------------------------------------+-------------------------------------------------------------------------------------------------------+ Если ФМ запущен не в режиме проверки – блокируется запись по номеру отправления. * Если возникла ошибка при блокировке – в ``es_return-code`` попадет «1011», в ``es_return-text`` попадает текущее системное сообщение. После этого работа ФМ закончится. Получаем данные по отправке с помощью ``/TRL/XDE_GET_SHIPMENTS``. * Если возникла ошибка в ходе выполнения – в ``es_return-code`` попадет «1106», в ``es_return-text`` попадет «Внутренняя ошибка. Не удалось найти объект "Отправление"». Снимается блокировки и происходит выход из ФМ. Происходит получение технических значений для статусов по имени настроек ``STATUS_G_ERROR`` и ``STATUS_G_REV_REQ_RECEIVED`` из таблицы ``/TRL/XDE_CUST``. Проверяется, что код статуса отправки равен значению из настройки ``STATUS_G_REV_REQ_RECEIVED``. Если код статуса отправки равен значению настройки ``STATUS_G_ERROR`` - происходит получение значений настроек ``STATUS_G_REV_REQ_REJECTED`` и ``STATUS_G_REVOKED``. Далее происходит получение данных по статусам по номеру отправления с помощью ФМ ``/TRL/XDE_GET_SHIPMENTS`` и поиск такого, который был бы равен значению из настройки ``STATUS_G_REV_REQ_RECEIVED``. Если какое-либо из этих условий выполнено – нужно выполнять аннулирование, в противном случае – подписание/отклонение. Выполняется поиск пользовательских маршрутов с кастомными статусами для отправки. В случае ошибки заполняется переменная ``es_return``, блокировки снимаются. Если маршрут и кастомный статус был найден - снимаются блокировки и происходит выход из функционального модуля. .. note:: В текущей версии Продукта компонент для работы с кастомными статусами не поддерживается. Выполнение данного алгоритма не влияет на работу текущего функционала. Для аннулирования ищется ФМ в таблице ``/TRL/XDE_CUST`` по имени настройки ``FM_REVOKE_ACPT``. * Если ФМ не найден или не существует в системе – в ``es_return-code`` попадет «1008», в ``es_return-text`` попадет «& & & Не задан ФМ обработки аннулирования (/TRL/XDE_OED_TY)». После этого снимаются блокировки и происходит выход из ФМ. Для подписания/отклонения нужно проверить, что сообщение является входящим и после этого выполнить поиск ФМ в таблице ``/TRL/XDE_CUST`` по имени настройки ``FM_SHIP_IN_SIGN`` или ``FM_SHIP_SIGN_ONLY``, если нужно только подписать. * Если ФМ не найден или не существует в системе – в ``es_return-code`` попадет «1008», в ``es_return-text`` попадет «& & & Не задан ФМ Согл-ния/отклонения входящего документа (/TRL/XDE_OED_T)». Снимаеются блокировки и происходит выход из ФМ. * Если в ходе вызова ФМ только подписания возникли ошибки – в ``es_return-code`` попадет «1011», в ``es_return-text`` текущее системное сообщение. Снимаеются блокировки и происходит выход из ФМ. * Если действие – не аннулирование и не подписание/отклонение, то в ``es_return-code`` попадет «9999», в ``es_return-text`` попадет «В статусе & операция невозможна». Снимаются блокировки и происходит выход из ФМ. Выполняется проверка полномочий. * Если проверка полномочий не пройдена – в ``es_return-code`` попадет «1013», в ``es_return-text`` попадет «Нет полномочий на выполнение операции». Снимаеются блокировки и происходит выход из ФМ. Повторная блокировка и проверка полномочий для всех отправлений пакета, если для этого есть настройки оператора. Далее происходит вызов найденного ФМ (ФМ аннулирования или подписания/отклонения). Снимаются блокировки. Данная API функция предполагает точки расширения для заказчика. .. important:: При использовании явных или неявных операторов ``COMMIT WORK`` и ``ROLLBACK WORK`` в расширениях корректная работа API-функций не гарантируется! Функциональный модуль подтверждения/отклонения запроса аннулирования -------------------------------------------------------------------- Имя ФМ подтверждения/отклонения запроса аннулирования хранится в таблице ``/TRL/XDE_CUST`` по имени настройки ``FM_REVOKE_ACPT``. .. image:: ris30.png :scale: 73 :align: center :alt: Настройка ``FM_REVOKE_ACPT`` Правила для ФМ из этой настройки касаются интерфейса ФМ, см. в таблице ниже. .. table:: Параметры модуля подтверждения/отклонения запроса аннулирования :align: center :widths: 2 1 4 +----------------------------+-------+------------------------------------+ | Наименование параметра | Тип | Название словарного типа или класс | +============================+=======+====================================+ | ``IMPORTING`` (попадают в ФМ) | +----------------------------+-------+------------------------------------+ | ``I_RECORD_ID`` | Тип | ``/TRL/XDE_ED_RECORD_ID_EXT`` | +----------------------------+-------+------------------------------------+ | ``I_COMMENT`` | Тип | ``STRING`` | +----------------------------+-------+------------------------------------+ | ``IS_CERT`` | Тип | ``/TRL/XDE_S_SAP_DOC_TYPE_CERT`` | +----------------------------+-------+------------------------------------+ | ``I_ONLY_CHECK`` | Тип | ``XFELD`` | +----------------------------+-------+------------------------------------+ | ``I_UNAME`` | Тип | ``SYUNAME`` | +----------------------------+-------+------------------------------------+ | ``I_ACCEPT`` | Тип | ``XFELD`` | +----------------------------+-------+------------------------------------+ | ``EXPORTING`` (результаты ФМ на выходе) | +----------------------------+-------+------------------------------------+ | ``ES_RETURN`` | Тип | ``/TRL/XDE_RETURN`` | +----------------------------+-------+------------------------------------+ | ``E_COMMENT`` | Тип | ``STRING`` | +----------------------------+-------+------------------------------------+ Функциональный модуль может иметь и другие параметры, но они должны быть необязательными. Функциональный модуль, используемый по умолчанию, содержит внедрение BAdI ``/TRL/XDE_CHECK_BADI`` для выполнения кастомных проверок после проверок, выполняемых в продукте xDE, в методах ``CHECK_IN_REVOKE_ACCEPT`` и ``CHECK_IN_REVOKE_REJECT``. Кроме того, функциональный модуль, используемый по умолчанию, содержит внедрение BAdI ``/TRL/XDE_SHIPMENT_BADI`` для работы с отправлениями, а именно для возможности создания комментария перед выводом диалогового окна пользователю. Создание комментария выполняется в методе ``SET_COMMENT``. Функциональный модуль подписания входящих сообщений --------------------------------------------------- Имя ФМ подписания входящих сообщений хранится в таблице ``/TRL/XDE_CUST`` по имени настройки ``FM_SHIP_IN_SIGN``. .. image:: ris31.png :scale: 100 % :align: center :alt: Настройка ``FM_SHIP_IN_SIGN`` Правила для ФМ из этой настройки касаются интерфейса ФМ, см. в таблице ниже. .. table:: Параметры модуля подписания входящих сообщений :align: center :widths: 2 1 4 +----------------------------+-------+------------------------------------+ | Наименование параметра | Тип | Название словарного типа или класс | +============================+=======+====================================+ | ``IMPORTING`` (попадают в ФМ) | +----------------------------+-------+------------------------------------+ | ``I_RECORD_ID`` | Тип | ``/TRL/XDE_ED_RECORD_ID_EXT`` | +----------------------------+-------+------------------------------------+ | ``I_COMMENT`` | Тип | ``STRING`` | +----------------------------+-------+------------------------------------+ | ``IS_CERT`` | Тип | ``/TRL/XDE_S_SAP_DOC_TYPE_CERT`` | +----------------------------+-------+------------------------------------+ | ``I_ONLY_CHECK`` | Тип | ``XFELD`` | +----------------------------+-------+------------------------------------+ | ``I_UNAME`` | Тип | ``SYUNAME`` | +----------------------------+-------+------------------------------------+ | ``I_ACCEPT`` | Тип | ``XFELD`` | +----------------------------+-------+------------------------------------+ | ``I_SIGN_ONLY`` | Тип | ``/TRL/XDE_ED_FLAG_SIGN`` | +----------------------------+-------+------------------------------------+ | ``IT_DOC_TYPE_DATA`` | Тип | ``/TRL/XDE_T_DOC_TYPE_DAT`` | +----------------------------+-------+------------------------------------+ | ``EXPORTING`` (результаты ФМ на выходе) | +----------------------------+-------+------------------------------------+ | ``ES_RETURN`` | Тип | ``/TRL/XDE_RETURN`` | +----------------------------+-------+------------------------------------+ | ``E_COMMENT`` | Тип | ``STRING`` | +----------------------------+-------+------------------------------------+ Функциональный модуль может иметь и другие параметры, но они должны быть необязательными. Функциональный модуль определения отложенной отправки ----------------------------------------------------- Имя ФМ определения отложенной отправки находится в таблице ``/TRL/XDE_CUST`` по имени настройки ``FM_SHIP_SIGN_ONLY``. .. image:: ris32.png :scale: 100 % :align: center :alt: Настройка ``FM_SHIP_SIGN_ONLY`` .. table:: Параметры модуля определения отложенной отправки :align: center :widths: 2 1 4 +----------------------------+-------+------------------------------------+ | Наименование параметра | Тип | Название словарного типа или класс | +============================+=======+====================================+ | ``IMPORTING`` (попадают в ФМ) | +----------------------------+-------+------------------------------------+ | ``IS_HEADER`` | Тип | ``/TRL/XDE_HEADER`` | +----------------------------+-------+------------------------------------+ | ``EXPORTING`` (на выход ФМ) | +----------------------------+-------+------------------------------------+ | ``EV_SIGN_ONLY`` | Тип | ``/TRL/XDE_ED_FLAG_SIGN`` | +----------------------------+-------+------------------------------------+ Функциональный модуль может иметь и другие параметры, но они должны быть необязательными. Функциональный модуль сортировки статусов ----------------------------------------- Имя функционального модуля сортировки статусов находится в таблице ``/TRL/XDE_CUST`` по имени настройки ``FM_SORT_STATUS_NEW``. .. image:: ris33.png :scale: 87 :align: center :alt: Настройка ``FM_SORT_STATUS_NEW`` * Если настройку удалить – не возникнет ошибки. * Если заполнить некорректно – вызова ФМ не произойдет. .. table:: Параметры модуля сортировки статусов :align: center :widths: 2 1 4 +----------------------------+-------+------------------------------------+ | Наименование параметра | Тип | Название словарного типа или класс | +============================+=======+====================================+ | ``IMPORTING`` (попадают в ФМ) | +----------------------------+-------+------------------------------------+ | ``IV_RECORD_ID`` | Тип | ``/TRL/XDE_ED_RECORD_ID_EXT`` | +----------------------------+-------+------------------------------------+ | ``IT_STATUS`` | Тип | ``/TRL/XDE_T_STATUS`` | +----------------------------+-------+------------------------------------+ | ``EXPORTING`` (на выход ФМ) | +----------------------------+-------+------------------------------------+ | ``ET_STATUS`` | Тип | ``/TRL/XDE_T_STATUS`` | +----------------------------+-------+------------------------------------+ .. note:: Для использования пакетного подписания необходимо использовать новую API-функцию ``/TRL/XDE_API_SHIPM_SIGN_IN2``.