SharePoint 2010可以与Silverlight实现紧密集成。不管是在浏览器中运行的Silverlight程序还是单独的一个Silverlight程序,都能与SharePoint 2010实现很好的整合。本文中我们将实现一个Silverlight和SharePoint高度整合的例子,通过SharePoint 2010客户端对象模型访问SharePoint任务列表。同时,我们还将学习如何通过SharePoint自带的Silverlight Web部件来宿主Silverlight应用。下图是根据我个人的理解绘制的Silverlight和SharePoint 2010应用整合示意图。

  从上图我们可以看到,我们分别有SharePoint客户端对象模型(OM)和SharePoint Web服务两种API供 Silverlight应用程序调用。 事实上客户端对象模型和服务这两条途径,不仅仅能用在Silverlight中,还可以用于其它的客户端应用程序中。

  在开始编写应用程序之前,我们首先了解一下Silverlight和SharePoint之间不同类型的集成模型。我们可以简单的通过HTML以IFrame的方式显示Silverlight应用程序,也可以将Silverlight应用程序宿主在Web部件中,还可以  调用SharePoint对象模型或服务。这些方式彼此之间并没有硬性的分类界限。只是人为的通过使用规模所做的一个区分。 分类如下:

  1. 无接触 :通过无接触方式,可以直接把现有的Silverlight应用集成到SharePoint。 目的只是在SharePoint中进行显示。直接使用iframe即可。

  2.低接触 :低接触的应用与SharePoint间的互动多了一点。但也仅仅是通过SharePoint 开箱即用的Silverlight Web部件对Silverlight应用进行装载而已。 这个应用程序本身是一个独立的应用程序,它可能会调用一些除SharePoint API以外的其他服务。

  之前我的一篇博文中,曾讨论过一个典型的低接触的例子。是关于SharePoint2010整合Silverlight 4应用——Bing地图控件

  3.高接触:高接触整合是指利用到SharePoint客户端对象模型或Web服务来读写SharePoint Server信息的应用整合。 应用程序本身可以是一个WPF应用程序,或者是像Silverlight这样的客户端应用程序,或者是ASP.NET 、JavaScript应用程序。下图为一个Silverlight客户端应用程序的高接触整合。

  接下来,我们要实现一个Silverlight与SharePoint高接触的应用,通过Silverlight调用客户端对象模型。会对使用客户端对象模型的三种场景都进行描述:

  1. 在浏览器中运行的Silverlight应用程序

  2. 在浏览器外运行的(Out of Browser,简称OOB)Silverlight应用程序

  3. 作为Silverlight XAP文件宿主在SharePoint Web部件中的Silverlight应用程序

  首先,我们需要创建一个Silverlight应用程序, 打开Visual Studio 2010>“新建” >“项目” 。 选择Silverlight项目模板,并选择.NET Framework 4.0。将该项目命名为“SilverlightSPIntegration”。

  点击“确定”按钮后,会弹一个窗口要求自动创建一个Web应用程序,Silverlight应用程序将自动宿主在该Web应用程序中 。

  下一步我们要做的就是编写Silverlight程序来调用客户端对象模型的API 。 右击Silverlight解决方案,选择“添加引用”

  这里我们需要添加“Microsoft.SharePoint.Client.Silverlight.dll”和“Microsoft.SharePoint.Client.Silverlight.Runtime.dll”这两个dll。他们位于"C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\LAYOUTS\ClientBin"文件夹下。

  引用添加完成后,整个Silverlight应用程序的文件夹结构如下:

  接下来,我们要对Silverlight的XAML进行设计,实现SharePoint网站中的某些功能。如上所述,在本例中,我们会从SharePoint内置的任务列表中读取一些数据 。因此,我们不妨先参考一下SharePoint默认的界面。打开SharePoint网站,从快速启动区中找到“任务”列表并点击它。

  这是默认的SharePoint任务列表。 当然你也可以使用任意的列表,甚至是自定义列表。 只需要根据实际的设计修改对应的用户界面和代码即可。现在,为该任务列表输入一些虚拟的数据。

  下面是我为的任务列表添加的一些虚拟数据。

  至此,我们完成了SharePoint部分的工作。 接下来我们要创建一个自定义的UI,用Silverlight来显示这些数据。 界面比较简陋,只是为了说明两者是如何实现整合的。

上海闵行企业网站设计与制作οnmοuseοut="_tipoff()">  返回Visual Studio,在Silverlight解决方案中,设计一些简单的XAML界面。

  为了快速设置样式,我用Expression Blend对界面做了一点美化工作。

  保存该Expression Blend项目,并在Visual Studio中从我们的Silverlight应用程序中打开。它会要求重新加载应用程序,因为内容在当前环境外被修改了。

  以下是Silverlight用户界面的XAML代码:

<!--    <Setter Property="MinWidth" Value="150" />    <Setter Property="MaxWidth" Value="150" />    <Setter Property="HorizontalAlignment" Value="Left" />--><!--    <Setter Property="HorizontalAlignment" Value="Right" />    <Setter Property="Foreground" Value="Orange" />-->

  现在,我们 上海企业网站制作over="_tipon(this)" οnmοuseοut="_tipoff()">完成了界面设计。 可以按“F5”运行一下,看看用户界面的样子。

  上图就是我们设计的Silverlight应用程序。它托管在ASP.NET Web应用程序里。 现在就可以使用 SharePoint 客户端对象模型来从SharePoint服务器中读取任务列表数据了。

  因为我们要通过类来读取列表的信息,所以首先要创建一个任务类型的类,作为任务的容器。下面是任务类上海网站建设mouseover="_tipon(this)" οnmοuseοut="_tipoff()">代码。

public class Tasks{        public string Title { get; set; }        public string DueDate { get; set; }        public string Status { get; set; }        public string Priority { get; set; }        public double PercentComplete { get; set; }}

  打开MainPage.XAML.CS文件,添加如下的命名空间

using Microsoft.SharePoint.Client;

  添加好命名空间后就可以调用对象模型API了。

  下面的示例代码可以从特定的SharePoint站点中获取某列表实例。

        void MainPage_Loaded(object sender, RoutedEventArgs e)        {            using (ClientContext SharePointContext = new ClientContext(this.SPWebSiteURL))            {                this.query = new CamlQuery();                SharePointContext.Load(SharePointContext.Web);                this.task = SharePointContext.Web.Lists.GetByTitle("Tasks");                this.strQuery = @" ";                query.ViewXml = this.strQuery;                this.taskLists = this.task.GetItems(this.query);                SharePointContext.Load(this.taskLists);                SharePointContext.ExecuteQueryAsync(this.OnSiteLoadSuccess, this.OnSiteLoadFailure);            }        }

  SharePointContext.ExecuteQueryAsync方法的执行是异步的。 该方法使用两个回调函数分别处理成功和失败的返回结果。

  如上面的代码所示,如果我们的程序成功执行,它会调用OnSiteLoadSuccess,否则调用 OnSiteLoadFailure。下面是这两个函数实现代码。

private void OnSiteLoadSuccess(object sender, ClientRequestSucceededEventArgs e){    foreach (ListItem item in this.taskLists)    {       Tasks objTask = new Tasks();       objTask.Title = item["Title"].ToString();       objTask.DueDate = item["DueDate"].ToString();       objTask.Status = item["Status"].ToString();       objTask.Priority = item["Priority"].ToString();       double fraction = Convert.ToDouble(item["PercentComplete"]);       objTask.PercentComplete = fraction * 100;       this.SharePointTasks.Add(objTask);    }   AddTaskList( this.SharePointTasks);}

private void OnSiteLoadFailure(object sender, ClientRequestFailedEventArgs e){    MessageBox.Show(e.Message +  e.StackTrace);}

  接下来,我们需要创建一个委托来更新UI。使用Dispatcher.BeginInvoke ,以避免跨线程调用的异常。

private void AddTaskList(){    this.Dispatcher.BeginInvoke(new UpdateSilverLightUI(this.AddItemsToLists), this.SharePointTasks);}private void AddItemsToLists(List tasks){    foreach (Tasks t in tasks)    {        TaskList.Items.Add(t.Title);    }}

  现在,所有的任务已被添加到Silverlight的Task List中,然后我们要处理的ListBox的SelectionChanged事件,并在不同的文本框中显示相应的值。

private void TaskList_SelectionChanged(object sender, SelectionChangedEventArgs e){    var v = this.SharePointTasks.FirstOrDefault(item => item.Title.Equals(TaskList.SelectedItem.ToString()));    if (v != null)    {        txtTitle.Text = v.Title;        txtDueDate.Text = v.DueDate;        txtPriority.Text = v.Priority;        txtStatus.Text = v.Status;        txtPercentage.Value = v.PercentComplete;    }}

  OK,到这里所有的代码编写部分就完成了。但如果你现在尝试运行该应用程序,会得到一个跨域访问异常。因为SharePoint网站宿主在IIS中,而正在运行的应用程序却是在VS里。为了解决这个问题,你必须把clientAccessPolicy.xml文件放到SharePoint站点的根目录。
  按F5运行该应用程序。没错,所显示的Silverlight风格的任务列表和前面我们创建的SharePoint列表完全一致。可以点击List中的一个任务来显示详细信息。

  至此,我们完成了一个在单独的网站中运行的Silverlight应用,并与SharePoint集成。你可以把这个应用宿主在任何ASP.NET Web应用程序中 。

  接下来,让我们把这个Silverlight应用程序变得更有趣些,使其可以在浏览器外运行。事实上仅仅是通过VS2010自带的配置工具做一个小小的修改就OK了。

  在解决方案管理器中右键点击Silverlight应用程序 >“属性”,然后勾选“允许在浏览器外运行应用程序” 复选框,如下图所示。

  点击“浏览器外设置...”可以做更细的配置 您可以修改窗口的高度,宽度和标题等。

  完成浏览器外设置后,再运行该应用程序,你会发现它现在和Windows应用程序运行效果很相似.

  我们已经实现了在浏览器中和在浏览器外的Silverlight应用与SharePoint 集成。

  如何将Silverlight应用作为一个SharePoint Web部件宿主在SharePoint中呢。 其实和在一般网站中一样,SharePoint也是通过Silverlight的XAP文件实现宿主的,之前我已经在上次讲地图控件的时候提到过。

  首先,我们在与上面的例子相同的解决方案下,新建一个SharePoint 2010项目。选择“ 空白SharePoint项目 ”模板。

  为项目命名,然后单击“ 确定 ”。接下来将显示如下的部署向导。

上海闵行企业网站制作useover="_tipon(this)" οnmοuseοut="_tipoff()">  要求输入作为调试的SharePoint网站的位置和部署类型。 你可以使用默认的选择。 点击“ 确定 ”, 完成对SharePoint项目的创建。

  现在,我们需要添加一个SharePoint项——模块。 模块包含一个待部署的文件,本身需要包含在一个SharePoint项目中。 要添加一个模块,可以在SharePoint项目上右击,并点击添加新项。

  在SharePoint 2010分类下,选择“模块”,为其命名,点击“ 添加 ”。 然后右击该模块,点击“ 属性 ”。

  在属性窗口的“ 项目输出引用 ”选择器中,做如下图的设置。

  请注意,你需要选择部署类型为“ElementFile”,项目名称应该是Silverlight解决方案的名称 。点击确定 。这是SharePoint模块的“Element.XML”文件中,会添加到Silverlight的xap文件的路径。通过这种方式可以把Silverlight应用添加到SharePoint网站中,使其成为SharePoint的一部分。

  完成我们的SharePoint项目后,就可以编译部署了。 右键单击SharePoint项目,选择部署。这样就完成了部署操作。

  接下来,我们将其宿主到SharePoint网站的Silverlight Web部件。

  Silverlight Web部件和其他Web部件的使用一样。首先你需要打开SharePoint页面的编辑模式,转到插入,选择Web部件。 选择“ 媒体与内容 ”类别,选择SharePoint 自带的Silverlight Web部件。 点击添加 。

  你会看到一个Ajax弹出对话框,要求输入Silverlight 应用程序包(XAP 文件的URL这里填写上面我们在SharePoint模块的Element. XML文件中指定的URL。

  点击确定。运行成功的话,Silverlight Web部件的显示如下图所示。

  如果没有写对URL,保存后会看到如下的错误信息。 提示你可能提供的XAP文件路径有错误,请重新配置。

  这时,你必须首先确保你提供的XAP文件路径是有效的。 如果路径有效,再检查一下相应的功能是否已经被激活(可以从网站操作>网站设置中找到管理功能的链接)。

  如果愿意,我们可以把SharePoint的任务列表和 Silverlight WebPart放在一个页面上。

  这样当我们在任务列表中添加一项新的任务后,新任务同时会反映在我们的Silverlight任务控件中。

  如果不想这么麻烦的部署一个XAP文件,也可以简单的把XAP上传到一个文档库中。然后在Web部件中直接指定其在文档库中的路径即可。

  当然,你还可以创建一个SharePoint 2010项目,包含一个自定义Web部件宿主Silverlight应用,然后再部署该Web部件。

  希望对你有帮助!

  参考资料:

  Silverlight Task Control For SharePoint 2010 - Example of Hight Touch Integration  

  Microsoft Silverlight 4 Tools for Visual Studio 2010

转载于:https://www.cnblogs.com/waw/archive/2011/10/15/2213613.html

SharePoint 2010 整合Sil“.NET研究”verlight 4应用 - 任务管理相关推荐

  1. sharepoint 2010 培训公司课程内容

    sharepoint 2010 培训公司课程内容:用之学习参考,引导. 1>sharepoint 2010开发概述; 2>VS2010 开发SHAREPOINT 2010; 3>sh ...

  2. 创建与SharePoint 2010风格一致的下拉菜单 (续) 整合Feature Custom Action框架

    在上一篇"创建与SharePoint 2010风格一致的下拉菜单"文章中,演示了如何添加一个额外的菜单到页面顶端,并使其的样式风格与SharePoint 2010内置的菜单保持一致 ...

  3. SharePoint 2010 BI(2):使用Visio“.NET研究” Service

    在SharePoint 2010企业版中提供的Visio Graphics Service是Visio service 以及Visio文件Web显示WebPart的基础,利用该服务我们在浏览器中直接显 ...

  4. F5提高Microsoft SharePoint 2010平台的灵捷 度、性能和安全性

    Microsoft® SharePoint® Server 2010为全球各地的企业实现了创新的.智能的业务协作.企业采用Microsoft SharePoint无缝地连接用户.团队和知识.Share ...

  5. 在SharePoint 2010系统中安装RBS FILESTREAM Provider

    在SharePoint 2010系统中安装RBS FILESTREAM Provider 这两天在研究怎么写一个RBS Provider,可惜文档实在是很缺乏,基本上除了一篇Spec之外,就只有SQL ...

  6. SharePoint 2010 产品六大功能模块

    对IT专业人员来说,新的产品,意味着新的功能,IT生产力提高的契机,更加关心如何使用新产品投入更少,产出更多.在本文中我们通过对SharePoint 2010产品的功能介绍.管理中心新功能介绍.系统新 ...

  7. SharePoint 2010应用开发系列

    这段时间一直在忙着写SharePoint 2010的MSDN,花了很大的精力来研究,在这里记录一下一些心得体会,希望能给大家带来帮助,共同进步.     各位如果也在研究SharePoint 2010 ...

  8. 使用SharePoint 2010新增的文档集内容类型来管理文档

    使用SharePoint 2010新增的文档集内容类型来管理文档 SharePoint 2010新增加的文档集功能是作为内容类型存在的,使用范围在网站集中,需要激活"文档集"功能到 ...

  9. 了解 SharePoint 2010 开发中的关键点

    **摘要:**了解为 Microsoft SharePoint 2010 规划和开发业务解决方案时必须做出的关键点. 上次修改时间: 2012年3月13日 适用范围: Business Connect ...

最新文章

  1. Linux命令之top
  2. Python中的特殊成员和魔法方法
  3. python数据挖掘主要特点_【Python数据挖掘】第六篇--特征工程
  4. 处理错误:ORA-27101: shared memory realm does not exist 解决方案
  5. android开发读书笔记,android开发权威指南读书笔记
  6. 微信年末最后一发新功能!对生活很有帮助,必须了解一下!
  7. css入门教程资料(5)
  8. shiro(一)简介、理论知识
  9. 从业务需求抽象成模型解决方案
  10. error 1307 (HY000):Failed to create procedure
  11. css3实现的精美菜单
  12. c++中new和delete
  13. C语言 | 延时函数(Delay)
  14. android刷成windows7,高手在民间!牛人将Win7刷进了安卓手表-win7精简版
  15. 线性模型(Linear Model)
  16. 面试技巧之如何面试与如何应试
  17. 2021年全球手机市场,三星和华为都输了,其他手机企业赢了
  18. 关键链项目管理方法的缓冲区管理
  19. Paper之EfficientDet: 《Scalable and Efficient Object Detection—可扩展和高效的目标检测》的翻译及其解读—续篇
  20. KSM与KVM CPU、内存控制

热门文章

  1. Perl 文件和文件夹操作
  2. python_day3
  3. “OpAfrica”行动:匿名者攻击南非武器采购机构
  4. [nRF51822] 5、 霸屏了——详解nRF51 SDK中的GPIOTE(从GPIO电平变化到产生中断事件的流程详解)...
  5. eventlog analyzer 8.0
  6. 去年五一的大理丽江之行,今年的得在加班中度过了
  7. java中this关键字的基本使用
  8. 数据之路 - Python爬虫 - PySpider框架
  9. opencv之imread()
  10. width:100%与绝对定位同时存在,偏移出父级容器