用 Visual Studio 2010 创建一个SharePoint 的Visual Web Part

Categories: Other
Tags: No Tags
Comments: No Comments
Published on: 2010 年 05 月 11 日

[原文作者]:Beth Massi

[原文链接]:Creating a SharePoint Visual Web Part using Visual Studio 2010

     去年我们用Visual Studio 2008和Office & SharePoint 2007在Office 和SharePoint平台上开发了Northwind Office Business Application。后来我还写了相关的文章讲述如何用Visual Studio 2010把它升级到Office & SharePoint 2010。如果你错过了,下面是相关的内容:

· 在Visual Studio 2010下迁移Outlook客户端到.NET Framework 4

· 增强Outlook添加项与VS2010轻松交互的WPF数据控件

· 迁移一个2007 Workflow到Visual Studio & SharePoint 2010

     我也准备了一些关于迁移的示例应用程序:http://code.msdn.microsoft.com/OBANorthwind

    在那个示例程序中,如果你看VS2010的解决方案,你将会在那看到一些额外的工程,它们加了更多的功能到应用程序中。其中一个新项是Visual Web Part,从Northwind数据库看,它显示了低库存。Northwind的业务部门不但想看SharePoint上的订单状态(workflow),还想快速查阅一些低库存。 Visual Studio 2010为SharePoint 2010包含了许多新的工程和模板, Visual Web Part就是其中一项。如果你熟悉ASP.NET开发,那么你能很轻松地用Visual Studio 2010搭建一个SharePoint web part. 看看我们是如何来做的。

Visual Studio里创建一个Visual Web Part的工程

    首先,你需要用管理员身份打开Visual Studio。 用SharePoint编程的时候,debugger & tools需要管理员的权限。如果你忘记了,Visual Studio将会给与警告。

    其次,创建一个新的工程,选择SharePoint 2010->Visual Web Part。(确定你选了Visual Web Part,而不是Web Part)。将这个工程命名为LowInventoryWebPart。打开SharePoint个性化向导,选择你的SharePoint站点,在我的例子中,我已经创建了一个名为Northwind的组网站名。

    注意到只有”Deploy as a farm solution”一个可选项。也就是说,当你设计一个Visual web part时,它是对在 farm里的所有网站集合可用的,而不像一个sandboxed解决方案,只在网站集级别可用。这两者本质的区别在于它们运行在什么流程中,farm是IIS worker流程,这也给与了它们访问权限。 在MSDN库中,有更多关于Sandboxed和Farm解决方案区别的信息。

clip_image002

    点Finish,ASP.NET的设计器被打开,并显示网页用户控件。首先,我们需要加一个service reference到我们的data service中。如果你用data service通过WCF-REST取消,我们正暴露业务数据(此时为Northwind SQL数据库)。一旦我们部署,只要从SharePoint实例我们能够进入这个service,我们就能很好的到达。

     为了加一个service reference到data service, 选择Project->Add Service Reference。如果你的data service也在这个解决方案路径下,只要点Discover浏览data service暴露的类型。设置命名空间到NorthwindService并点OK。

设计Visual Web Part以及加载数据

    在此,我没有一些超级花式的设计技巧,所以我们将只是创建一个数据绑定的GridView,然后写一个LINQ查询获取并展示低库存物品。关键的是,这和我们写一些ASP.NET网页的代码是一样的,你甚至可以使用Toolbox里的Ajax控件。为了与 SharePoint列表交互,接下来的部分我们将利用SharePoint服务器模型的优势,从LOB数据库获取数据,因为它是标准的数据访问方式。

    从Toolbox,我们将拖拽一个GridView到窗体上,同时还将拖拽一个Label到窗体的下方以显示一些错误信息。我可以按照自己的风格来布局这些控件,在SharePoint的Web Part上,这些风格在显示方面都是一样的。

clip_image004

    右键点击设计器打开代码,在Page_Load事件处理程序中,我们将编写代码从我们的data service中加载低库存。

Imports System

Imports System.Web.UI

Imports System.Web.UI.WebControls

Imports System.Web.UI.WebControls.WebParts

Imports LowInventoryWebPart.NorthwindService

Partial Public Class LowInventoryWebPartUserControl

Inherits UserControl

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load

‘Webpart Code to display Low Inventory:

Try

Dim ctx As New NorthwindEntities(New Uri("http://myserver/Northwind.svc/"))

Dim result = From p In ctx.Products _

Where p.UnitsInStock <= p.ReorderLevel _

Order By p.UnitsInStock

Me.GridView1.AutoGenerateColumns = True

Me.GridView1.DataSource = result.ToList()

Me.GridView1.DataBind()

Catch ex As Exception

Me.Label1.Text = ex.ToString

End Try

End Sub

End Class

调试Web Part

    现在让我们来测试它。如果LowInventoryWebPart项目默认不是你的解决方案的启动项目,那么设置它,并在LINQ查询中设置一个断点。按F5键,Visual Studio将自动为你回收IIS worker进程,打包,部署和启动功能,并附加调试器。下面的内容是显示在输出窗口的。

—— Deploy started: Project: LowInventoryWebPart, Configuration: Debug Any CPU ——
Active Deployment Configuration: Default
Run Pre-Deployment Command:
  Skipping deployment step because a pre-deployment command is not specified.
Recycle IIS Application Pool:
  Skipping application p
ool recycle because no matching package on the server was found.
Retract Solution:
  Skipping package retraction because no matching package on the server was found.
Add Solution:
  Adding solution ‘LowInventoryWebPart.wsp’…
  Deploying solution ‘LowInventoryWebPart.wsp’…
Activate Features:
  Activating feature ‘Feature1′ …
Run Post-Deployment Command:
  Skipping deployment step because a post-deployment command is not specified.
========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========
========== Deploy: 1 succeeded, 0 failed, 0 skipped ==========

    幸运得是Visual Studio将处理所有的部署以及清理工作。当你关闭调试器,这个功能就无效了,相应的包也将被回收删除。请注意,你也可以指定部署前后的CMD命令。特征和包的设计是很灵活的。(更多信息请看频道9访谈:在Visual Studio 2010中SharePoint 特征和包的设计,以及参考MSDN库打包和部署SharePoint解决方案

    为了调试,我们首先必须将它添加到我们的网站页面上。当调试器启动时,它打开起初我们在SharePoint自定义向导中指定的页面地址。选择左上角的Site Actions->Edit Page。选择Insert标签并点击Web Part。选中并点击右下角的Add。

clip_image006

    此时调试到你设置的断点,按F11,查询时将返回低库存,因为你设计了这个页面,所以你能看见这些数据。有一点要记住,当设计web part的时候,Page_Load将被多次调用。

    接下来,打开web part右上角LowInventoryWebPart菜单的下拉框,选择Edit Web Part打开属性。设置标题为“低库存”,然后单击确定。在功能区选项卡上选择Save保存并关闭编辑的页面。现在我们已经有一个浏览低库存很好看的web part了。太棒了!

clip_image008

    关闭浏览器窗口,这将自动地关闭你的调试会话,回收IIS应用程序池,功能失效以及收回解决方案。这些步骤也会显示在输出窗口。

用服务器对象模型与SharePoint互动

    用一个简单的web part和data service很容易把我们LOB数据融入到SharePoint。如果用户看到一个很低的项,想把它加到任务列表呢?此时如果他们能做到这点,那就太妙了。在Visual Web Part我们是通过SharePoint服务器对象模型来和SharePoint进行交互的。此外也有SharePoint客户端对象模型,一个是Silverlight客户端,另一个是.NET Framework客户端。但是,当我们运行web part的时候,我们正在服务器上,所以我们有权限访问服务器对象模型。

    让我们添加一个TextBox和一个Button到我们的web part,web part允许用户直接在任务列表中输入任务。返回到Web Part的设计模式,在GridView下敲下Enter,并在下面输入”Create Task:”。从Toolbox标准的选项卡上,拖一个Textbox到窗体上,然后拖动一个Button,并设置其Text属性为“添加”。

    双击该按钮,我们可以在Button1的Click事件处理程序中添加一个任务。

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click

‘Webpart code to Add to task list

Try

Dim mySite As SPWeb = SPContext.Current.Web

Dim listItems As SPListItemCollection = mySite.Lists("Tasks").Items

Dim item As SPListItem = listItems.Add()

item("Title") = Me.TextBox1.Text

item("Assigned To") = mySite.AllUsers(Me.Context.User.Identity.Name)

item.Update()

Me.TextBox1.Text = ""

Me.Label1.Text = "Your task has been added to the task list"

Catch ex As Exception

Me.Label1.Text = ex.ToString

End Try

End Sub

    我们访问当前SharePoint站点是通过SPContext对象并得到Current.Web的。SharePoint开发时的SPContext就像ASP.NET开发时的HttpContext。因此,让我们测试一下吧。在Button1_Click处理函数那设置一个断点,并按F5部署以及调试。第二次的时候,你不需要再次添加web part到页面站点中,添加了新的控件和代码,它将会刷新。

    现在,通过输入一个描述,然后点击Add按钮来创建一个任务。设置断点,你能调试代码并探索一下服务器对象模型。

clip_image010

    当你完成后,导航到任务列表,将会发现你的任务已被添加。

clip_image012

    该解决方案位于http://code.msdn.microsoft.com/OBANorthwind,如果你是一个ASP.NET开发人员并刚开始使用SharePoint开发,那么还有很多东西需要学习,但幸运的是Visual Studio 2010可以帮你更容易地熟悉一个陌生的平台。

    下载Visual Studio 2010 测试版,通过http://msdn.com/vstudio演练。

No Comments - Leave a comment

Leave a comment


Welcome , today is 星期四, 2017 年 06 月 22 日