Прием сообщений

Прием сообщений ведется в 4 этапа:

  1. По всем профилям активного пользователя выполняется загрузка почты в соответствии с выбранным типом обмена. Полученные файлы размещаются в корневом каталоге входящих сообщений. По умолчанию, это каталог INBOX.
  2. Последовательно просматриваются все файлы, лежащие в INBOX. В работу берутся XML-файлы, соответствующие по формату ЭД-сообщению (должны присутствовать тэги Envelope, Header, EDHeader). Файлы, содержащие ProcessId, за исключением сообщения «Подтверждение открытия процедуры», размещаются в каталоге INBOX\ProcessId_XXX, остальные – в каталоге INBOX\ProcessId_NONE. ProcessId есть в сообщениях по декларированию и сообщениях, идущих по ветке ДО-1 и ДО-2 СВХ. Файлы, не относящиеся к ЭД, остаются в INBOX.
  3. Последовательно просматриваются все подкаталоги INBOX, в имени которых присутствует «ProcessId».
  • Каталог _NONE. Просматриваются все файлы. Для каждого файла отдельно проверяется InitEnvelopeId. Если не заполнен, файл признается годным, только если ExchType указывает на СВХ, иначе перемещается в папку BACKUP\ERROR.
    • Если InitEnvelopeId заполнен, по базе ищется сообщение, ответом на которое является данный файл.
    • Если не найдено, файл в обработку не берется, ждет своей очереди.
    • Если найдено, считываются его параметры и определяется тип: декларирование, ЭАД, ПИ или СВХ.
  • Для декларирования файл берется в обработку, если соблюдены следующие условия:
    1. он относится к ДТ, которая есть в активной базе данных DCL;
    2. в базе «Монитора ЭД» записаны идентификаторы пользователя и профиля, отправившего ДТ (на уровне запроса открытия процедуры, истории, статуса);
    3. пользователь ДТ - это текущий пользователь;
    4. профиль есть в базе «Монитора ЭД».
      • Для ЭАД файл берется в обработку, если идентификатор архива есть в базе DCL.
      • Для ПИ и СВХ файл берется в обработку, если клиентский модуль программы опознает идентификатор документа, как свой.
  • Каталог фиксированного ProcessId. Проверяется ProcessId из имени каталога.
    • Если программа подключена к DCL, выполняется проверка, как для каталога _NONE (наличие ProcessId в базе, наличие пользователя и профиля).
    • Если ProcessId не подошел по декларированию, тогда, если есть подключение к клиенту СВХ, решение о пригодности ProcessId принимается клиентом СВХ.
    • Если ProcessId признан пригодным, все файлы из его каталога признаются пригодными.

Если ProcessId отвергнут, то файлы из каталога анализируются по отдельности, так как должно быть сделано исключение для сообщений «История процедуры», «Повторное сообщение». Особенность в том, что история и повтор могут быть запрошены и при отсутствии ДТ в активной базе DCL. Для файла, содержащего историю/повтор, выполняется проверка наличия пользователя и профиля. Если проверка проходит, контролируется наличие в базе «Монитора ЭД» зарегистрированного запроса истории/повтора, ответом на который является анализируемый файл. Если проверка проходит, файл признается пригодным.

Файлы, которые признаны пригодными, перемещаются в локальный временный каталог пользователя в предварительно очищенный подкаталог \CTM_MONITOR_ED\INBOX_WORK, прочие файлы остаются в очереди.

  1. Последовательно обрабатываются все файлы во временном каталоге. Анализируется тип обмена, тип и содержание сообщения. Информация об измененных статусах документов передается в клиентские модули программ, формируются и отсылаются технологические подтверждения. Копии файлов размещаются в BACKUP\IN-OUT.

Без дополнительных уведомлений перемещаются в BACKUP сообщения:

  • Не содержащие тэгов EnvelopeId, MsgId;
  • Повторные (за исключением повторов, пришедших в ответ на соответствующий запрос);
  • Сообщения с нераспознанным MsgId.
  • Сообщения, являющиеся ответами на отсутствующее в базе сообщение (по InitEnvelopeId, RefDocumentId или по смыслу, как, например, разрешение или отказ на внесение изменений в ДТ) возвращаются обратно в каталог INBOX.

Таким образом, временный каталог полностью очищается.

При перемещении между каталогами файлы каждый раз переименовываются. Имя включает дату, время, порядковый номер в пределах секунды.

1329