47015

Where to store larger data for Outlook Web App?

Question:

I am developing my first add-in for the Outlook Web App. It's not clear to me where I should store larger pieces of data provided by the user (e.g., big chunks of text, images) and to be associated with the add-in (as opposed to belonging to a particular mail item).

My impression is that RoamingSettings is supposed to be for relatively small stuff, and therefore not a good fit. I could store the data on OneDrive, but I prefer not to expose the data to the user outside of the add-in UI. I found <a href="https://stackoverflow.com/questions/10171454/what-storage-should-i-use-for-a-outlook-plugin" rel="nofollow">this SO entry</a> but the answer seems to be more applicable to desktop Outlook, not OWA. I suppose I could store the data on my own server if I need to, but I first I want to know if there's already something in the OWA architecture that would serve this purpose.

Answer1:

RoamingSettings is the default choice for storing application/user settings/data, but there is a 32K limit that can be used per setting and 2MB total for all settings used by your add-in. An alternative approach is to use EWS to create a message in a hidden folder and store your data in the message body.

I created an implementation that serializes XML into the hidden message and back into JavaScript objects. You can see my article here (with sample app and source code in GitHub) on how to do it:

<a href="https://blogs.msdn.microsoft.com/mvpawardprogram/2016/01/26/unifying-your-web-dev-skills-for-office-add-ins/" rel="nofollow">https://blogs.msdn.microsoft.com/mvpawardprogram/2016/01/26/unifying-your-web-dev-skills-for-office-add-ins/</a>

Answer2:

I am a developer for Microsoft working on Outlook addins.

You should store the larger data with your service / on your server as you noted. A message is generally not suited for storing random data for your addin. Using makeEwsRequestAsync requires a ReadWriteMailbox for addin permission that may not be necessary otherwise.

Another note is that the 32K limit is the limit for RoamingSettings per addin for Outlook. It's not 2MB.

Recommend

  • IE9 and below starts to slow down and hang when adding lots of google map markers via Symbol (SVG pa
  • Unexpected token errors in Powershell
  • How can I Use begins_with method on primary key in DynamoDB?
  • Load directory of images in AngularJS
  • FormBlock Server Control in Ektron
  • File encoded as UCS-2 Little Endian reports 2x too many lines to Java
  • Error: No NgModule metadata found for '[object Object]'
  • Boost timed_wait leap seconds problem
  • How to solve CORS problem of my Django API?
  • Service Fabric spawn actor on startup
  • How to play an AMR audio file?
  • MATLAB Cell Array - Average two values if another column matches
  • Phonegap 3 (apache cordova) error with getpicture (Cannot read property 'PictureSourceType'
  • USB Accessory not communicating after restart
  • XCode 5 crash on loading the project
  • Is there a way that I can manually control the thresholds between various range on choroplethr?
  • Android: Check if object is present in database using Room and RxJava
  • How to use apoc.load.csv in conjunction with apoc.create.node
  • exception thrown while building the java application using netbeans
  • How to apply CSS to document.write()?
  • Create a log file for a custom DNN module
  • XtraGrid - Export To Excel
  • configure openjpa on to spring boot
  • OpenCV::solvePNP() - Assertion failed
  • Multiple canvases (pages) in Fabric.js
  • How to find angle formed by the blades of a wind turbine with respect to a horizontal imaginary axis
  • VBScript InputBox and Help Files
  • content must have a ListView whose id attribute is 'android.R.id.list'
  • Silverlight Event Log in Isolated Storage
  • Find angle of point on circle
  • Ajax call on Multiple selection in Select box
  • How to compile gSoap with ssl enabled on windows?
  • How to run chrome.tabs.insertCSS from the background page on each page?
  • Typeahead.js does give me suggestions but doesn't select them
  • how to get the location(lat/lng) on google maps v3 from the location(x,y)
  • Send array to next viewcontroller iOs xcode [duplicate]
  • What does the “id” field in an Android “Google Play Music” broadcast intent correspond to?