How to write a custom sync provider for Outlook Contacts? - visual-studio

Can anyone point me to an example of an Outlook Contact custom sync provider for the Microsoft Sync Framework? I would like to use that Framework to build a bidirectional sync between my CRM and Outlook. I've found a reference to this SO question: Sync Microsoft Outlook with my own data
Unfortunately, the link to MSDN example is no longer valid. It simply redirects to the MSDN sample gallery which has no such sample.
Any help would be much appreciated.

I am very curious to what the link was to, as well. I have not found anything short of either a "Wrapped PST Store" or "Custom MAPI Store" or "Custom MAPI Transport Provider". MAPI itself provides a synchronization process, but it is not designed to be used from managed code and is very complicated.
The best "roundup" I have found is the Outlook MAPI Samples on codeplex. These do not deal with any pretty "Sync Framework" though; presumably that is used as the back-end? (Most samples neglect how to get to the back-end processing.)
We are evaluating an entirely managed in-Addin synchronization process here to avoid having to deal with the complications of MAPI, but the viability is still not entirely known. (This approach also introduces different problems and limitations.)
Good luck and happy coding.

Related

Disable/Remove Outlook Web Addin for Windows

Well, that's a very important thing, or at least, I think it is, so, please read it carefully.
Introduction
My background is the COM/VSTO land and due to new requirements, I'm slightly merging to office.js.
First, I was very pleased by the concept that unlike Word, Excel & PPT ofiice.js add-ins, Outlook Web Add-ins install directly on the user's exchange inbox, which means: install once, run everywhere. This worked for me very well at the beginning but it quickly turns out, in some situations, to be terrible, or at least in two of my cases.
We have to agree that Outlook Web Addins (and office.js addins in general) are not mature enough to completely replace COM/VSTO/VBA addins. The ONLY clear benefit is the multi-platform support. So, as I already have clients who use COM Outlook addins, which works more than perfect for their needs, they just needed a way to have the same addin on Mac, Web and Mobile, and I spend some time learning how to build addins using office.js and did deliver some good results but after they started using the new addin, some unexpected drawbacks flopped to the surface which made me think twice!
Now, on Windows, we have both addins running for Outlook the COM & Office.js one but as far as I can tell, there is no comparison between the two, the COM addin is far more superior than the equivalent Web Addin. If I have to state ONLY one benefit of COM over office.js in Outlook, I'd say that office.js lacks the support of inboxes that not use Exchange server as a backend, so Gmail, Yahoo and 3rd-party email providers are not supported which is too frustrating and we should keep the COM addin there.
Problem: Below I'll provide two use cases where the Outlook Web Addin is very [un-welcome] with the presence of a COM addin.
Scenario #1
In one addin, we intercept and parse the email before it is sent to see if it will allow Outlook to send it or not. This works perfectly with both, for COM addin we use ApplicationEvents_11_ItemSendEventHandler event and for Web Addin, we use the horribly implemented <Event Type="ItemSend" FunctionExecution="synchronous" FunctionName="checkEmail" />, the terrible weakness in this implementation is, unlike in the COM add-in, you cannot give the user the option to turn ON/OFF this option and they will always have to see the annoying msg, "[You Add-in] is working on your request"
and, in addition to your inability to customize the msg's text shown, you cannot hide it or disable it which results in a bad UX.
To make things even worst, I was expecting that if both addins are there and waiting for the Send Event to intercept, I assumed it's the COM add-in which should receive the event first then when processing it, it will set its Cancel variable to true, this way the Web Add-in won't be aware of the event at all, but, surprisingly, the exact opposite happens, the Web Add-in received the event first, process it and cancel it: event.completed({ allowEvent: true });, while the COM addin was having good dreams.
Scenario #2: Having an addin that acts as a Spellchecker.
While we have full control over the Word editor for [Windows] Outlook, the COM addin provides excellent results, which is not the case in Web Addin where you stick with a custom task pane and provide a minimal user experience that does the very basic things, so, we find ourselves having the two spellcheckers in Outlook one is excellent and the other one is ugly and its presence ONLY makes sense when it runs in Outlook for Mac. For Outlook.com, a chrome extension would be the ideal solution and for mobile, Compose Mode is not supported yet!!
The Question
Having said all the above, hope you didn't skip it, Is there a way to disable a Web Addin for Outlook in Windows and, possibly, Online? In other words, can we SELECT the platforms that are supported by an Outlook Web Addin? or let's say it again, like: can we SELECT the platforms that an Outlook Web Addin existence makes sense?
First of all I want to thank you so much for taking the time to share the detailed feedback. I agree for your specific type of Add-in there might be challenges to provide a better experience, more on this later.
Second, to answer your specific question, no, we dont support a way to disable Add-ins on specific platforms or select the platforms your Web Add-in will be targeting, in Outlook.
That been said, I think you are requesting many features on this post, the right place for this is our uservoice channel.
considerations:
We have a feature than enables COM/Web Add-ins compatibility in
Win32, basically disables the Web Add-in if you have a
still-betterCOM Add-in. You can find the details here.
However, this feature is not yet supported in Outlook (just in
Excel, Word and PPT) but its something we are planning to add. Let
me know if you find this useful, it will solve the issue of
conflicting item sends events you mentioned.
We dont have APIs to
provide rich interaction of the mail content, for a spell checker I
appreciate if you can share that in uservoice.
Hope this helps.

Organization Restrictions on Creating D365 Managed Solutions

I have been told that "to use managed solutions for deployment through Dynamics 365 requires the developing organization to be a certified ISV for Dynamics with Microsoft. And furthermore, that a Managed Solution also goes through some sort of vetting process within Microsoft."
This sounds like some sort of misunderstanding to me.
From my understanding of the use cases for unmanaged and managed solutions, there is no such restriction on my creation of managed solutions. All the documentation I have seen mentions the benefits of using managed solutions but does not go into any sort of detail about having to be a certified ISV or that the solution has to be vetted.
I am new to using D365 and am having a hard time determining if what I have been told has any truth to it. My question is if anyone can clarify if there really is any sort of certification required by my company to use the concept of managed solutions?
A small confusion.
Customizing & deploying as a Managed solution (part of internal DevOps) within your organization is not needed to go through vetting process.
Partners/ISVs developing & distributing the Managed solutions through Dynamics Marketplace aka Appsource has vetting process, Microsoft will review the solutions before publishing in AppSource. This is to make sure the compliance with respect to standard, policies, security aspects.

How to port existing vb .net office add-ins to work with office for mac?

I have an Office Word add-in that I wish to make it work with Office Word 2016 for Mac. I tried looking into official Microsoft documentation and could not find anything. I want to reuse as much code as possible while still having the extension to work with older versions of Word as well as Office Word 2016.
Is there any way to do this? Any help, even if it is something remotely related to this is appreciated.
TL;DR;
There is no way to do that.
Microsoft has bet on a new technology suite also called Office add-ins but web based. They are compatible with Mac. The old COM based approach (on which VSTO .NET add-in are built on) are legacy.
There is no way to reuse .NET code with this new technology, except of course to port business logic to the web server (which serves the web based add-in).
More reading on the comparison with the two add-ins generation: see this article I wrote
I second Benoit's answer. In addition, Not sure how complex is your add-in in terms of interactions with the document content, or if its a service that then inserts or imports data from a backend. Depending on that you will have more reusable code.
I would recommend you to do a full analysis on what APIs you need for your add-in to work properly. The new model offers big value with both supporting multiplatform and an easier deployment model. It also provides many rich APIs you can use, however the API depth its still not as rich as VSTO. Our goal is to get there.
I would be curious to understand if there are any gaps on you migration analysis.
thx!

Outlook API, Custom Account Type

I am looking at doing some serious MS Outlook extensibility, going beyond the concept of e-mail, but still in the realm of messaging.
As such, I will need to be able to make Outlook aware of a new 'Account Type' (i.e., it currently only understands POP, Exchange, etc).
Can anyone point me to an area of the API that may facilitate this functionality, if it exists...?
Thanks
Adam,
reading your question about having a new provider you would have to look at creating a new Mapi provider. This is a pretty complicated area a place to start would be MSDN
http://msdn.microsoft.com/en-us/library/cc979221.aspx also look for the pdf book "Inside mapi" on the internet
There may be other ways to look at the problem though using Addins for outlook that would extend the UI using panes and form regions etc. or and older technique is to use subclassing and hooking.
Marcus

Microsoft Dynamics CRM as a software development platform?

My organisation is in the final stages of acquiring CRM 4.0 for use as a general purpose software development platform. The company who is selling it to us has convinced upper management that CRM will solve all our productivity problems and make software development as easy as point and click. (They don't read Brooks.)
Having resigned to the fact that I can't stop CRM from being foisted upon us developers, I have been doing research on how to manage the complexities of large scale CRM development.
I have so far identified the following complexities that need to be addressed:
CRM seems wholly incompatible with basic configuration management practices.
Keeping the black box CRM database in bidirectional synchronisation with external LOB systems is both very hard and critical to project success.
What other complexities must I take into account when building a large scale CRM application?
What limitations does CRM have as a development platform?
Edit: This topic provided additional insight.
I've worked with MS CRM 3.0 and now 4.0 here's my take:
Whenever possible focus on standard best practices. Don't get overly confused by what CRM is doing or wants you to do.
Don't be afraid to break what's "supported" by MS. With some caveats on 2 major factors - will your company let you think outside the box to solve problems and do customizations/integrations that are not officially supported? - and are you comfortable enough with .Net, SQL, javascript etc to weave through their code and implement what you need?
I have sometimes banged me head 100 times trying to do something in a "supported" fashion when one small tweak to a js file here or a small db modification there gave me what I needed.
If constant data integration with other LOB apps is critical you should consider a 3rd party tool like Scribe (http://www.scribesoft.com/). It's not cheap but can basically get you 90% of the way when it comes to integrating with your other LOB apps.
As a general rule, MS CRM is great at contact management - doing things like tracking appointments, doing mail merges, etc. Could you use it as your core HR system - probably. Finance system - maybe a bit more difficult. The further you go from it's core competency of performing contact management the more custom work you'll have to do. The more custom work you have to do the more you should consider if MS CRM is the right solution to that problem.
I know you're likely well underway into your deployment of Dynamics CRM, but just a few quick tips:
I'd avoid making unsupported changes purely because it becomes too hard to track the changes eventually. Since Dynamics CRM allows developers to make C# Plugins and access to web services, it's usually unnecessary to make unsupported changes for anything non-trivial. Plus you run the roulette of having to hide changes from MS if you have to call their support. I know many people will include external javascript files (jquery, etc) and other somewhat benign changes, but try to mentally stop yourself when an unsupported edit involves anything non-visual.
Look into the phrase Microsoft Dynamics Xrm, there are several books on the subject that are excellent, http://www.thecrmbook.com/ is particularly good because it comes with some nice custom code to use with your CRM.
Source Control your customizations xml's and don't let people touch the database, also, Google Halan CRM tool, and use it for scripting out CRM customizations and javascript files. Easier than writing custom powershell scripts to do the same job.
Transaction Support
If your application require transaction support from the underlying platform, Dynamics CRM is not the correct choice. The reason is because currently Dynamics CRM SDK web service doesn't support transaction.
The reference thread is here : Does MSCRM web-service support database transactions?
Since you would like to utilize Dynamics CRM as a platform, that means all the business logic should utilize Dynamics CRM SDK Web Services as data access layer. But imagine without the transaction support and you're invoking a series of web service calls as a unit of work, and one of the web service calls fails. That means you potentially will encounter data integrity issue.
Configuration
Usually i create a custom entity called Configuration, which will store all the necessary related configuration for the current CRM application. After it has been created, you can use Dynamics CRM SDK Web Service to read all the necessary configurations from the Configuration custom entity

Resources