3.1.4.5 Mail App Requests Web Services Identifier

When a mail add-in requests the web services identifier for an object, the client MUST derive the identifier using the following procedure:

  1. If deriving a web services identifier for an Email object, a Calendar object that is not recurring, or a Recurring Calendar object, the client creates an ItemData structure as specified in section 2.2.6.1.1.1. If deriving a web services identifier for a single occurrence of a Recurring Calendar object, the client creates a RecurrenceItemData structure as specified in section 2.2.6.1.1.2. If deriving a web services identifier for a Conversation object, the client creates a ConversationData structure as specified in section 2.2.6.1.1.3.

  2. The client creates a DerivedId structure as specified in section 2.2.6.1.1 and puts the structure created in step 1 in the Data field.

  3. The client compresses the DerivedId structure using the following algorithm. For examples, see section 4.4.1 and section 4.4.2.

    1. If a byte value is repeated, replace the repeated bytes with three bytes. The repeated byte is written into the first two bytes, and the third byte is set to the total number of times that byte is repeated in the uncompressed stream, minus two.

    2. If a byte value is not repeated, copy it directly into the compressed stream.

  4. If the length of the compressed DerivedId structure is greater than or equal to the length of the uncompressed DerivedId structure, clients MUST put the uncompressed DerivedId structure in the Payload field of a new DerivedWSId structure, as specified in section 2.2.6.1, and set the CompressionType field to 0x00. Otherwise, clients MUST put the compressed DerivedId structure in the Payload field of a new DerivedWSId structure and set the CompressionType field to 0x01.

  5. The client encodes the DerivedWSId structure using base64 encoding and returns the result to the mail add-in.