3.2.5.7 Working with Property Groups and Partial Changes

Property groups are defined by the PropertyGroup structure, as specified in section 2.2.2.8.1. The PropertyGroup structure contains an array of properties, referred to as a property group. One or more PropertyGroup structures are contained in each PropertyGroupInfo structure, as specified in section 2.2.2.8. Each PropertyGroupInfo structure is referred to as a property group mapping, as it maps the properties in the messaging object to a collection of property groups. The property group mapping is included in the FastTransfer stream in the groupInfo element, as specified in section 2.2.4.3.8. The MetaTagIncrSyncGroupId meta-property (section 2.2.4.1.5.4) is used to identify the property group mapping used on a particular messaging object, and the MetaTagIncrementalSyncMessagePartial meta-property (section 2.2.4.1.5.5) informs the client of the property group mapping to use when interpreting the partial item data that follows the meta-property in the FastTransfer stream.

ICS is optimized for reporting partial changes to messages using these property groups. The simplest approach for servers to provide information about partial changes is to track changes made within groups of properties. A group is considered changed if any of the properties in the group are modified or deleted. It is up to the server to define a property group mapping by adding properties to a PropertyGroup structure. ICS offers a way to communicate property group mapping information per-message, so every message can use its own property group mapping. However, to minimize overhead, it is recommended that the number of different mappings is kept to a minimum.

For example, a change to any property in the group of server-defined properties that track changes to message attachments would mean that all the properties in that property group are updated during the next synchronization. Likewise, a change to any property in the group of server defined properties that track changes to the body of the message would mean that all the properties in that property group are updated during the next synchronization.

To track changes to property groups on a message, servers SHOULD keep change numbers for each property group, and assign a new change number to both the group and the message whenever a change is made to a property that belongs to the group. Note that marking a message as read or unread is the most common type of message modification, and there is a specific mechanism to support just that change, as specified in section 3.2.5.6.

One message in a mailbox can have a different property group mapping than another message, which means that the properties in group N on one message can be different than the properties in group N in another message. Property group mappings do not change frequently, but they do change with server upgrades. When a message is modified and the default mapping has changed after an upgrade, the property group mapping of the message is updated.

Servers that are implemented to support<33> partial message change synchronization MUST either use a mechanism described in this section, or use an alternative mechanism that localizes changes to a message to a set of properties and subobjects, which can be unambiguously expressed by using the messageChangePartial element, as specified in section 2.2.4.3.15, of the FastTransfer stream. Servers that are not implemented to support partial message change synchronization ignore the PartialItem flat of the SendOptions field, as specified in section 2.2.3.1.1.1.2, and download the item as a full item by using the messageChangeFull element, as specified in section 2.2.4.3.13, of the FastTransfer stream.