In this article, I wrote about the global object Id Outlook uses to correlate meetings and meeting requests. I also wrote that this value is set by Exchange on one of two properties: The global object id (http://schemas.microsoft.com/mapi/id/{6ED8DA90-450B-101B-98DA-00AA003F1305}/0x3). It does, however, not set the other object id, which is used by Outlook in cached mode: http://schemas.microsoft.com/mapi/id/{6ED8DA90-450B-101B-98DA-00AA003F1305}/0x23.
Because of this, I gave the advise to save the meeting to the calendar folder and then reload the meeting along with the autogenerated global object id. Finally, set the second id to the value of the first and commit the changed to the server.
It turns out that this method is not only inefficient but also unnecessary.
You can just set both id values to an arbitrary value. For compatibility reasons, this should be of type binary. Because this id should be unique across all mailboxes on a server, a global unique identifier (GUID) should be used. You can use this snippet to create a base64 encoded string which can be used as a global object id:
1 Guid id;
2 string value;
3
4 id = Guid.NewGuid();
5 value = Convert.ToBase64String(id.ToByteArray());
This solution works fine for all MAPI clients. But it won't work with Outlook Web Access, because OWA uses another property to identify meetings: urn:schemas:calendar:uid. You can set this property to the same value as the global object id - just save it with the datatype string. Here is an example for a meeting created with my library. I have cleaned up the namespaces to improve readability.
[UPDATE 2008-01-20 12:00 GMT]
You have to set the property 0x8218 in the appointment propertyset (http://schemas.microsoft.com/mapi/id/{00062002-0000-0000-C000-000000000046}/0x8218) to 1. This is the ResponseType property and a value of 1 means Meeting Organizer. If you don't set this property, Outlook will remove this appointment after you get a meeting response from one of the attendees.
1 PROPPATCH /exchange/administrator/Calendar/08986b34-384a-4e39-88b3-2b188fe2f349.eml HTTP/1.1
2 Depth: 0
3 Content-Type: text/xml
4 Accept-Encoding: gzip, deflate
5 Authorization: Negotiate YIIKlgYGKwYBBQUCoIIKijCCCoagJDAiBgkqhkiC9
6 Host: w2k3srv.contoso.local
7 Content-Length: 2822
8 Expect: 100-continue
9
10 <?xmlversion="1.0"encoding="UTF-8"?>
11 <propertyupdate
12 xmlns:dt="urn:uuid:c2f41010-65b3-11d1-a29f-00aa00c14882/"
13 xmlns="DAV:"
14 xmlns:common="http://schemas.microsoft.com/mapi/id/{00062008-0000-0000-c000-000000000046}/"
15 xmlns:proptag="http://schemas.microsoft.com/mapi/proptag/"
16 xmlns:cal="http://schemas.microsoft.com/mapi/id/{00062008-0000-0000-c000-000000000046}/"
17 xmlns:meeting="http://schemas.microsoft.com/mapi/id/{6ed8da90-450b-101b-98da-00aa003f1305}/">
18 <set>
19 <prop>
20 <proptag:x001a001fdt:dt="string">IPM.Appointment</proptag:x001a001f>
21 <contentclassdt:dt="string">urn:content-classes:appointment</contentclass>
22 <proptag:x0037001fdt:dt="string">test5</proptag:x0037001f>
23 <cal:_x0030_x820ddt:dt="dateTime.tz" >2007-12-13T23:57:48Z</cal:_x0030_x820d>
24 <proptag:x00600040dt:dt="dateTime.tz">2007-12-13T23:57:48Z</proptag:x00600040>
25 <cal:_x0030_x8516dt:dt="dateTime.tz">2007-12-13T23:57:48Z</cal:_x0030_x8516>
26 <cal:_x0030_x8215dt:dt="boolean" >0</cal:_x0030_x8215>
27 <common:_x0030_x8502dt:dt="dateTime.tz">2007-12-13T23:57:48Z</common:_x0030_x8502>
28 <common:_x0030_x8503dt:dt="boolean">1</common:_x0030_x8503>
29 <cal:_x0030_x820edt:dt="dateTime.tz" >2007-12-14T01:57:48Z</cal:_x0030_x820e>
30 <proptag:x00610040dt:dt="dateTime.tz">2007-12-14T01:57:48Z</proptag:x00610040>
31 <cal:_x0030_x8517dt:dt="dateTime.tz">2007-12-14T01:57:48Z</cal:_x0030_x8517>
32 <cal:_x0030_x8205dt:dt="int" >2</cal:_x0030_x8205>
33 <cal:_x0030_x8223dt:dt="boolean" >0</cal:_x0030_x8223>
34 <cal:_x0030_x8217dt:dt="int" >1</cal:_x0030_x8217>
35 <cal:_x0030_x8218dt:dt="int" >1</cal:_x0030_x8218>
36 <meeting:_x0030_x23dt:dt="bin.base64">HKSFpjzfdEK75L/tHWI4rQ==</meeting:_x0030_x23>
37 <meeting:_x0030_x3dt:dt="bin.base64">HKSFpjzfdEK75L/tHWI4rQ==</meeting:_x0030_x3>
38 <uiddt:dt="string"xmlns="urn:schemas:calendar:">a685a41c-df3c-4274-bbe4-bfed1d6238ad</uid>
39 <todt:dt="string"xmlns="urn:schemas:mailheader:">"Alice" <alice@contoso.local></to>
40 </prop>
41 </set>
42 </propertyupdate>
The corresponding meeting request looks like this:
1 PROPPATCH /exchange/administrator/Drafts/18e81af8-cfe9-4abb-86bf-814b277cb0bf.eml HTTP/1.1
2 Depth: 0
3 Content-Type: text/xml
4 Accept-Encoding: gzip, deflate
5 Authorization: Negotiate YIIKlgYGKwYBBQUCoIIKijCCCoagJDAi
6 Host: w2k3srv.contoso.local
7 Content-Length: 2766
8 Expect: 100-continue
9
10 <?xmlversion="1.0"encoding="UTF-8"?>
11 <propertyupdatexmlns:dt="urn:uuid:c2f41010-65b3-11d1-a29f-00aa00c14882/"
12 xmlns:proptag="http://schemas.microsoft.com/mapi/proptag/"
13 xmlns:meeting="http://schemas.microsoft.com/mapi/id/{6ed8da90-450b-101b-98da-00aa003f1305}/"
14 xmlns:appointment="http://schemas.microsoft.com/mapi/id/{00062002-0000-0000-c000-000000000046}/"
15 xmlns:common="http://schemas.microsoft.com/mapi/id/{00062008-0000-0000-c000-000000000046}/"
16 xmlns="DAV:">
17 <set>
18 <prop>
19 <proptag:x001a001fdt:dt="string" >IPM.Schedule.Meeting.Request</proptag:x001a001f>
20 <contentclassdt:dt="string">urn:content-classes:calendarmessage</contentclass>
21 <proptag:x0037001fdt:dt="string" >test5</proptag:x0037001f>
22 <appointment:_x0030_x820ddt:dt="dateTime.tz" >2007-12-13T23:57:48Z</appointment:_x0030_x820d>
23 <proptag:x00600040dt:dt="dateTime.tz" >2007-12-13T23:57:48Z</proptag:x00600040>
24 <common:_x0030_x8516dt:dt="dateTime.tz">2007-12-13T23:57:48Z</common:_x0030_x8516>
25 <appointment:_x0030_x820edt:dt="dateTime.tz" >2007-12-14T01:57:48Z</appointment:_x0030_x820e>
26 <proptag:x00610040dt:dt="dateTime.tz" >2007-12-14T01:57:48Z</proptag:x00610040>
27 <common:_x0030_x8517dt:dt="dateTime.tz">2007-12-14T01:57:48Z</common:_x0030_x8517>
28 <appointment:_x0030_x8215dt:dt="boolean" >0</appointment:_x0030_x8215>
29 <appointment:_x0030_x8223dt:dt="boolean" >0</appointment:_x0030_x8223>
30 <meeting:_x0030_x3dt:dt="bin.base64">HKSFpjzfdEK75L/tHWI4rQ==</meeting:_x0030_x3>
31 <meeting:_x0030_x23dt:dt="bin.base64" >HKSFpjzfdEK75L/tHWI4rQ==</meeting:_x0030_x23>
32 <uiddt:dt="string"xmlns="urn:schemas:calendar:">a685a41c-df3c-4274-bbe4-bfed1d6238ad</uid>
33 <appointment:_x0030_x8217dt:dt="int" >3</appointment:_x0030_x8217>
34 <appointment:_x0030_x8205dt:dt="int" >2</appointment:_x0030_x8205>
35 <appointment:_x0030_x8224dt:dt="int" >2</appointment:_x0030_x8224>
36 <proptag:x0063000bdt:dt="boolean" >1</proptag:x0063000b>
37 <todt:dt="string"xmlns="urn:schemas:mailheader:">"Alice" <alice@contoso.local></to>
38 </prop>
39 </set>
40 </propertyupdate>