Windows 商店应用中使用 Office 365 API Tools
本篇我们介绍一个API 工具,用于在 Windows Store App 中使用 Office 365 API。
首先来说一下本文的背景:
使用 SharePoint 做过开发的同学们应该都知道,SharePoint 有一套客户端对象模型(Client Object Model)用于读取和操作列表和文档库的数据。这个模型支持的应用程序类型包括ASP.NET、WPF、Silverlight和WP等,但是 Windows Store App 不在支持行列中(这一点我一直不太理解)。。。这样的话,我们就没办法在 Store App 中直接使用这个模型了,那如果我们的 Store App 想利用 SharePoint 作为服务端,应该怎么办呢?
这也是最初接触 Store App 和 SharePoint 的时候困扰我的东西。当时是在给微软中国做一个应用,需求是将 Office 365 与 Store App 相结合,在 Store App 中实现对 Office 365 数据的读取和操作,将多种数据和文件集成到一起,形成一个一站式个人工作平台,进而展示 Office 365 在工作中的作用,作为微软 Office 365 宣传的 Demo 使用。需求其实挺简单,但是最常用的对象模型不被支持,这就没这么简单了。值得庆幸的是我们还有另外一套神器:SharePoint REST API (REST API reference and samples)。
SharePoint为我们提供了一套标准的 REST API,利用它我们可以通过网络请求的方式来读取和更新数据。读取数据还算简单,只需要拼接 API 地址和解析 json / XML 数据就可以了。但是操作数据就比较麻烦了,拼接需要 POST 的内容是一件说起来很容易,但很繁琐的工作。而且更让人头疼的是 SharePoint Online 的认证方式。(关于 REST API 的使用,我会在随后的文章中介绍,这里只是让大家感受一下使用的感受。)所以相对以对象模型,我们需要做的工作也多了不少。这就是本文的前提背景,找一个工具来把我们从繁琐的工作中解脱出来。它就是 Microsoft Office 365 API Tools for Visual Studio 2013。
下载地址:https://visualstudiogallery.msdn.microsoft.com/a15b85e6-69a7-4fdf-adda-a38066bb5155 。只支持 Visual Studio 2013。来看看安装程序的信息:

安装过程很简单,这里就不介绍了。利用这个工具,就可以实现数据的操作,包括了邮件、联系人、日历、文件等。
下面我们来看看详细的使用过程:
1. 在工程中添加工具中的服务
解决方案名上点右键,选择 “添加” -> "连接的服务",出现下面界面

点击“注册应用”,登录自己的 Office 365 账号,就会出现与 Office 365 站点关联的信息

选择一项服务,点击右侧的“权限...”对该服务的权限进行配置,配置后点击“确定”,就可以完成对这一项服务的引用了。这个过程中工具对将你添加的服务注册到 Microsoft Azure Active Directory 中。这里的配置会在应用进行登录认证的时候提示给用户,类似于微博 API 认证过程。

2. 在代码中整合 Office 365 API
代码中 Office 365 API 的整个分为三个步骤:
(1). Creating the Office 365 discovery client
我们的程序会调用不同的Endpoints来展现不同内容,例如用户邮件、日历、OneDrive 或联系人等。程序需要调用 Office 365 Discovery Service 来获得这些 EndPoints 的地址。
详细描述可以参照:http://msdn.microsoft.com/en-us/office/office365/howto/discover-service-endpoints 和 http://msdn.microsoft.com/en-us/office/office365/api/discovery-service-rest-operations 。
(2). Getting an access token for Office 365
在授权使用 Discovery Service 时,我们的代码可以使用从Azure AD 中返回的 token,这个 token 用于下一步访问数据之用。
(3). Creating the client object to access the Office 365 services
在获得了 Office 365 数据取得的权限后,我们就可以创建客户端对象来取得我们需要的数据了。
不同类型的数据需要创建不用的客户端对象,例如日历、联系人、邮件,需要创建 Outlook Services client object。文件 和 网站,需要创建 SharePoint client object。用户信息 需要创建 Azure AD client object。
我们看一段简单的代码来验证一下这个过程:
public async Task<List<IContact>> GetContactsAsync()
{ // Make sure we have a reference to the Exchange client
var exchangeClient = await AuthenticationHelper.EnsureOutlookClientCreatedAsync(); // Query contacts
var contactsResults = await exchangeClient.Me.Contacts.OrderBy(c => c.DisplayName).ExecuteAsync(); // Return the first page of contacts.
return contactsResults.CurrentPage.ToList(); }
public static async Task<OutlookServicesClient> EnsureOutlookClientCreatedAsync()
{
try
{
AuthenticationContext = new AuthenticationContext(CommonAuthority); if (AuthenticationContext.TokenCache.ReadItems().Count() > )
{
// Bind the AuthenticationContext to the authority that sourced the token in the cache
// this is needed for the cache to work when asking for a token from that authority
// (the common endpoint never triggers cache hits)
string cachedAuthority = AuthenticationContext.TokenCache.ReadItems().First().Authority;
AuthenticationContext = new AuthenticationContext(cachedAuthority); } // Create a DiscoveryClient using the discovery endpoint Uri.
DiscoveryClient discovery = new DiscoveryClient(DiscoveryServiceEndpointUri,
async () => await AcquireTokenAsync(AuthenticationContext, DiscoveryResourceId)); // Now get the capability that you are interested in.
CapabilityDiscoveryResult result = await discovery.DiscoverCapabilityAsync("Mail"); var client = new OutlookServicesClient(
result.ServiceEndpointUri,
async () => await AcquireTokenAsync(AuthenticationContext, result.ServiceResourceId)); return client;
}
// The following is a list of all exceptions you should consider handling in your app.
// In the case of this sample, the exceptions are handled by returning null upstream.
catch (DiscoveryFailedException dfe)
{
MessageDialogHelper.DisplayException(dfe as Exception); // Discovery failed.
AuthenticationContext.TokenCache.Clear();
return null;
}
catch (MissingConfigurationValueException mcve)
{
MessageDialogHelper.DisplayException(mcve); // Connected services not added correctly, or permissions not set correctly.
AuthenticationContext.TokenCache.Clear();
return null;
}
catch (AuthenticationFailedException afe)
{
MessageDialogHelper.DisplayException(afe); // Failed to authenticate the user
AuthenticationContext.TokenCache.Clear();
return null; }
catch (ArgumentException ae)
{
MessageDialogHelper.DisplayException(ae as Exception);
// Argument exception
AuthenticationContext.TokenCache.Clear();
return null;
}
}
这里我们获得了 Outlook Service 的 Client,并且获得了 token,然后利用这个 Client 来取得 Outlook 的联系人信息。
这里是一个完整的使用了 Office 365 API Tools 的 Windows Store App Demo:https://github.com/OfficeDev/Office-365-APIs-Starter-Project-for-Windows,供大家参考。
好了,到这里我们就把 Office 365 API Tools 介绍完了,希望对大家开发 Store App 有所帮助。下一篇我们将对前面提到的 SharePoint 2013 REST API 做出详细介绍,谢谢!
Windows 商店应用中使用 Office 365 API Tools的更多相关文章
- Windows 商店应用中使用 SharePoint REST API
前面一篇我们介绍了 Office 365 REST API 的官方工具的使用,本篇我们来看一下 SharePoint REST API 本身的描述.结构和使用方法,以及一些使用经验. 首先来看看Sha ...
- Office 365 API Tools预览版已提供下载
Office 365 API Tools预览版地址:http://visualstudiogallery.msdn.microsoft.com/7e947621-ef93-4de7-93d3-d796 ...
- 在WebPart中获取Office 365中的未读邮件数
// Create the web request HttpWebRequest request = WebRequest.Create("https://outlook.office365 ...
- 在Windows商店应用中使用浅色主题
在开发商店应用时会遇到这样的情况,设计师给我们的设计是浅色背景/深色文本,而商店应用默认是深色背景/浅色文本.那我们需要在每个页面去显式声明背景色和前景色吗,这显然是不理想的.这时就需要设置应用的主题 ...
- 用Windows PowerShell 控制管理 Microsoft Office 365
如果想要通过PowerShell控制管理Office365,首先要安装Microsoft Online Services Sign-In Assistant 7.0,链接如下 Microsoft On ...
- Office 365常见问题解答(第一期)
前不久进行的一次网络调查中,有不少朋友反馈了一些对于Office 365的实际问题,这里集中地做一个解答,请大家参考 1. Office 365的UI样式是否有开源计划 据我所知已经开源了:https ...
- 准备使用 Office 365 中国版--安装
温故而知新,先附上一个链接:Office 365常见问题 Office 365中Office套件的安装介质和传统Office套件的安装介质是有些区别的,虽然功能都一样.因此,如果购买了带Office套 ...
- Office 365开发环境概览
本文于2017年3月26日首发于LinkedIn,原文链接请参考这里 本系列文章已经按照既定计划在每周更新,此前的几篇文章如下 Office 365 开发概览系列文章和教程 Office 365开发概 ...
- Office 365 Connectors 的使用与自定义开发
前言 我相信很多人都看过<三国演义>,里面有很多引人入胜的故事和栩栩如生的人物,对我而言,曹操手下的一员猛将典韦实在让我印象深刻.例如,书中有一段描写典韦的作战经历: 时西面又急,韦进当之 ...
随机推荐
- PHP用户名用星号处理
PHP用户名用*号处理: 用户名:英文.中文.中英文混合的.中英文字符混合的 处理为:首字母和末尾保留,中间用*号代替(一个字符直接显示,两个字符:张*,三个以上字符:宋*丹) 首先判断字符中是否包含 ...
- iOS打包ipa包
创建证书之类这里就不说了,毕竟我也没有弄过. 我是团队开发,直接给我的p12文件,去开发者中心下载provision并且是distribute的就可以了. 1>.Xcode打包: 注意两个地方都 ...
- De4Dot+Reflector 支持多种反混淆
官网: http://www.de4dot.com/ 源码:https://github.com/brianhama/de4dot 使用方法 通过CMD命令方式进入: F:\2\de4dot-v3-1 ...
- Sublime Text3 (转) 配置 以及快捷键配置
一.介绍 Sublime Text 是一款较新的编辑器,它轻量.简洁.高效,良好的扩展性以及跨平台等特性,使得越来越多的开发人员喜爱.它是一款收费的商业软件,但可以免费无限制无限期的试用,只会偶尔提醒 ...
- EF 连接MySQL 数据库 保存中文数据后乱码问题
EF 连接MySQL 数据库 保存中文数据后乱码问题 采用Code First 生成的数据库,MySQL数据库中,生成的表的编码格式为***** 发现这个问题后,全部手动改成UTF8(图是另一个表的 ...
- Miller_Rabin素数测试
#include<iostream> #include<cmath> #include<cstdio> #include<cstring> #inclu ...
- FormatMessage与GetLastError配合使用,排查windows api调用过程中的错误
前一段时间在学习windows api调用过程中,遇到过一些调用错误或者程序没能显示预期的结果,或者直接出现vc运行时错误. 这对新手来说是司空见惯的事,因为不太熟悉难免会出错,出错的信息如果能显示很 ...
- redis 在linux下的安装
背景:在项目互联网项目开发中我们经常需要缓存热点数据,在做热点数据缓存时有2个常用的方案 redis简介redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型 ...
- 有1,2,3一直到n的无序数组,排序
题目:有1,2,3,..n 的无序整数数组,求排序算法.要求时间复杂度 O(n), 空间复杂度O(1). 分析:对于一般数组的排序显然 O(n) 是无法完成的. 既然题目这样要求,肯定原先的数组有一定 ...
- MongoDB的C#官方驱动InvalidOperationException异常的解决办法
异常情况描述 有一个“文章”类,其中包含一个“List<段落>”类型的属性,“段落”类是抽象类,其子类有“副标题段落”.“文本段落”.“图像段落”.“附件段落”.“列表段落”等类型. 将“ ...