Запуск синхронизации
В карточке записи справочника Виды межсистемных процессов в поле Тип справочника указывается синхронизируемый справочник. Запись справочника Виды межсистемных процессов должна быть действующей.
Когда пользователь изменяет или удаляет запись справочника, в событиях «Запись. Сохранение После», «Запись. Удаление после» вызывается функция DCISynchronizeRecord. На основе данных справочника Настройки систем-получателей для межсистемных процессов функция вычисляет имена видов межсистемных процессов и список систем-получателей.
Для отправки сообщения запускается серверное событие DCIOnReferenceRecordSynchronization. В параметрах серверного события передается имя вида межсистемного процесса, получатель, глобальный ИД измененной или удаленной записи. Для каждой системы-получателя запускается отдельное серверное событие.
Отправка сообщения
Серверное событие DCIOnReferenceRecordSynchronization отправляет сообщение, используя обработчик DCIReferenceRecordSynchronizationHandler.
Порядок отправки сообщения:
1. | Ищется незавершенный межсистемный процесс для синхронизируемой записи справочника. Ее глобальный ИД передается в параметр RecordGlobalId серверного события. Если процесс найден, то сообщение отправляется в рамках найденного процесса. Если не найден, то создается новый процесс. |
2. | На время отправки сообщения процесс блокируется. |
3. | Отправляется сообщение системе-получателю с помощью функции DCIInternalSendProcessMessage: |
• | создается объект сообщения IProcessMessage и заполняются необходимые свойства; |
• | если есть ведущее сообщение, то проверяется, отправлено ли оно. Если не отправлено, то отправка текущего сообщения откладывается. В этом случае генерируется исключение; |
• | сообщение отправляется в адаптер к Directum: |
• | выполняется обработчик отправки сообщения; |
• | сообщение сохраняется, его состояние меняется на Отправлено. |
Примечание
В режиме отладки обработчик отправки сообщения не выполняется, а статус сообщения меняется на Отладка.
4. | Разблокируется процесс для дальнейшей отправки или приема сообщений. |
Получение сообщения
После обработки входящего сообщения адаптером к Directum в системе-получателе запускается серверное событие DCIOnReceiveProcessMessage. Оно использует обработчик DCIReceiveProcessMessageHandler. В параметрах обработчика передается глобальный ИД сообщения.
Порядок получения сообщения:
1. | Ищется сообщение по глобальному ИД. |
2. | По сообщению определяется межсистемный процесс. |
3. | На время приема сообщения процесс блокируется. |
4. | Принимается входящее сообщение: |
• | выполняется обработчик сообщения; |
• | состояние сообщения меняется на Принято. |
Если при выполнении обработчика приема сообщения возникает ошибка, то статус сообщения меняется на Ошибка. Текст ошибки записывается в поле Примечание.
Примечание
В режиме отладки обработчик приема сообщения не выполняется, а статус сообщения меняется на Отладка.
5. | Разблокируется процесс для дальнейшей отправки или приема сообщений. |
После того, как сообщение успешно принято, оно подтверждается:
• | заполняется поле Дата подтверждения; |
• | состояние сообщения меняется на Подтверждено. |