alek kowalczyk
alek kowalczyk

Reputation: 4936

Get custom property set in Outlook Add-In via Microsoft Graph

Let's say I have in my Outlook Add-In (using Office.js) following code running on a compose form of an appointment:

const item = Office.context.mailbox.item;
item.loadCustomPropertiesAsync((result) => {
    const props = result.value;
    const testProp = props.get("my_prop");
    console.log("CUSTOM_PROP", testProp);
    props.set("my_prop", "test_value");
    props.saveAsync((saveResult) =>
        console.log("SAVE_CUSTOM_PROP", saveResult));
});

I see, that it actually is saved on the event.

And now a bunch of questions regarding those custom properties:

  1. But are those somehow related to extended properties?

  2. Are those properties somehow accessible through Outlook REST API or Microsoft Graph?

  3. Can I create a push notifications subscription using Microsoft Graph with a filter based on those properties? (I know I can based on extended properties)

  4. If the answer to above question is "no", and the custom properties are only accessible through the add-in which created them, is there a way to create a extended property to an event from the add-in, even if it's not saved?

To explain why I'm asking - I'm creating an add-in, which allows to "connect" an appointment with our 3rd party system, and keep that appointment in sync with our object.

So when a button is clicked on the compose form, I:

In the first use of the add-in, the user authenticates, and I create a push notification subscription for events with our extended property, to do the sync from Outlook to our system.

It works great on OWA, but now as we really need to support desktop, two major issues are arising:

Answer to my first question, and/or any tips about my use case would be more than welcome.

Upvotes: 4

Views: 3457

Answers (2)

Benoit Patra
Benoit Patra

Reputation: 4545

TL;DR; Yes it is possible to read custom properties set by Office.js api loadCustomPropertiesAsync using REST APIs You need to create a REST call query that looks like

string addinManifestId = "<your manifest guid here>";//lower cases
string prop = @"String {00020329-0000-0000-C000-000000000046} Name"+ string.Format(" cecp-{0}", addinManifestId );
var url = $"<apiEndpoint>/messages/<youritemid>?$expand=SingleValueExtendedProperties($filter=PropertyId eq '{propertyname}')";

More info

The documentation is available here https://msdn.microsoft.com/en-us/library/hh968549(v=exchg.80).aspx

I had a similar problem when I needed to handle "sent mail" for my add-in Keluro. I implemented something really close to your approach with a web hook on REST API. To my knowledge it is the only way to handle sent items. Consider upvoting this https://officespdev.uservoice.com/forums/224641-feature-requests-and-feedback/suggestions/10964871-add-itemsend-event-so-add-in-can-cancel-email

Upvotes: 4

Jason Johnston
Jason Johnston

Reputation: 17692

  1. Per MS-OXCEXT, the interoperability doc on how add-ins store stuff in Outlook, custom properties are stored as a JSON dictionary in a MAPI extended property (gory details at that link). That means you should be able to access them via Graph extended properties, you would just have to parse the value yourself.
  2. Should be using extended properties and the "{type} {guid} Name {name}" format.
  3. I don't see why not.
  4. The answer isn't no, but I'll answer your follow up anyway :). Sure you can do this if you use the REST API from your add-in.

Upvotes: 3

Related Questions