InfiniTec - Henning Krauses Blog

Don't adjust your mind - it's reality that is malfunctioning

More on meetings and meeting requests

Updates

  • 2007-12-13 21:20 GMT: Updated the article to include information about Outlook Web Access
  • 2008-01-20 12:00 GMT: Important Bugfix.

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" &lt;alice@contoso.local&gt;</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" &lt;alice@contoso.local&gt;</to>

   38         </prop>

   39     </set>

   40 </propertyupdate>

 


Technorati:

Posted by Henning Krause on Friday, July 13, 2007 12:00 AM, last modified on Saturday, July 2, 2011 3:51 PM
Permalink | Post RSSRSS comment feed

Comments (2) -

On 8/22/2008 10:44:29 PM Paul Bonfanti United States wrote:

Paul Bonfanti

I tried this with Exchange 2007 and everything works fine except that when the Accept response is deleted the meeting is also deleted from the Calendar. I made sure to set the property x8218 to 1 but it still deletes it. Any ideas?

Here&amp;#39;s my property update for the meeting:

&amp;amp;lt;D:propertyupdate xmlns:mapi=&amp;amp;quot;schemas.microsoft.com/mapi/&amp;amp;quot; xmlnsLaughing=&amp;amp;quot;DAV:&amp;amp;quot; xmlns:x=&amp;amp;quot;xml:&amp;amp;quot; xmlns:c=&amp;amp;quot;urn:schemas:calendar:&amp;amp;quot; xmlns:h=&amp;amp;quot;urn:schemas:httpmail:&amp;amp;quot; xmlns:m=&amp;amp;quot;urn:schemas:mailheader:&amp;amp;quot; xmlns:e=&amp;amp;quot;schemas.microsoft.com/exchange/&amp;amp;quot; xmlns:meeting=&amp;amp;quot;http://schemas.microsoft.com/mapi/id/{6ed8da90-450b-101b-98da-00aa003f1305}/&amp;amp;quot; xmlns:cal=&amp;amp;quot;http://schemas.microsoft.com/mapi/id/{00062008-0000-0000-c000-000000000046}/&amp;amp;quot;&amp;amp;gt;
&amp;amp;lt;D:set&amp;amp;gt;
&amp;amp;lt;D:prop&amp;amp;gt;
  &amp;amp;lt;D:contentclass&amp;amp;gt;urn:content-classes:appointment&amp;amp;lt;/D:contentclass&amp;amp;gt;
  &amp;amp;lt;e:outlookmessageclass&amp;amp;gt;IPM.Appointment&amp;amp;lt;/e:outlookmessageclass&amp;amp;gt;
  &amp;amp;lt;cal:_x0030_x8215&amp;amp;gt;0&amp;amp;lt;/cal:_x0030_x8215&amp;amp;gt;
  &amp;amp;lt;cal:_x0030_x8503&amp;amp;gt;1&amp;amp;lt;/cal:_x0030_x8503&amp;amp;gt;
  &amp;amp;lt;cal:_x0030_x8205&amp;amp;gt;2&amp;amp;lt;/cal:_x0030_x8205&amp;amp;gt;
  &amp;amp;lt;cal:_x0030_x8223&amp;amp;gt;0&amp;amp;lt;/cal:_x0030_x8223&amp;amp;gt;
  &amp;amp;lt;cal:_x0030_x8217&amp;amp;gt;1&amp;amp;lt;/cal:_x0030_x8217&amp;amp;gt;
  &amp;amp;lt;cal:_x0030_x8218&amp;amp;gt;1&amp;amp;lt;/cal:_x0030_x8218&amp;amp;gt;
  &amp;amp;lt;meeting:_x0030_x23&amp;amp;gt;6Hn1Jp/R6ECkcBP1UeBLig==&amp;amp;lt;/meeting:_x0030_x23&amp;amp;gt;
  &amp;amp;lt;meeting:_x0030_x3&amp;amp;gt;6Hn1Jp/R6ECkcBP1UeBLig==&amp;amp;lt;/meeting:_x0030_x3&amp;amp;gt;
  &amp;amp;lt;c:uid&amp;amp;gt;26f579e8-d19f-40e8-a470-13f551e04b8a&amp;amp;lt;/c:uid&amp;amp;gt;
  &amp;amp;lt;c:alldayevent&amp;amp;gt;0&amp;amp;lt;/c:alldayevent&amp;amp;gt;
  &amp;amp;lt;c:duration&amp;amp;gt;3600&amp;amp;lt;/c:duration&amp;amp;gt;
  &amp;amp;lt;c:dtend&amp;amp;gt;2008-08-23T19:00:00.000Z&amp;amp;lt;/c:dtend&amp;amp;gt;
  &amp;amp;lt;h:importance&amp;amp;gt;1&amp;amp;lt;/h:importance&amp;amp;gt;
  &amp;amp;lt;c:instancetype&amp;amp;gt;0&amp;amp;lt;/c:instancetype&amp;amp;gt;
  &amp;amp;lt;h:htmldescription&amp;amp;gt;&amp;amp;lt;b&amp;amp;gt;A meeting created by BD.&amp;amp;lt;/b&amp;amp;gt;&amp;amp;lt;/h:htmldescription&amp;amp;gt;
  &amp;amp;lt;c:reminderoffset&amp;amp;gt;300&amp;amp;lt;/c:reminderoffset&amp;amp;gt;
  &amp;amp;lt;m:to&amp;amp;gt;support@newatlanta.com&amp;amp;lt;/m:to&amp;amp;gt;
  &amp;amp;lt;c:dtstart&amp;amp;gt;2008-08-23T18:00:00.000Z&amp;amp;lt;/c:dtstart&amp;amp;gt;
  &amp;amp;lt;m:subject&amp;amp;gt;BD Test Meeting&amp;amp;lt;/m:subject&amp;amp;gt;
  &amp;amp;lt;c:responserequested&amp;amp;gt;1&amp;amp;lt;/c:responserequested&amp;amp;gt;
&amp;amp;lt;/D:prop&amp;amp;gt;
&amp;amp;lt;/D:set&amp;amp;gt;
&amp;amp;lt;/D:propertyupdate&amp;amp;gt;

Here&amp;#39;s my property update for the meeting request:

&amp;amp;lt;D:propertyupdate xmlns:proptag=&amp;amp;quot;schemas.microsoft.com/.../&amp;amp;quot; xmlns:mapi=&amp;amp;quot;schemas.microsoft.com/mapi/&amp;amp;quot; xmlnsLaughing=&amp;amp;quot;DAV:&amp;amp;quot; xmlns:x=&amp;amp;quot;xml:&amp;amp;quot; xmlns:c=&amp;amp;quot;urn:schemas:calendar:&amp;amp;quot; xmlns:h=&amp;amp;quot;urn:schemas:httpmail:&amp;amp;quot; xmlns:m=&amp;amp;quot;urn:schemas:mailheader:&amp;amp;quot; xmlns:e=&amp;amp;quot;schemas.microsoft.com/exchange/&amp;amp;quot; xmlns:meeting=&amp;amp;quot;http://schemas.microsoft.com/mapi/id/{6ed8da90-450b-101b-98da-00aa003f1305}/&amp;amp;quot; xmlns:cal=&amp;amp;quot;http://schemas.microsoft.com/mapi/id/{00062008-0000-0000-c000-000000000046}/&amp;amp;quot;&amp;amp;gt;
&amp;amp;lt;D:set&amp;amp;gt;
&amp;amp;lt;D:prop&amp;amp;gt;
  &amp;amp;lt;D:contentclass&amp;amp;gt;urn:content-classes:calendarmessage&amp;amp;lt;/D:contentclass&amp;amp;gt;
  &amp;amp;lt;e:outlookmessageclass&amp;amp;gt;IPM.Schedule.Meeting.Request&amp;amp;lt;/e:outlookmessageclass&amp;amp;gt;
  &amp;amp;lt;c:alldayevent&amp;amp;gt;0&amp;amp;lt;/c:alldayevent&amp;amp;gt;
  &amp;amp;lt;c:duration&amp;amp;gt;3600&amp;amp;lt;/c:duration&amp;amp;gt;
  &amp;amp;lt;c:dtend&amp;amp;gt;2008-08-23T19:00:00.000Z&amp;amp;lt;/c:dtend&amp;amp;gt;
  &amp;amp;lt;h:importance&amp;amp;gt;1&amp;amp;lt;/h:importance&amp;amp;gt;
  &amp;amp;lt;c:instancetype&amp;amp;gt;0&amp;amp;lt;/c:instancetype&amp;amp;gt;
  &amp;amp;lt;h:htmldescription&amp;amp;gt;&amp;amp;lt;b&amp;amp;gt;A meeting created by BD.&amp;amp;lt;/b&amp;amp;gt;&amp;amp;lt;/h:htmldescription&amp;amp;gt;
  &amp;amp;lt;c:reminderoffset&amp;amp;gt;300&amp;amp;lt;/c:reminderoffset&amp;amp;gt;
  &amp;amp;lt;m:to&amp;amp;gt;support@newatlanta.com&amp;amp;lt;/m:to&amp;amp;gt;
  &amp;amp;lt;c:dtstart&amp;amp;gt;2008-08-23T18:00:00.000Z&amp;amp;lt;/c:dtstart&amp;amp;gt;
  &amp;amp;lt;m:subject&amp;amp;gt;BD Test Meeting&amp;amp;lt;/m:subject&amp;amp;gt;
  &amp;amp;lt;c:responserequested&amp;amp;gt;1&amp;amp;lt;/c:responserequested&amp;amp;gt;
  &amp;amp;lt;cal:_x0030_x8215&amp;amp;gt;0&amp;amp;lt;/cal:_x0030_x8215&amp;amp;gt;
  &amp;amp;lt;cal:_x0030_x8223&amp;amp;gt;0&amp;amp;lt;/cal:_x0030_x8223&amp;amp;gt;
  &amp;amp;lt;meeting:_x0030_x23&amp;amp;gt;6Hn1Jp/R6ECkcBP1UeBLig==&amp;amp;lt;/meeting:_x0030_x23&amp;amp;gt;
  &amp;amp;lt;meeting:_x0030_x3&amp;amp;gt;6Hn1Jp/R6ECkcBP1UeBLig==&amp;amp;lt;/meeting:_x0030_x3&amp;amp;gt;
  &amp;amp;lt;c:uid&amp;amp;gt;26f579e8-d19f-40e8-a470-13f551e04b8a&amp;amp;lt;/c:uid&amp;amp;gt;
  &amp;amp;lt;cal:_x0030_x8217&amp;amp;gt;3&amp;amp;lt;/cal:_x0030_x8217&amp;amp;gt;
  &amp;amp;lt;cal:_x0030_x8205&amp;amp;gt;2&amp;amp;lt;/cal:_x0030_x8205&amp;amp;gt;
  &amp;amp;lt;cal:_x0030_x8224&amp;amp;gt;2&amp;amp;lt;/cal:_x0030_x8224&amp;amp;gt;
  &amp;amp;lt;proptag:x0063000b&amp;amp;gt;1&amp;amp;lt;/proptag:x0063000b&amp;amp;gt;
&amp;amp;lt;/D:prop&amp;amp;gt;
&amp;amp;lt;/D:set&amp;amp;gt;
&amp;amp;lt;/D:propertyupdate&amp;amp;gt;

On 7/2/2011 3:51:55 PM Lukas wrote:

Lukas

Hi
First off all I would like to say thank you very much that you share your knowledge. So... Thanks!

I was able to successfully create a meeting request for a recurring meeting.
The meeting request is based on the rucurring master appointment. So far, so good.
Unfortunately I was running into problems when I was trying to update the meeting request.

The problem:

I create a Meeting with three occurrences and one participant.
The participant recieves the meeting request as expected.
I update the second occurrence to another time e.g. from 3pm to 5pm.
The participant recieves the meeting request but if he accept the request the existing series will not be updated. Instead a new appointment is created for this request.

Do you have any idea what I should check?

Thank you and best regards
Lukas