此编程任务包含用于创建基本的自定义 Windows SharePoint Services Web 部件的步骤。此部件是一个简单的 Web 部件,可用于更改 Web 部件的 Title 属性,该属性是一个 Windows SharePoint Services WebPart 基类属性,可设置 Web 部件标题栏中的文本。
重要提示: |
---|
从 Windows SharePoint Services 3.0 开始,Windows SharePoint Services Web 部件基础结构是在 Microsoft ASP.NET 2.0 Web 部件基础结构之上建立,并且 Windows SharePoint Services 完全支持从 ASP.NET WebPart 类类派生的 Web 部件。应尽可能创建 ASP.NET Web 部件。 有关选择从其进行派生的最佳 Web 部件基类的详细信息,请参阅 Windows SharePoint Services 软件开发工具包 (SDK) 中的开发 Windows SharePoint Services 中的 Web 部件。有关 ASP.NET Web 部件的详细信息,请参阅 ASP.NET 文档中的 Web 部件控件集概述。 |
默认情况下,项目的 AssemblyVersion 属性设置为在每次重新编译 Web 部件时递增。Web 部件页使用在 web.config
文件中指定的版本号标识 Web 部件。在AssemblyVersion 属性设置为递增的情况下,如果在将 Web 部件导入 Web 部件页之后重新编译此 Web 部件,则 Web 部件框架将查找在 web.config
文件中指定的版本号。如果版本号不匹配,将出现错误。若要防止 Web 部件的版本号在每次重新编译时递增,需要在 AssemblyInfo
文件中设置版本号。
由于您要创建签名的代码,因此还必须告诉程序集允许部分信任的代码调用。默认情况下,任何没有明确选择供部分信任的代码使用的强名称程序集将只能由安全策略已授予完全信任的其他程序集调用。
设置版本号并允许部分信任的调用方
如果要创建多个 Web 部件,则通常应在所有 Web 部件之间使用同一命名空间。默认情况下,Web 控件库会向命名空间分配与项目相同的名称。对于此示例,我们将使用WebPart 类的 MyWebParts 的任意命名空间。创建项目后,会显示空白的类文件。您可以更改“WebCustomControl”的默认类名以便于识别新的 Web 部件。
重命名类和命名空间
-
通过以下方式重命名默认类:在“解决方案资源管理器”中选择“WebCustomControl1”,右键单击,再单击“重命名”,键入 SimpleWebPart 作为文件名。
-
对于 C#,通过编辑下面的行来更改 Web 部件命名空间:
C#namespace SimpleWebPart
以便它显示为:
C#namespace MyWebParts
-
对于 Visual Basic,右键单击“解决方案资源管理器”中的“SimpleWebPart”,再单击“属性”。将“程序集名称”和“根命名空间”文本框中的文本替换为
MyWebParts.SimpleWebPart
为了更容易编写基本的 WebPart 类,您应该在代码中使用 using 指令 (C#) 或 Imports 指令 (Visual Basic) 以引用下面的命名空间:
-
Microsoft.SharePoint.WebPartPages 命名空间提供 Web 部件页的类型(如 Microsoft.SharePoint.WebPartPages.WebPart 类)。
添加命名空间指令
-
在代码顶部附近添加下面的 using 或 Imports 指令:
C#using Microsoft.SharePoint.WebPartPages;
完成上述步骤之后,可以定义 Web 部件的逻辑和呈现。对于此部件,将编写一些基本的 ASP.NET 代码以创建两个控件(文本框和按钮)来设置 Web 部件的 Title 属性。
定义 Web 部件的逻辑和呈现
-
在
SimpleWebPart
文件的顶部附近添加下面的代码来创建两个用户界面对象。C#Button saveTitle; TextBox newTitle;
-
在类内部添加下面的代码来创建按钮处理事件。
C#public void saveTitle_click(object sender, EventArgs e) { this.Title = newTitle.Text; try { this.SaveProperties = true; } catch (Exception ex) { this.Title = "Error: " + ex.Message; } }
-
在类内部添加下面的代码来重写 CreateChildControls 方法。
C#protected override void CreateChildControls { //Create text box newTitle = new TextBox; newTitle.Text = ""; Controls.Add(newTitle); //Create button saveTitle = new Button; saveTitle.Text = "Set Web Part Title"; saveTitle.Click += new EventHandler(saveTitle_click); Controls.Add(saveTitle); }
-
使用下面的代码行替换 RenderWebPart 方法。
protected override void RenderWebPart(HtmlTextWriter output) { RenderChildren(output); }
VBProtected Overrides Sub RenderWebPart(ByVal output as HtmlTextWriter) RenderChildren(output) End Sub
Web 部件可通过 Internet 或 Intranet 进行分发。为了安全起见,在创建自定义 Web 部件时,应为其指定强名称以确保用户可以信任此部件。有关强命名的详细信息,请参阅部署 Windows SharePoint Services 中的 Web 部件以及此演练末尾的Related Topics。
向程序集分配强名称
-
在“解决方案资源管理器”中,右键单击项目“SimpleWebPart”,然后单击“属性”。
-
在“SimpleWebPart”属性中,单击左侧的“签名”选项卡。
-
在“签名”选项卡上,选中“为程序集签名”复选框。
-
在“选择强名称密钥文件”下拉菜单中选择“新建”。
-
在“创建强名称密钥”对话框中,键入 SimpleWebPartKey 并取消选中“使用密码保护密钥文件”。
-
现在,在生成程序集时将对其进行签名。
生成 Web 部件之后,您必须将生成的 DLL 复制到 bin 目录。
将 DLL 复制到 bin 目录
-
在文件系统上,查找
SimpleWebPart.dll
文件。Visual Studio 2005 的默认位置为C:\Documents and Settings\
用户名\My Documents\Visual Studio 2005\Projects\SimpleWebPart\SimpleWebPart\bin\Debug
。 -
将
SimpleWebPart.dll
文件从输出目录复制到 Web 应用程序根 bin 目录。 的 Web 应用程序根目录的默认位置为C:\Inetpub\wwwroot\wss\VirtualDirectories\
端口号\bin
。有关详细信息,请参阅如何:查找 Web 应用程序根目录。
提供 SafeControls 列表,以阻止用户在 ASPX 页中随意添加服务器端代码。此 SafeControls 列表是一个包含特定于 SharePoint 网站的经批准的控件和 Web 部件的列表,您已将这些控件和 Web 部件指定为安全项目以便在您的网站中的任何 ASPX 页上进行调用。此列表包含在您的 Web 应用程序根目录的 web.config
文件中。本地路径包含web.config
文件的物理位置。
默认情况下,此服务器的信任级别为 WSS_Minimal,这将禁止访问 Windows SharePoint Services 对象模型。若要设置此 Web 部件的 SaveProperties 属性,必须执行以下三个操作之一:
-
为程序集创建自定义策略文件,或
-
在全局程序集缓存中安装程序集,或
-
提高整个虚拟服务器的信任级别。
在此示例中,将在 web.config
文件中将默认信任从 WSS_Minimal 提高到 WSS_Medium。
您可以通过使用 Internet Information Services (IIS) 管理单元查找
|
提高默认信任级别并为 Web 部件添加 SafeControl 条目
-
在 Web 应用程序根目录中打开
web.config
文件。 -
在 trust 部分的 level 属性中,将“WSS_Minimal”更改为“WSS_Medium”。
-
在
web.config
文件的 SafeControls 部分中,按如下方式为自定义程序集添加 SafeControl 条目。XML<SafeControl Assembly="SimpleWebPart, Version=1.0.0.0, Culture=neutral, PublicKeyToken=PublicKeyToken" Namespace="MyWebParts" TypeName="SimpleWebPart" Safe="True"/>
-
将 PublicKeyToken 替换为 Web 部件的程序集的实际值。若要确定 Web 部件的正确 PublicKeyToken,请使用 sn.exe 命令行实用程序。
sn.exe -T C:\inetpub\wwwroot\wss\VirtualDirectories\PortNumber\bin\SimpleWebPart.dll
Web 部件定义文件 (.dwp) 是简单的 XML 文件,其中包含单个 Web 部件的属性设置。若要将 Web 部件导入 Web 部件页,只需上载 .dwp 文件。在上载 Web 部件之后,可以通过将此 Web 部件拖到 Web 部件页的其中一个区域来显示它。
.dwp 文件中需要两个属性:Assembly 和 TypeName。但是,若要在导入 Web 部件后显示其默认名称和说明,则还应包括 Title 和 Description 属性。若要在导入过程中设置其他 Web 部件属性,也可以在 .dwp 文件中定义它们。.dwp 文件的形式如下所示。
<?xml version="1.0"?> <WebPart xmlns="http://schemas.microsoft.com/WebPart/v2"> <Assembly>AssemblyName(with no .dll extension), Version=VersionNumber, Culture=Culture, PublicKeyToken=PublicKeyToken</Assembly> <TypeName>WebPartNameSpace.WebPartClassName</TypeName> <Title>DefaultWebPartTitle</Title> <Description>WebPartDescription</Description> </WebPart>
创建 DWP 文件
-
复制以下 XML 并将其粘贴到新的文本文件。
XML<?xml version="1.0"?> <WebPart xmlns="http://schemas.microsoft.com/WebPart/v2"> <Assembly>SimpleWebPart, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=PublicKeyToken</Assembly> <TypeName>MyWebParts.SimpleWebPart</TypeName> <Title>My Simple Web Part</Title> <Description>A simple Web Part</Description> </WebPart>
重要提示: 您必须将上面 XML 中的 PublicKeyToken 替换为程序集的公钥标记。
-
将此文件作为 SimpleWebPart.dwp 保存在 Web 应用程序根目录的 bin 目录中。
若要使用并测试 Web 部件,请将其导入到运行 Windows SharePoint Services 或 Microsoft Office SharePoint Server 2007 的服务器上的 Web 部件页。
导入 Web 部件
-
导航到 SharePoint 网站上希望可以在其中访问 Web 部件的页。
-
在 Web 部件页中,单击“网站操作”,并选择“网站设置”。
-
在“网站设置”页上,单击“库”标题下的“Web 部件”。
-
在 Web 部件库中的工具栏上,单击“上载”。
-
在“上载 Web 部件”页上,单击“浏览”并选择所创建的
.dwp
文件。注意: 该文件应位于
C:\inetpub\wwwroot\wss\VirtualDirectories\PortNumber\bin\
中。单击“确定”。
-
导航回 Web 部件页。在 Web 部件页中,单击“网站操作”,然后选择“编辑网页”。
-
在您的首选区域中,单击“添加 Web 部件”,并在对话框中选中“My Simple Web Part”旁边的框。单击“添加”。
-
在该区域中添加 Web 部件后,在文本框中键入一些文本,然后单击“Set Web Part Title”以测试 Web 部件。
摘自:http://technet.microsoft.com/zh-cn/library/ms452873(v=office.12).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-3