使用OData增强你的LightSwitch 应用程序
[原文发表地址] Enhance Your LightSwitch Applications with OData
[原文发表时间] 2012-03-06 06:50 AM
注意:此信息适用于Visual Studio 11 测试版中的LightSwitch 。
正如John 周三在LightSwitch 团队博客上所宣布的, Visual Studio 的下一个版本将在框中包括 LightSwitch,且有很多令人敬畏的新功能。我个人最喜欢的是开放数据协议 (OData) 服务的支持。LightSwitch 现在可以从它的中间层使用以及产生 OData服务。这意味着你使用 LightSwitch 创建的应用程序会自动将数据公开为开放的服务,这让大量的客户端方便 (安全)访问到你的数据。这也意味着你将能够使用LightSwitch 内部的数据服务以此提高你的应用程序的功能。在这篇文章中,我要向你展示如何在 LightSwitch 应用程序中充分利用 OData。在下一篇博文中,我将向你展示如何使用LightSwitch创建的OData 服务。但首先,需要一些OData的背景知识。
什么是开放数据协议 ( OData )?
OData 是一个开放的REST-ful协议,用于公开和使用 web 上的数据。它尝试打破常用的通过标准化访问数据的方式。与其学习新的 ApI来访问特定于每个应用程序的 web 服务的数据,不如使用 OData ,它提供了通过REST查询和更新数据的常见方法。你可以在www.odata.org学到更多关于 OData.
OData 流传了几年,整个网络一直有越来越多的弹出的数据服务的提供商。在 Microsoft,我们的许多产品通过开放数据协议公开和使用数据服务。例如,SharePoint 公开其所有数据列表为 OData 服务。同样,使用Reporting Services所创建的报告可以通过 OData 公开。 PowerPivot 是Excel2010中的一个插件,它允许你使用数据服务,并对它们执行复杂的数据分析的。因此让以数据为中心的LightSwitch也通过 OData使用数据服务,是非常有意义的。今天很多企业使用 OData 作为系统,伙伴之间交换数据的方式,同时也提供了一种访问其数据存储区的简单方式。
若要深入了解数据服务和 OData 协议,你可以阅读关于 OData.org 的文章,或在这里的我的博客。我推荐一篇真正好的文章,Chris Sells的 -开放数据协议的示例.
在这篇文章中,我要向你展示如何在 LightSwitch 应用程序中使用 OData。对于本示例,我们将使用Azure DataMarket 中的一些数据。在我的下一篇文章中,我将展示如何使用LightSwitch在像 Excel的其他客户端中公开了的 OData 服务。
Azure DataMarket
Azure DataMarket 是生产者承载其数据集,然后人们订阅它们来提高其客户端应用程序的地方。你可以订阅各种各样的数据集,有的是免费,有的是付费的。有天气、 交通、 美国国家航空航天局、 联合国和各种你可以使用的其他类型数据。(测试版注: 目前并不是所有的数据集都与 LightSwitch 兼容,但我们正在努力让更多的数据集与最终版本相兼容。)
首先,你需要导航到https://datamarket.azure.com/来注册帐户。一旦你注册时,你将有一个客户 ID 和一个帐户密码。现在,你可以浏览很多类别为你提供的大量数据集。让我们从 Data.gov 订阅一个免费的数据集。在页面右上角的搜索框中,搜索“Crime”,你将在结果中看到 Data.gov数据集。
选择 Data.Gov数据集,然后单击右侧的注册按钮来激活订阅。然后单击"浏览此数据集"链接来浏览数据。
单击"运行查询"按钮,它将为你返回数据的前 100 行。
注意,在页面的顶部,你将看到服务源的 URL。这是服务所处的位置,我们将在LightSwitch 应用程序使用它。在本例中,它是https://api.datamarket.azure.com/data.gov/Crimes/
使用Crime数据来增强 Contoso 建设
我将变更一下我前段时间所创建的示例,这是一个应用程序的示例,它可用于构建业务。此应用程序的功能之一是它显示了建设项目位置的地图屏幕。从项目屏幕中,用户可以单击显示地图按钮来打开地图屏幕,它使用了一个Bing地图控件扩展(包含在示例中)来显示位置。
我们想做的是向用户显示犯罪数据,那样他们可以看到在该市工作通常是否安全。这是我们从Azure DataMarket中所订阅的数据集中可以获取的免费信息。
连接LightSwitch到 OData 服务
你可向 LightSwitch 应用程序中添加一个 OData 服务,就像你向其添加任何其他外部数据源一样。右键单击解决方案资源管理器中的数据源节点,然后选择"添加数据源"以打开连接数据源向导。现在,你将看到 OData Service 是一种可用的选项。
单击下一步,然后输入上述服务源的 URL。然后至于登录信息,选择其他凭据,在用户名部分中输入你的 DataMarket 客户 ID,在密码部分中输入你的帐户密码。你可以登录到 DataMarket,并导航到"我的帐户" https://datamarket.azure.com/account/info来获取此信息.
单击测试连接按钮,并选择 CityCrime 数据集,并单击测试,以确保一切工作正常。
单击下一步,LightSwitch 将显示所有可用的实体以供你选择。选择 CityCrime, 然后将数据源命名为"CrimeData",并单击完成。
下一步,在解决方案资源管理器中,你将看到 CrimeData 被添加到了数据源的列表中, LightSwitch 将打开数据设计器,你可以在那儿进一步构造你的实体。你可以添加商务规则、 设置额外属性,以及添加计算字段。就像任何其他外部数据源一样,你不能更改数据的基础结构,但你可以选择商务类型,声明性和自定义验证,并配置多种其他的智能默认值。
我们想要做的是给用户显示在指定城市里成为暴力犯罪的受害者的可能性。所以,我们需要使用计算属性来计算暴力犯罪的百分比。单击数据设计器顶部的"计算属性"按钮,称之为 ViolentCrimeRatio,并将其设为字符串。在属性窗口上单击"编辑方法",并提供以下结果。
1: Private Sub ViolentCrimeRatio_Compute(ByRef result As String)
2: ' Set result to the desired field value
3: If Me.ViolentCrime > 0 Then
4: result = String.Format("1 in {0}", Me.Population \ Me.ViolentCrime)
5: End If
6: End Sub
我们想要为实体设置一个摘要属性,来使其在屏幕上很好地显示。添加另一个称为Summary的计算字符串属性,并编写下面的代码:
1: Private Sub Summary_Compute(ByRef result As String)
2: ' Set result to the desired field value
3: result = Me.City & ", " & Me.State & ": " & Me.Year
4: End Sub
然后选择 CityCrime 实体,并在属性窗口的底部将Summary属性设置为Summary字段。此时我们也可以通过添加一个快速搜索屏幕,选择 CrimeData.CityCrimes 屏幕数据来测试数据集。
按下 f5 键来构建和运行应用程序,并打开搜索城市犯罪的屏幕。请注意 LightSwitch异步加载数据,并自动为我们分页。
针对 OData 服务编写查询
现在,我们已经连接到OData 服务,我们想编写一个查询来为特定的城市和州提取数据。针对 OData服务编写查询与在 LightSwitch 中的任何其他数据源是相同的体验。
偌要添加一个新的 LightSwitch 查询,右击解决方案资源管理器中的CityCrimes 实体,并选择"添加查询"以打开查询设计器。将此查询命名为 CrimesByCityState。然后添加两个筛选器的条件 ;1-州等于称为State的新参数, 2 —市等于称为City的新参数。我们亦会按年以降序方式对结果进行排序。
为了快速测试此查询,添加另一个搜索屏幕,这次选择 CrimesByCityState 查询。当你运行此屏幕时,LightSwitch 会询问国家和城市的参数。因为它们两者都是必需的,一旦你输入了它们两个, LightSwitch 将自动执行查询。你可以选择在查询设计器的属性窗口中将参数设为可选的。
使用Crime数据来增强地图屏幕
我们不想在地图屏幕中的单独屏幕上显示此信息。打开 MapScreen ,单击屏幕设计器顶部的"添加数据项目",然后选择 CrimesByCityState 查询。
下一步,再次点击添加数据项目,这次选择本地字符串类型的属性来添加两个本地属性,一个用于城市,另一个用于国家。
现在,你需要将这些本地属性绑定到查询参数。在屏幕设计器中,选择查询参数州,然后在属性窗口中设置参数绑定为"州"。通过选择城市查询参数,设置参数绑定到"市"。
当从查询参数到本地属性之间有一个灰色箭头时,你就做对了。最后,选择这两个本地属性,并在属性窗口中为它们两个勾选"是参数"。这将使我们从项目屏幕传递城市和国家。
下一步,从左边的内容目录上拖动 CrimesByCityState到你想要的位置。我会将它添加到屏幕的顶部,我现在只想要显示两个计算属性,摘要和 ViolentCrimeRatio。此外,由于我们现在正在筛选数据,只会返回几行结果,所以我可以关闭分页和排序来在屏幕上节约一些空间。选择 CrimesByCityState 查询,并在属性窗口中取消选择"支持分页"和"支持搜索"。因为此数据是只读的,我将从数据网格行命令栏删除所有的命令。
所以将屏幕的可视属性调整为我们想要的之后,最后我们要做的是将城市和州以及地址传递到地图屏幕中。从 ProjectDetail 屏幕中选择显示地图按钮,右键单击并选择"编辑执行代码",然后调整代码,如下所示:
1: Private Sub ShowMap_Execute()
2: 'Show a map of the customer address as well as crime data
3: Me.Application.ShowMapScreen(Me.Project.Customer.FullAddress,
4: Me.Project.Customer.City,
5: Me.Project.Customer.State)
6: End Sub
7:
现在当我们运行应用程序时,打开项目详细信息屏幕,单击显示地图按钮,它将显示Azure DataMarket 上OData 服务的犯罪数据。
总结
我希望这篇文章为你展示了如何在 LightSwitch 应用程序内部使用来自 OData 服务的数据。请记住,并不是所有的服务都提供了对数据 (例如犯罪数据是只读的) 的所有操作,那样使用随机 的OData 源可能与LightSwitch 不兼容,如果他们不支持查询、 排序或筛选。我们正在研究好的 LightSwitch 体验必须要有什么操作,我们正在与伙伴合作来准备它们,随着我们从测试版 移到最后的发布。
我已更新了在 Visual Studio 11测试版中构建Contoso LightSwitch应用程序,所以看一看它吧。那里我利用了很多新功能,不仅仅只是犯罪数据 OData 服务。
在下一篇文章中,你将看到如何 在LightSwitch 中从你定义的数据源中创建OData 服务,如何可以编写外部的客户端来获取数据,包括商务规则和用户访问控制。在 Visual Studio 11 测试版中,LightSwitch 是为桌面和云创建商务应用程序和数据服务的最简单的方法。
希望大家喜欢 !