Повторное выполнение последней операции ======================================= .. code:: abap *"---------------------------------------------------------------------- *"*"Локальный интерфейс: *" IMPORTING *" VALUE(IV_RECORD_ID) TYPE /TRL/XDE_HEADER-RECORD_ID *" VALUE(IV_ONLY_CHECK) TYPE XFELD OPTIONAL *" EXPORTING *" VALUE(ES_RETURN) TYPE /TRL/XDE_RETURN *"---------------------------------------------------------------------- Функциональный модуль ``/TRL/XDE_API_SHIPM_SEND_AGAIN`` выполняет повторно последнюю операцию, завершившуюся с ошибкой. Отправка должна быть в статусе E. Список возможных операций для повторного выполнения: * подписание/отклонение входящей отправки; * подтверждение/отклонение запроса на аннулирование; * исходящая отправка документов; * создание запроса на аннулирование. .. table:: Описание интерфейса функционального модуля ``/TRL/XDE_API_SHIPM_SEND_AGAIN`` :align: center :widths: 2 8 +------------------------------------+-------------------------------------------------------------------------------------------------------+ | Параметр | Описание | +====================================+=======================================================================================================+ | ``IMPORTING`` | +------------------------------------+-------------------------------------------------------------------------------------------------------+ | ``IV_RECORD_ID`` | Уникальный идентификатор отправки. | +------------------------------------+-------------------------------------------------------------------------------------------------------+ | ``IV_ONLY_CHECK`` | Если равен «X», то выполняется проверка возможности повторного выполнения операции, | | | завершившейся с ошибкой. При этом повторного выполнения операции не выполняется. | +------------------------------------+-------------------------------------------------------------------------------------------------------+ | ``EXPORTING`` | +------------------------------------+-------------------------------------------------------------------------------------------------------+ | ``ES_RETURN`` | Код и описание ошибки в случае, если операцию выполнить не удалось. | +------------------------------------+-------------------------------------------------------------------------------------------------------+ Если ФМ запущен не в режиме проверки – ставим блокировку по номеру отправления. * Если блокировка не удалась, то ``es_return-code`` присваивается «1011» (ошибка блокирования записи). Также в ``es_return-text`` записывается текущее системное сообщение, после этого происходит выход из ФМ. Получаем данные по номеру отправления с помощью ФМ ``/TRL/XDE_GET_SHIPMENTS``. * Проверка результата работы ФМ ``/TRL/XDE_GET_SHIPMENTS``. Если результат не успешен – ``es_return-code`` заполняется значением «1106» (Не удалось найти отправление). Поле ``es_return-text`` заполняется текстом «Внутренняя ошибка. Не удалось найти объект "Отправление"». Снимаем блокировки и выходим из ФМ ``/TRL/XDE_API_SHIPM_SEND_AGAIN``. Проверяем полномочия на действие «18» (Отправить документ повторно). * Если результат проверки не успешен – поле ``es_return-code`` заполняется значением «1013» (Проверка не пройдена). Поле ``es_return-text`` заполняется сообщением «Нет полномочий на выполнение операции». Снимаем блокировки и выходим из ФМ ``/TRL/XDE_API_SHIPM_SEND_AGAIN``. Вызов метода для определения типа доступа для операции с помощью настроек, сделанных в таблице условий ``/TRL/XDE_CONDIT``. * Если в результате работы метода получим, что тип доступа 03 (Операция запрещена) или 04 (Операция невозможна) – запишем в ``es_return-code`` «9999» (Критическая ошибка). В ``es_return-text`` попадет «Операция невозможна». Снимаем блокировки и выходим из ФМ ``/TRL/XDE_API_SHIPM_SEND_AGAIN``. С помощью множественного вызова метода для получения имени статуса по имени настройки – получаем данные о технических названиях статусов. Проверяем, что в списке статусов первым стоит подходящий статус (Ожидает отправки контрагенту(подписан), ожидает отправки контрагенту(отклонен), готов к отправке контрагенту(исходящие). Либо вторая запись должна быть статусом «готов к отправке контрагенту(исходящие)». * Во всех остальных случаях заполняем поле ``es_return-code`` значением «9999» (Критическая ошибка). Поле ``es_return-text`` заполняется текстом «В текущем статусе операция невозможна». Снимаем блокировки и выходим из ФМ ``/TRL/XDE_API_SHIPM_SEND_AGAIN``. Если для данного статус стоит флаг «Содержит комментарий» - считываем текст у бизнес-объекта по ключу и идентификатору текста. Далее, если для данного оператора стоит настройка «обработать весь пакет» - ищем все отправления, ставим на них блокировку и выполняем проверку полномочий. Далее, в зависимости от кода статуса отправки выполняем разные действия. Если код статуса отправки «Аннулирование подтверждено» или «Ожидает отправки контрагенту(подписан)» и ФМ запущен не в режиме проверки – вызывается ФМ ``/TRL/XDE_API_SIGN_IN``. Этот ФМ подписывает входящую отправку. Внутри ФМ выполняет проверки возможности выполнить необходимую операцию, находит настраиваемые ФМ для отклонения/подтверждения запроса аннулирования, для согласования входящего документа, для отложенной отправки (только подписание) и в зависимости от условий – вызывает нужный ФМ. Если код статуса отправки «Ожидает отправки контрагенту(отклонен)» или «Аннулирование отклонено» и ФМ запущен не в режиме проверки – вызывается ФМ ``/TRL/XDE_API_SIGN_IN`` с той разницей, что в этот раз флаг согласования/отклонения не заполнен. Этот ФМ подписывает входящую отправку. Внутри ФМ выполняет проверки возможности выполнить необходимую операцию, находит настраиваемые ФМ для отклонения/подтверждения запроса аннулирования, для согласования входящего документа, для отложенной отправки (только подписание) и в зависимости от условий – вызывает нужный ФМ. Если код статуса отправки «Ожидает отправки контрагенту (исходящие)», «Готов к отправке контрагенту (исходящие)», «Ожидание ответа от ИМ» и если ФМ запущен не в режиме проверки – запускается цикл по отправлениям и для каждого запускается ФМ ``/TRL/XDE_SET_STATUS_FOR_SHIPM``, который добавляет статус для отправки. Внутри выполняются проверки, что для данной отправки можно установить такой статус, проверяются уровни статусов, сохраняется комментарий и обновляются таблицы ``/TRL/XDE_HEADER``, ``/TRL/XDE_HDR_ATR``, ``/TRL/XDE_STATUS``, ``/TRL/XDE_SIGN``. * Если в ходе выполнения ФМ ``/TRL/XDE_SET_STATUS_FOR_SHIPM`` возникли какие-либо особые ситуации – заполняем поле ``es_return-code`` значением «9999» (критическая ошибка). Если текущее системное сообщение имеется – выводим его в поле ``es_return-text``, иначе выводим сообщение «Не удалось обновить статус отправления. Обратитесь в службу поддержки.». Если код статуса отправки «Ожидает отправки контрагенту(подписан)» или «Ожидает отправки контрагенту(отклонен)» – получаем отпечаток сертификата, получаем данные по отправлению и данные документов для взаимодействия с ИМ. Затем вызывается ФМ ``/TRL/XDE_IM_SEND_IN``, который подписывает/отклоняет входящий документ (в зависимости от настроек работы с ИМ). Затем, в случае серверного подписания – выбираются данные по отправлению и выполняется поиск настроенного ФМ для подписания/отклонения и происходит, собственно, вызов ФМ. В случае локального подписания – вызываются ФМ ``/TRL/XDE_AcceptPacLocalSign`` или ``/TRL/XDE_RejectPacLocalSign``. Если же настроена интеграция через WebAPI – ищем в настройках класс, реализующий интеграцию через WS. Если класс найден – вызываем метод SIGN_IN для серверного подписания или ``SIGN_IN_DOCUMENT_LOC_ACC`` для локального согласования, ``SIGN_IN_DOCUMENT_LOC_REJ`` для локального отклонения. Затем вызывается ФМ ``/TRL/XDE_SET_STATUS_FOR_SHIPM``, который меняет статус документа. Если код статуса отправки «Отправлен запрос на аннулирование» и ФМ запущен не в режиме проверки – вызывается ФМ ``/TRL/XDE_API_SHIPM_REVOKE_REQ``. Описание ФМ можно найти в предыдущем пункте. В конце работы ФМ снимаются блокировки. На этом работа ФМ заканчивается. Данная API функция предусматривает точки расширения для заказчика. .. important:: При использовании явных или неявных операторов ``COMMIT WORK`` и ``ROLLBACK WORK`` в расширениях корректная работа API-функций не гарантируется! Функциональный модуль сортировки статусов ----------------------------------------- Имя функционального модуля сортировки статусов находится в таблице ``/TRL/XDE_CUST`` по имени настройки ``FM_SORT_STATUS_NEW``. .. image:: ris21.png :scale: 87 :align: center :alt: Настройка ``FM_SORT_STATUS_NEW`` Правила для ФМ из этой настройки касаются интерфейса ФМ, см. в таблице ниже. .. 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`` для выполнения кастомных проверок после проверок, выполняемых в Продукте, выполняемых в методах ``CHECK_IN_REVOKE_ACCEPT`` и ``CHECK_IN_REVOKE_REJECT``. Кроме того, функциональный модуль, используемый по умолчанию, содержит внедрение BAdI ``/TRL/XDE_SHIPMENT_BADI`` для работы с отправлениями, а именно для возможности создания комментария перед выводом диалогового окна пользователю. Создания комментария выполняется в методе ``SET_COMMENT``. Функциональный модуль подписания входящих сообщений --------------------------------------------------- Имя ФМ подписания входящих сообщений хранится в таблице ``/TRL/XDE_CUST`` по имени настройки ``FM_SHIP_IN_SIGN``. .. image:: ris22.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`` | +----------------------------+-------+------------------------------------+ | ``EXPORTING`` (результаты ФМ на выходе) | +----------------------------+-------+------------------------------------+ | ``ES_RETURN`` | Тип | ``/TRL/XDE_RETURN`` | +----------------------------+-------+------------------------------------+ | ``E_COMMENT`` | Тип | ``STRING`` | +----------------------------+-------+------------------------------------+ Функциональный модуль может иметь и другие параметры, но они должны быть необязательными. Функциональный модуль отложенной отправки ----------------------------------------- Имя ФМ определения отложенной отправки находится в таблице ``/TRL/XDE_CUST`` по имени настройки ``FM_SHIP_SIGN_ONLY``. .. image:: ris23.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_SET_EVENT``. .. image:: ris24.png :scale: 62 :align: center :alt: Настройка ``FM_SET_EVENT`` Правила для ФМ из этой настройки касаются интерфейса ФМ, см. в таблице ниже. .. table:: Параметры модуля обработки события смены статуса отправления :align: center :widths: 2 1 4 +----------------------------+-------+------------------------------------+ | Наименование параметра | Тип | Название словарного типа или класс | +============================+=======+====================================+ | ``IMPORTING`` (попадают в ФМ) | +----------------------------+-------+------------------------------------+ | ``IS_HEADER`` | Тип | ``/TRL/XDE_HEADER`` | +----------------------------+-------+------------------------------------+ | ``IS_STATUS`` | Тип | ``/TRL/XDE_STATUS`` | +----------------------------+-------+------------------------------------+ | ``TABLES`` (табличные параметры) | +----------------------------+-------+------------------------------------+ | ``IT_DOCUMENTS`` | Тип | ``/TRL/XDE_T_DOCUMENTS`` | +----------------------------+-------+------------------------------------+ Функциональный модуль может иметь и другие параметры, но они должны быть необязательными. Функциональный модуль для обработки после выставления статуса ------------------------------------------------------------- Имя функционального модуля для обработки после выставления статуса содержится в таблице ``/TRL/XDE_STATE``, поле ``FMAST``. .. image:: ris25.png :scale: 49 :align: center :alt: Поле ``FMAST`` Правила для ФМ из этой настройки касаются интерфейса ФМ, см. в таблице ниже. .. table:: Параметры модуля для обработки после выставления статуса :align: center :widths: 2 1 4 +----------------------------+-------+------------------------------------+ | Наименование параметра | Тип | Название словарного типа или класс | +============================+=======+====================================+ | ``IMPORTING`` (попадают в ФМ) | +----------------------------+-------+------------------------------------+ | ``IS_HEADER`` | Тип | ``/TRL/XDE_HEADER`` | +----------------------------+-------+------------------------------------+ | ``IS_STATUS`` | Тип | ``/TRL/XDE_STATUS`` | +----------------------------+-------+------------------------------------+ Функциональный модуль может иметь и другие параметры, но они должны быть необязательными. Функциональный модуль интеграционного модуля по подписанию/отклонению входящей отправки --------------------------------------------------------------------------------------- Имя ФМ интеграционного модуля по подписанию/отклонению входящей отправки хранится в таблице ``/TRL/XDE_CUST`` по имени настройки ``IM.FM_I_SIGN``. .. image:: ris26.png :scale: 73 :align: center :alt: Настройка ``IM.FM_I_SIGN`` Правила для ФМ из этой настройки касаются интерфейса ФМ, см. в таблице ниже. .. table:: Параметры модуля интеграционного модуля по подписанию/отклонению входящей отправки :align: center :widths: 2 1 4 +----------------------------+-------+------------------------------------+ | Наименование параметра | Тип | Название словарного типа или класс | +============================+=======+====================================+ | ``IMPORTING`` (попадают в ФМ) | +----------------------------+-------+------------------------------------+ | ``IV_DOCUMENT_ID`` | Тип | ``/TRL/XDE_ED_RECORD_ID_EXT`` | +----------------------------+-------+------------------------------------+ | ``IV_COMMENT`` | Тип | ``CHAR`` (длиной 2048 символов) | +----------------------------+-------+------------------------------------+ | ``IV_CERT_NUM`` | Тип | ``/TRL/XDE_ED_THUMBPRINT`` | +----------------------------+-------+------------------------------------+ | ``IV_ACCEPT`` | Тип | ``XFELD`` | +----------------------------+-------+------------------------------------+ | ``IT_SIGNEDDOCUMENTS`` | Тип | ``/TRL/XDE_T_DOCUMENTS_IM`` | +----------------------------+-------+------------------------------------+ | ``EXPORTING`` (на выход ФМ) | +----------------------------+-------+------------------------------------+ | ``ES_RETURN`` | Тип | ``/TRL/XDE_RETURN`` | +----------------------------+-------+------------------------------------+ Функциональный модуль может иметь и другие параметры, но они должны быть необязательными. Функциональный модуль для реализации интеграции через Web Service ----------------------------------------------------------------- Имя класса для реализации интеграции через Web Service находится в таблице ``TRL/XDE_CUST`` по имени настройки ``IM.WS.FRM_CLASS``. .. image:: ris27.png :scale: 73 :align: center :alt: Настройка ``IM.WS.FRM_CLASS`` У этого класса вызывается несколько методов. Метод ``SIGN_IN_DOCUMENT`` для подписания/отклонения ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. table:: Параметры метода ``SIGN_IN_DOCUMENT`` :align: center :widths: 2 1 4 +----------------------------+-------+------------------------------------+ | Наименование параметра | Тип | Название словарного типа или класс | +============================+=======+====================================+ | ``IMPORTING`` (попадают в ФМ) | +----------------------------+-------+------------------------------------+ | ``IV_DOCUMENT_ID`` | Тип | ``/TRL/XDE_ED_RECORD_ID_EXT`` | +----------------------------+-------+------------------------------------+ | ``IV_COMMENT`` | Тип | ``CHAR`` (длиной 2048 символов) | +----------------------------+-------+------------------------------------+ | ``IV_CERT_NUM`` | Тип | ``/TRL/XDE_ED_THUMBPRINT`` | +----------------------------+-------+------------------------------------+ | ``IV_ACCEPT`` | Тип | ``XFELD`` | +----------------------------+-------+------------------------------------+ | ``IT_SIGNEDDOCUMENTS`` | Тип | ``/TRL/XDE_T_DOCUMENTS_IM`` | +----------------------------+-------+------------------------------------+ | ``RECEIVING`` (возвращается как результат) | +----------------------------+-------+------------------------------------+ | ``ES_RETURN`` | Тип | ``/TRL/XDE_RETURN`` | +----------------------------+-------+------------------------------------+ Метод ``SIGN_IN_DOCUMENT_LOC_ACC`` для локального подписания (принять) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. table:: Параметры метода ``SIGN_IN_DOCUMENT_LOC_ACC`` :align: center :widths: 2 1 4 +----------------------------+-------+------------------------------------+ | Наименование параметра | Тип | Название словарного типа или класс | +============================+=======+====================================+ | ``IMPORTING`` (попадают в ФМ) | +----------------------------+-------+------------------------------------+ | ``IV_DOCUMENT_ID`` | Тип | ``/TRL/XDE_ED_RECORD_ID_EXT`` | +----------------------------+-------+------------------------------------+ | ``IT_SIGNEDDOCUMENTS`` | Тип | ``/TRL/XDE_T_DOCUMENTS_IM`` | +----------------------------+-------+------------------------------------+ | ``RECEIVING`` (возвращается как результат) | +----------------------------+-------+------------------------------------+ | ``ES_RETURN`` | Тип | ``/TRL/XDE_RETURN`` | +----------------------------+-------+------------------------------------+ Метод ``SIGN_IN_DOCUMENT_LOC_REJ`` для локального подписания (отклонить) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. table:: Параметры метода ``SIGN_IN_DOCUMENT_LOC_REJ`` :align: center :widths: 2 1 4 +----------------------------+-------+------------------------------------+ | Наименование параметра | Тип | Название словарного типа или класс | +============================+=======+====================================+ | ``IMPORTING`` (попадают в ФМ) | +----------------------------+-------+------------------------------------+ | ``IIV_DOCUMENT_ID`` | Тип | ``/TRL/XDE_ED_RECORD_ID_EXT`` | +----------------------------+-------+------------------------------------+ | ``IIT_SIGNEDDOCUMENTS`` | Тип | ``/TRL/XDE_T_DOCUMENTS_IM`` | +----------------------------+-------+------------------------------------+ | ``IRECEIVING`` (возвращается как результат) | +----------------------------+-------+------------------------------------+ | ``IES_RETURN`` | Тип | ``/TRL/XDE_RETURN`` | +----------------------------+-------+------------------------------------+