Search code examples
office-jsoutlook-addinoutlook-web-addinsappointment

Outlook web add-in: How to get ID that can identify an appointment in both web and desktop version


We currently have a feature in outlook COM add-in what I want to recreate in the outlook web add-in. Its an appointment synchronisation to a database. I need an ID to identify the appointment in both the web and desktop add-in.

I can access every property what I need for the API call (that saves the appointment to an other database) from the appointment with the office.js, except one field. Which is the ID in a correct form.

So with office.js I tried the mailbox.item.itemId and the mailbox.item.getItemIdAsync(), but they are giving me the appointment ID in this format: AAMkADYwNGJjODU4LWViMDgtTIFhZS04ZTE3LThiNzI5OTMwNkgyMwBGAAAAAAC5oTj3DmbxQrZMZ6MYr9cgBwBaduq66V0XT7lheOKO9SroAAAAAAENAABaduq66V1XT7lheOKO9SroAAACZbfrAAA=

In the desktop add-in we call the API (that saves the appointment to a database) with an ID format (MAPI), which is an exchange entry ID like this: 000000001CB72DAA8A37E948932FAA03D2F9100707001F7300F2F229454DA115DA21D7D8EFD000000000010D00001F7300F2F229454DA115DA31D5D9EFD00000074F75210000

So I would need an ID in my web add-in for the appointment, which look like that.

I also tried Office.CustomProperties because in the desktop version we save the ID to the User peoperty but I guess these two are not the same.

The question is that is it possible to get an ID to identify the appointment in both the web and desktop add-in as well?. Any ID would be good that could identify the appointment in both version.


Solution

  • The mailbox.item.itemId is the Ews Id. The Ews Id of an object is actually the MAPI Entry Id, with "extra stuff" around it. (namely a mailbox guid). And then encoded in various ways(RLE/Base64), with some extra bits. There are ways to convert from one to the other (i.e. see convertIds EWS call). But for identification purposes the itemId should function the same as the MAPI EntryId.

    Note that the itemId/EntryId does have some limitations. (though they would also have been limitations in your COM Add-in as well). If the Item Moves to a different folder, etc. The Id will change. On recurring meetings, the instances of meetings will have unique IDs. (the office.js api has ways to get the ewsid of the parent object). Sometimes people tracking appointments will use the UID value (learn.microsoft.com/en-us/openspecs/exchange_server_protocols/…) But this is not obtainable directly in the Office.js api right now.

    It could be obtained by making a graph/rest/ews call.