Creatio development guide
PDF
Разработка в Creatio на примерах
Это документация Creatio версии 7.16.0. Мы рекомендуем использовать новую версию документации.

Email-сообщения. Работа с цепочками писем

Glossary Item Box

Общие сведения

Начиная с версии 7.10.0 в приложении добавлен механизм формирования цепочек Email-сообщений. Целью данного решения является возможность улучшить пользовательский интерфейс работы с Email-сообщениями. Также использование этого механизма позволит упростить поиск связей для писем, например, копированием связей предыдущего письма.

Разработанный механизм построения цепочек опирается на данные из заголовков Email-сообщений In-Reply-To. В этом заголовке по общепринятым соглашениям должен содержаться идентификатор письма Message-ID, на который отвечает текущее письмо. Приложение Creatio получает эти заголовки из Email-сервиса, с которым настроена синхронизация (IMAP/Exchange).

Условно механизм работы с цепочками можно поделить на две логические части — создание цепочки и заполнение связей активности.

Создание цепочек Email-сообщений

В детали EmailMessageData добавлены три поля, отвечающие за цепочки Email-сообщений:

  • MessageId — строка длиной 500 символов;
  • InReplyTo — строка длиной 500 символов;
  • ParentMessageId — справочное поле, ссылающееся на деталь EmailMessageData.

При синхронизации писем поля MessageId и InReplyTo заполняются соответствующими значениями из заголовков письма.

Поле ParentMessageId заполняется следующим образом:

  1. В таблице EmailMessageData выполняется поиск записей, у которых MessageId равен текущему InReplyTo. Если записи найдены, первая из них устанавливается как текущий ParentMessageId.
  2. Во всех записях EmailMessageData, у которых InReplyTo равен текущему MessageId и поле ParentMessageId не заполнено, полю ParentMessageId присваивается значение, равное текущему Id.

Таким образом, для каждого письма актуализируются связи с соседними письмами в цепочках.

Копирование связей предыдущего письма в цепочке

После добавления письма необходимо распространить связи активности по цепочке. Этот процесс будет рассмотрен на примере поля [Обращение].

Для текущей записи EmailMessageData выполняется поиск такой родительской записи, у которой указана активность с заполненным полем [Обращение]. Значение поля [Обращение] из этой активности будет распространятся по цепочке. Начиная с найденной записи EmailMessageData выполняется поиск всех дочерних записей EmailMessageData и обновляется значение поля [Обращение] в найденных активностях.

Например, существует цепочка из трех Email-сообщений:

ActivityId Title CaseId EmailMessageId EmailMessageParentId
28BD6D59-B9D7-4FF9-89F5-FEE1DD003912 Re: relation NULL 66812FBF-411B-4FE0-94C9-1E70FBBEB2D3 F05B529D-C98C-4E26-BE00-21F8721AEF58
DC0A40D4-700A-40EB-B394-90E0376C3B5D Re: relation 1C6E18E3-48B1-495E-8EF9-ACA35DB9DE0B F05B529D-C98C-4E26-BE00-21F8721AEF58 E1A0120E-B7C0-4261-9DE0-C63341BF1E0B
D7A9B82C-ED46-437C-980A-B2650D4FF3DA relation 906909E8-4D64-47FD-AF92-B65B0826AEC3 E1A0120E-B7C0-4261-9DE0-C63341BF1E0B NULL

Затем в цепочку приходит еще одно Email-сообщение:

ActivityId Title CaseId EmailMessageId EmailMessageParentId
6623B052-73AD-4AE5-AE61-A6F9BCD930A0 Re: relation NULL 60C00B01-D0BF-40F6-923E-1830E433AEA1 66812FBF-411B-4FE0-94C9-1E70FBBEB2D3
28BD6D59-B9D7-4FF9-89F5-FEE1DD003912 Re: relation NULL 66812FBF-411B-4FE0-94C9-1E70FBBEB2D3 F05B529D-C98C-4E26-BE00-21F8721AEF58
DC0A40D4-700A-40EB-B394-90E0376C3B5D Re: relation 1C6E18E3-48B1-495E-8EF9-ACA35DB9DE0B F05B529D-C98C-4E26-BE00-21F8721AEF58 E1A0120E-B7C0-4261-9DE0-C63341BF1E0B
D7A9B82C-ED46-437C-980A-B2650D4FF3DA relation 906909E8-4D64-47FD-AF92-B65B0826AEC3 E1A0120E-B7C0-4261-9DE0-C63341BF1E0B NULL

Начиная с записи, у которой EmailMessageId = "60C00B01-D0BF-40F6-923E-1830E433AEA1" выполняется поиск записи, у которой колонка CaseId заполнена (не содержит NULL). Это запись, у которой EmailMessageId = "F05B529D-C98C-4E26-BE00-21F8721AEF58", а CaseId = "1C6E18E3-48B1-495E-8EF9-ACA35DB9DE0B".

Теперь начиная с записи, у которой EmailMessageId = "F05B529D-C98C-4E26-BE00-21F8721AEF58", необходимо обновить значение поля CaseId для дочерних записей по всей цепочке.

ActivityId Title CaseId EmailMessageId EmailMessageParentId
6623B052-73AD-4AE5-AE61-A6F9BCD930A0 Re: relation 1C6E18E3-48B1-495E-8EF9-ACA35DB9DE0B 60C00B01-D0BF-40F6-923E-1830E433AEA1 66812FBF-411B-4FE0-94C9-1E70FBBEB2D3
28BD6D59-B9D7-4FF9-89F5-FEE1DD003912 Re: relation 1C6E18E3-48B1-495E-8EF9-ACA35DB9DE0B 66812FBF-411B-4FE0-94C9-1E70FBBEB2D3 F05B529D-C98C-4E26-BE00-21F8721AEF58
DC0A40D4-700A-40EB-B394-90E0376C3B5D Re: relation 1C6E18E3-48B1-495E-8EF9-ACA35DB9DE0B F05B529D-C98C-4E26-BE00-21F8721AEF58 E1A0120E-B7C0-4261-9DE0-C63341BF1E0B
D7A9B82C-ED46-437C-980A-B2650D4FF3DA relation 906909E8-4D64-47FD-AF92-B65B0826AEC3 E1A0120E-B7C0-4261-9DE0-C63341BF1E0B NULL

Сложности данного механизма обусловлены тем, что очень часто почтовый сервер отдает письма не в той последовательности, в которой они были написаны в цепочке.

Самый простой и частый пример — в ходе сессии синхронизации сначала приходит почта из папки "Входящие", а затем — из папки "Исходящие". Если же письма были получены не последовательно, то не будет возможности построить цепочку на момент загрузки каждого письма. Но такая возможность появляется к завершению цикла синхронизации всех писем почтового ящика. Безусловно, логика поиска цепочек может не сработать, если настроена загрузка не всех папок почтового ящика, или цепочка была прервана другими участниками переписки. Тем не менее, в большом количестве случаев цепочку можно построить на момент завершения загрузки всех писем из почтового ящика.

Рекомендации по добавлению пользовательского процесса поиска всех связей в цепочках после загрузки Email-сообщения

Для того чтобы начать работу по новому полученному Email-сообщению после завершения формирования цепочек, необходимо знать следующее:

  1. В таблице EmailMessageData появляется поле Id сессии синхронизации, уникальное для одного запуска процесса синхронизации. Заполняется только для синхронизированных Email-сообщений.
  2. Появляется таблица FinishedSyncSession, в которую добавляется запись, если в рамках синхронизации пришло хоть одно Email-сообщение.
  3. Процессы, ранее слушавшие сигнал сохранения активности, в новой реализации слушают сигнал добавления (Inserted) объекта FinishedSyncSession. По значению Id сессии синхронизации выбираются Email-сообщения из EmailMessageData. Также в EmailMessageData существует поле MailboxSyncSettings, которое можно использовать для отбора Email-сообщений из сервисного ящика.

© Terrasoft 2002-2020.

Был ли данный материал полезен?

Как можно улучшить эту статью?