Creatio development guide
This documentation is valid for Creatio version 7.14.0. We recommend using the newest version of Creatio documentation.

Working with email threads

Glossary Item Box

Introduction

The mechanism for creating email threads is available in bpm’online since version 7.10.0. The main purpose of this mechanism is to improve the email interface. Use this mechanism to easily find email connections, e.g. by copying the connections of the previous email.

The thread construction mechanism is based on the In-Reply-To email header data. According to generally accepted agreements, this header should contain the Message-ID email identifier. The bpm'online application retrieves these headers from the synchronized Email service (IMAP / Exchange).

The mechanism can be divided into two logical parts – creating threads and populating activity connection fields.

Creating email threads

The EmailMessageData detail contains 3 fields:

  • MessageId – a string of 500 characters in length;
  • InReplyTo – a string of 500 characters in length;
  • ParentMessageId – a lookup field that references the EmailMessageData detail.

The MessageId and InReplyTo fields are populated with the corresponding message header values during synchronization.

The ParentMessageId field is populated with the following values:

  1. The EmailMessageData table searches for records where MessageId is identical to InReplyTo. The first found record is set as the current ParentMessageId.
  2. The ParentMessageId field is populated with the current Id value in all EmailMessageData records if the InReplyTo field of these records is identical to the MessageId field.

Email thread connections are updated for every email.

Copying previous email connections in a thread

Spreading activity connections across the thread upon adding an email. The [Case] field is used in this case.

A parent record with the activity that includes the populated [Contact] field is searched for the current EmailMessageData record. The [Case] field values from this activity will be spread across the thread. Starting with the found EmailMessageData record, all child EmailMessageData records are found and their [Case] field value is updated.

A thread with 3 emails:

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

Another email is received in the thread:

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

Starting with the record in which EmailMessageId is "60C00B01-D0BF-40F6-923E-1830E433AEA1", a record with the populated CaseId column is searched (does not contain NULL). This is a record where EmailMessageId = "F05B529D-C98C-4E26-BE00-21F8721AEF58", and CaseId = "1C6E18E3-48B1-495E-8EF9-ACA35DB9DE0B".

Now, starting with the record in which EmailMessageId is "F05B529D-C98C-4E26-BE00-21F8721AEF58", bpm’online updates the value of the CaseId field for the connected records throughout the thread.

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

NOTE

Mail servers sometimes send out letters in the wrong sequence, disregarding the way they were written in the thread

(e.g. during synchronization, emails are received first from the inbox and then from the outbox). This complicates the mechanism. Building a thread for the emails that were not received consistently is impossible during synchronization. In that case, a thread can be built once the synchronization is complete. If certain mailbox folders are not loaded, or if the conversation was interrupted by other participants, the thread search logic may not work. However, the thread can be built when all emails are downloaded from the inbox in most cases.

Recommendations for adding a custom search process for all thread connections after downloading an email

Use the following guidelines to start working on a new email after thread formation:

  1. The Id field of the synchronization session appears in the EmailMessageData table (the values are unique for all synchronization processes). This field is populated only for synchronized emails.
  2. A record is added to the new FinishedSyncSession table if at least one email was received during synchronization.
  3. Certain processes that responded to the signal of saving activities now respond to the (Inserted) insertion signal of the FinishedSyncSession object. Emails from EmailMessageData are selected based on the synchronization session Id. The MailboxSyncSettings field of the EmailMessageData object can be used to select Email messages from the service box.

© bpm'online 2002-2019.

Did you find this information useful?

How can we improve it?