使用 Live SDK 与 Outlook 日历交互





4.00/5 (1投票)
使用 Live SDK 构建适用于 Windows Phone 的 Outlook 日历应用程序
引言
大家好,你们一直在尝试以编程方式与 Outlook 日历交互,但却无法做到。告诉你们,别害怕,超级达人来了。在这篇文章中,我将向您展示如何使用 Live SDK 与 Outlook 日历交互。我们还将为 Windows Phone 构建一个简单的日历应用程序。所以,让我们开始吧。
设置项目
启动 Visual Studio 并快速创建一个 WinRT(不是 Silverlight)Windows Phone 空项目,为其命名并点击“确定”。
现在右键单击项目,然后从菜单中单击“管理 NuGet 包…”搜索并安装 Live SDK 包。
我们还没有完成。我们需要另一个名为 Json.Net 的包。搜索并在您的项目中安装它。它将帮助我们与 JSON 数据交互。
为了正确使用 Live SDK,我们将不得不将我们的应用程序与商店关联起来。为此,您应该在开发人员中心创建一个应用程序(仅包含应用程序信息)。我已经创建了一个名为 OutlookCalendar 的应用程序。
现在让我们将我们的应用程序与之关联。在 Visual Studio 中,转到“项目”>“商店”>“将应用程序与商店关联”。
将弹出一个窗口。按照步骤操作。您需要使用您的开发中心帐户登录。在“选择应用程序名称”页面中,您应该看到您新创建的应用程序名称。单击您的应用程序名称并点击“下一步”。
在最后一页中,您将获得有关应用程序关联内容的详细信息。点击“关联”以完成最后一步。
您的应用程序现在与商店应用程序关联。您将在您的项目中添加一个 Package.StoreAssociation.xml 文件。现在是时候开始编码了。在 MainPage.xaml 中放置一个按钮,双击它以生成一个按钮点击事件。 也在 XAML 中添加一个 ListView。
使用代码
在按钮点击事件中粘贴以下代码
private async void GetEventsButton_Click(object sender, RoutedEventArgs e)
{
try
{
var authClient = new LiveAuthClient();
List scopes = new List() { "wl.signin", "wl.calendars" };
LiveLoginResult result = await authClient.LoginAsync(scopes);
if (result.Status == LiveConnectSessionStatus.Connected)
{
var connectClient = new LiveConnectClient(result.Session);
LiveOperationResult meResult = await connectClient.GetAsync("me/events");
var data = JsonConvert.DeserializeObject(meResult.RawResult);
foreach (var item in data.data)
{
Datums.Add(item);
}
CalendarListView.ItemsSource = Datums;
}
}
catch (LiveAuthException ex)
{
// Display an error message.
}
catch (LiveConnectException ex)
{
// Display an error message.
}
}
要与 Outlook 日历交互,您需要两件事,一是您需要登录您的帐户,二是您将不得不授予应用程序权限,以便它可以访问您的 Outlook 日历。为此,Live SDK 提供了 LiveAuthClient
。它有一个名为 LoginAsync(scopes);
的方法,其中应用程序的可访问范围作为参数传递。在我们的应用程序中,用户需要登录并访问 Outlook 日历。所以我们将范围设置为这些字符串“wl.signin”用户“wl.calendars”。将当前的登录会话传递给 LiveConnectClient
构造函数,我们调用了 GetAsync("me/events");
,其中我们传递了“me/events”作为参数。这意味着我们只想访问我们的日历事件。它返回一个 LiveOperationResult
,我们可以在其中获取原始 JSON。我们使用 Json.Net 的 JsonConvert.DeserializeObject
将原始结果反序列化为类对象。要了解更多关于序列化和反序列化的信息,请阅读我之前的文章 这里。像我之前的文章一样,我从 meResult
变量中复制了原始结果,并将其粘贴到名为 Json2csharp 的在线工具中,以获取简单的类对象。
现在复制类对象。右键单击项目并添加一个代码文件。随便命名。然后将类对象粘贴到那里。将它们包含在项目的命名空间中,就完成了。
RootObject
类映射到 JSON 结果的父节点 (data
)。因此,反序列化必须从那里开始。我声明了一个 Datums 类型的可观察集合。然后我们遍历反序列化的数据并填充可观察列表。之后,我们将 LIstView ItemSource 附加到可观察集合。为了在 UI 中显示特定数据(start_time,name),我为 ListView 声明了一个简单的数据模板。MainPage.xaml 中的最终标记如下所示,
<Page x:Class="OutlookSync.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:OutlookSync" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <Page.Resources> <DataTemplate x:Key="CalendarItemTemplate"> <Grid Height="120" Width="480" Margin="5"> <Grid Background="{StaticResource PhoneAccentBrush}" Height="120"> <Grid.RowDefinitions> <RowDefinition Height="60px"/> <RowDefinition Height="60px"/> </Grid.RowDefinitions> <TextBlock HorizontalAlignment="Center" TextWrapping="Wrap" Text="{Binding start_time}" VerticalAlignment="Center" FontSize="16" Margin="10" Grid.Row="0" Width="460" Height="40"/> <TextBlock HorizontalAlignment="Center" TextWrapping="Wrap" Text="{Binding name}" VerticalAlignment="Center" FontSize="16" Margin="10" Grid.Row="1" Width="460" Height="40" /> </Grid> </Grid> </DataTemplate> </Page.Resources> <Page.Background> <SolidColorBrush Color="{StaticResource PhoneBackgroundColor}"/> </Page.Background> <Grid> <Grid.RowDefinitions> <RowDefinition Height="80*"/> <RowDefinition Height="560*"/> </Grid.RowDefinitions> <Button x:Name="GetEventsButton" Content="Get Events" HorizontalAlignment="Left" Margin="10,0,0,0" VerticalAlignment="Top" Width="380" Click="GetEventsButton_Click"/> <ListView x:Name="CalendarListView" ItemTemplate="{StaticResource CalendarItemTemplate}" HorizontalAlignment="Left" Height="541" Margin="10,9.833,0,0" Grid.Row="1" VerticalAlignment="Top" Width="380"/> </Grid> </Page>
关注点
我们完成了构建简单的应用程序。如果运行该项目,您将得到如下所示的内容,
我希望你喜欢这篇文章。我会在下一篇文章中见到你。在那之前,编码愉快。