技术开发 频道

用SharePoint Online实现基于云的协作

  图 10 中的代码遵循客户端 OM 代码的通用模式。首先,我将通过 ClientContext 类(与 SPContext 类等效)访问客户端上下文。接下来,我将分别通过 Web、ListCollection 和 List 类来访问网站和列表。请注意 SPWeb、SPListCollection 和 SPList 类的相似之处。最后,我将通过调用 List.AddItem 方法创建一个 ListItem,使用 UI 中的数据填充 ListItem,然后调用 ListItem.Update 方法。在调用 ClientContext.Load 和 ClientContext.ExecuteQueryAsync 方法来执行查询之前,不会实际创建 ListItem。请注意,您可以通过以下做法来避免与服务器之间的来回操作: 通过 ClientContext.Load 加载多个查询,调用 ClientContext.ExecuteQueryAsync 方法。

  为了部署 Silverlight 4 应用程序,我将添加一个模块以使用我的 Web 部件项目部署该应用程序。我将在“解决方案资源管理器”中选择“PurchasingMgrWP”,右键单击并选择“添加”|“新建项目”|“模块”,然后将该模块命名为 ClientBin。我将使用以下 XML 替换创建的 Elements.xml 的内容:

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  
<Module Name="ClientBin">
    
<File Path="ClientBin\NonStandBusPurchaseReqsSLOM.xap"  
      Url
="ClientBin/NonStandBusPurchaseReqsSLOM.xap" />
  
</Module>
</Elements>

   此 XML 将把 NonStandBusPurchaseReqsSLOM.xap 文件部署到我的 SharePoint 网站的 ClientBin 文件夹中。

  为了使用 ClientBin 模块部署 NonStandBusPurchaseReqsSLOM 项目的输出内容,我将在“解决方案资源管理器”中选择 ClientBin 模块,然后打开“项目输出引用”属性对话框。我将单击“添加”,然后选择“NonStandBusPurchaseReqsSLOM”作为项目名称,选择“ElementFile”作为部署类型。

  接下来,我将向我的 SharePoint 解决方案中添加一个自定义的 Web 部件,以承载我的 Silverlight 4 应用程序。我将在“解决方案资源管理器”中选择“PurchasingMgrWP”,右键单击并选择“添加”|“新建项目”,选择“Web 部件”,然后将该 Web 部件命名为 NonStandBusPurchaseReqsWP。我将使用自定义 Web 部件来向我的 Silverlight 4 应用程序传递参数,例如用于创建 ClientContext 的站点的 URL。为此,我将添加一个名为 SilverlightObjectTagControl.cs 的帮助器类,并使用图 11 中的代码替换该类的内容。

  图 11 添加 SilverlightObjectTagControl.cs 帮助器类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace PurchasingMgrWP
{
class SilverlightObjectTagControl : WebControl
{
public string Source { get; set; }
public string InitParameters { get; set; }

protected override void CreateChildControls()
{
base.CreateChildControls();

if (Source != null && Source != "")
{
string width = (this.Width == Unit.Empty) ? "
400" :
this.Width.ToString();
string height = (this.Height == Unit.Empty) ? "
300" :
this.Height.ToString();

this.Controls.Add(
new LiteralControl(
" <div>" +
" <object data=\"data:application/x-silverlight-2,\" +
" type=\"application/x-silverlight-2\" width=\"" + width +
" "\" height=\"" + height + "\">" +
" <param name=\"source\" value=\"" + Source + "\"/>" +
" <param name=\"onerror\" value=\"onSilverlightError\" />" +
" <param name=\"background\" value=\"white\" />" +
" <param name=\"minRuntimeVersion\" value=\"4.0.50826.0\" />" +
" <param name=\"autoUpgrade\" value=\"true\" />" +
" <param name=\"initparams\" value=\"" + InitParameters + "\" />" +
" <a href=\"http://go.microsoft.com/fwlink/?LinkID=" +
" 149156&v=4.0.50826.0\" +
" style=\"text-decoration: none;\">" +
" <img src=\"http://go.microsoft.com/fwlink/?LinkId=161376\" +
" alt=\"Get Microsoft Silverlight\" style=\"border-style: none\"/>" +
" </a>" +
" </object>" +
" <iframe id=\"_sl_historyFrame\" +
" style=.visibility:hidden;height:0;width:0;border:0px.></iframe>" +
" </div>"
));

}
}
}
}

   图 11 中的 SilverlightObjectTagControl 类具有两个属性:Source 用于传递 Silverlight 应用程序的 URL 以加载 Web 部件,InitParameters 用于向 Silverlight 4 传递初始化参数。这两个属性在 CreateChildControls 方法中用于为 Silverlight 应用程序构建标记。要使用此类,请打开 NonStandBusPurchaseReqsWP.cs,然后用图 12 中的代码替换此类中的代码。

0
相关文章