65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 Live SDK 与 Outlook 日历交互

starIconstarIconstarIconstarIconemptyStarIcon

4.00/5 (1投票)

2015 年 6 月 23 日

CPOL

3分钟阅读

viewsIcon

14516

downloadIcon

116

使用 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.RawResult); 将原始结果反序列化为类对象。要了解更多关于序列化和反序列化的信息,请阅读我之前的文章 这里。像我之前的文章一样,我从 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>

关注点

我们完成了构建简单的应用程序。如果运行该项目,您将得到如下所示的内容,

我希望你喜欢这篇文章。我会在下一篇文章中见到你。在那之前,编码愉快。

© . All rights reserved.