SharePoint Web部件开发指南
1. Silverlight Web部件
创建Silverlight Web部件时,无需编写大量自定义代码,因为微软发布了项目扩展,其中包含Web部件模板。可从MSDN代码库(http://code.msdn.microsoft.com/vsixforsp )下载该扩展及相关文档。
Silverlight Web部件能为最终用户提供更丰富的用户界面,提升用户体验。它可作为沙盒解决方案部署,可使用自定义Web部件或开箱即用的SharePoint Silverlight Web部件。若想深入了解Silverlight Web部件,可访问www.silverlight.net 。
2. Web部件连接
在SharePoint Server中,业务数据列表Web部件和业务数据相关列表Web部件是连接的Web部件示例。例如,我们希望在业务数据列表Web部件中显示客户列表,在业务数据相关列表Web部件中显示所选客户的订单,这两个Web部件需通过Web部件连接进行通信。
Web部件连接有静态和动态两种类型。静态连接用于其中一个Web部件不在Web部件区域的情况,需编写非ASP.NET Web部件,超出了本文范围。动态连接可使用ASP.NET Web部件创建,下面将详细介绍。
在一对连接的Web部件中,一个是提供者,另一个是消费者,类似于主/详细关系。要实现两个Web部件之间的动态连接,它们需要有一个公共接口进行通信,并且连接本身需要分配ConnectionProvider和ConnectionConsumer属性。
以下是创建连接Web部件的具体步骤:
1.
创建项目
:打开Visual Studio,创建一个新的空SharePoint项目,命名为ConnectedWebParts。在SharePoint自定义向导中选择“作为场解决方案部署”,因为SharePoint不允许在沙盒解决方案中使用Web部件连接。
2.
实现接口
:右键单击项目ConnectedWebParts,选择“添加” -> “新建项”。在“添加新项”对话框中,选择“已安装模板”下的“代码”,在主区域选择“接口”,命名为“IAuthorProvider”。在该接口中,提供一个名为AuthorName的只读字符串属性。
Listing 9-14: IAuthorProvider Interface
" &)
.
:
)
(" : 4=
=
- 创建提供者Web部件 :右键单击项目ConnectedWebParts,选择“添加” -> “新建项”,选择SharePoint 2010下的Web部件模板,命名为AuthorProviderWebPart。实现代码如下:
Listing 9-15: Implementation of the AuthorProviderWebPart
+")
.
7 +."
7 +."
N1
7 +."
&)
.
:
3
3
9$+
)
4
1
" 11
;<
:
+
)
93
3
9$;<4
+
)
& ); 9$& ;M
<<4
+
)
& ); 9$& ;
<<4
+
)
& ); 9$& ;.
<<4
+
)
)
.
M"8
4
1
);+
)
<4
=
+
)
("
:
:
+
)
- H" 4=
=
在AuthorProviderWebPart类中,创建一个新的下拉列表对象,在CreateChildControls方法中实例化并添加值,将AutoPostBack属性设置为true,最后将下拉列表对象添加到Controls集合中。实现AuthorName只读属性,返回下拉列表中当前所选项目的文本。创建提供者连接点,创建一个返回IAuthorProvider接口的方法,并添加ConnectionProvider属性。
4.
创建消费者Web部件
:右键单击项目ConnectedWebParts,选择“添加” -> “新建项”,选择SharePoint 2010下的Web部件模板,命名为AuthorConsumerWebPart。实现代码如下:
Listing 9-16: Implementation of the AuthorConsumerWebPart
+")
1
7 +."
7 +."
:
"
("
*4
1
7 +."
&)
.
)
.
4
$"+ +# 4
1
" 11
;<
:
+# 9$"+ ;<4
+# % (
)
4
1
);+# <4
=
>.
#
; )
<
:
;)
.
Q<
"
(" )
.
)
(" 4
=
#
1
;R% 7
9
<
:
;"
(" Q-
*<
:
+# % "
(" A
+
8-"
.
C3
A
9H"-
CA
;5
(%3
-
<4
=
+" #
1
;9
<4
=
?1
1
;)
(" <@
+I .
&
"
;1
7 +."
&)
.
"
<
:
)
.
"
4
=
=
在AuthorConsumerWebPart类中,创建一个名为authorName的字符串并初始化为空字符串,用于存储提供者Web部件下拉框中所选的作者姓名。创建一个对象来存储IAuthorProvider接口的实例,以及一个标签用于显示所选作者的姓名和附加字符串。在CreateChildControls方法中,实例化标签并将文本设置为“未选择作者”。重写OnPreRender方法,在连接建立后检索所选作者的姓名并赋值给authorName字段。在RenderContents方法中设置标签的新值。最后,实现GetProviderInterface方法,接受一个IAuthorProvider类型的对象并将其分配给AuthorProvider对象,添加ConnectionConsumer属性。
部署并测试Web部件:右键单击项目ConnectedWebParts,选择“部署”。部署成功后,在浏览器中打开Web部件页面,添加AuthorProviderWebPart和AuthorConsumerWebPart。初始时,消费者Web部件显示“未选择作者”。通过Web部件菜单中的“连接”选项,选择“发送作者姓名到”,将两个Web部件连接起来,此时消费者Web部件将显示正确的标签。
3. Web部件配置
3.1 连接字符串
在开发Web部件时,可能需要从数据库或REST和SOAP服务中显示数据,这需要存储连接字符串或服务端点的URL。
对于场解决方案,可以将连接字符串存储在与农场解决方案关联的web.config文件中。具体步骤如下:
1. 打开Windows资源管理器,浏览到C:\inetpub\wwwroot\ 文件夹,找到WSS文件夹。
2. 打开WSS文件夹下的VirtualDirectories文件夹,找到代表测试环境的Web应用程序文件夹(如80)。
3. 打开该文件夹下的web.config文件,在
和
之间添加connectionStrings部分。示例如下:
Listing 9-17: connectionStrings Section
!-"
.
-
"" 5*1
-
-
3""
-
(" 4&"
1""
3
3M4.
-
*&
%
46
&3
(" 4."9
"9
4!
!
-
* 9 +
在生产环境中,应加密连接字符串中的密码,可参考http://msdn.microsoft.com/en-us/library/ms178372.aspx 。在Web部件运行时,可使用System.Web.Configuration命名空间中的WebConfigurationManager对象及其ConnectionStrings集合来访问连接字符串。
另一种添加连接字符串的方法是使用SPWebConfigModification类在功能事件接收器中自动修改SharePoint web.config文件。示例代码如下:
Listing 9-18: Code for Adding a Connection String to the connectionStrings Section
in the web.config
+
0 "
)" ;
-.0 "
#
.
<
:
-.7 +-
*-
-.7 +-
1
-
4
-.7 +1
5
"
*5
"
9-.7 +1
5
"
;<4
*5
"
."
"
!
-
4
*5
"
(" "?Z" O5*1
-
O@A
?Z
-
O3""-
(" 4A
&"1""
3
3M4A
.
-
*&
%
4A
6
&3
(" 4."9
"9
4O@4
*5
"
- 2 4
*5
"
>9
62 >9
4
*5
"
%* -.7 +1
5
"
-.7 +1
5
"
%*
1(
4
*5
"
H" "" O5*1
-
OA
-
O3""-
(" 4A
&"1""
3
3M4A
.
-
*&
%
4A
6
&3
(" 4."9
"9
4O!4
*-
7 +1
5
"
);*5
"
<4
*-
6" ;<4
*-
)*7 +1
5
"
;<4
=
要访问web.config并进行更新,首先需要获取当前的Web应用程序。创建SPWebService对象,它是SharePoint农场中所有Web应用程序的容器。然后创建SPWebConfigModification对象,设置Path属性为XPath表达式以定位要修改或创建的节点(此处为connectionStrings部分节点),设置Name属性为要修改或创建的属性或部分节点的名称(如connectionString),Sequence属性设置为0,Owner属性设置为唯一字符串(如UniqueOwner)。将修改类型设置为EnsureChildNode,Value属性包含连接字符串的实际值。将修改对象添加到服务对象的WebConfigModifications集合中,调用Update方法保存状态并将更改传播到农场中的所有机器,最后调用ApplyWebConfigModifications方法将web.config修改列表应用到该Web服务中的所有Web应用程序。
3.2 代码访问安全(CAS)
代码访问安全为代码执行的操作和可访问的资源提供了安全模型,在Web部件中,它限制或允许Web部件程序集执行的操作。
沙盒解决方案无法使用上述存储连接信息的方法,因为沙盒解决方案无法访问web.config文件,且不需要存储连接信息,因为它不允许引用Web服务或访问数据库。
使用代码访问安全的原因是,沙盒解决方案权限有限,而场解决方案部署到GAC后以完全信任模式运行,不符合许多公司的安全策略。因此,可使用代码访问安全在完全信任的场解决方案和低信任的沙盒解决方案之间找到平衡。
以下是一个简单的示例:
1.
创建项目
:在Visual Studio中创建一个新的空SharePoint项目,命名为“CASWebPart”,在SharePoint自定义向导中选择“作为场解决方案部署”。
2.
添加Web部件
:添加一个新的仅代码Web部件项(非可视化Web部件),命名为“CASWebPart”,并添加以下代码:
Listing 9-19: Code for CASWebPart
+"1)-7 +."
7 +."
:
1
" 11
;<
:
$"+ +(" 9$"+ ;<4
-.6
-.1
1
7 +1
6
4
+(" % R
A
$
(" 4
1
);+(" <4
=
=
默认情况下,项目会将Web部件程序集部署到GAC。若将项目的Assembly Deployment Target属性更改为WebApplication,部署时会出现安全异常,因为程序集不再具有完全信任权限。
解决方法有两种:一是增加服务器场在web.config文件中的整体信任级别,但这存在较高安全风险,不推荐;二是为Web部件创建自定义信任级别。
在Visual Studio中,双击Package.package项打开包设计器,点击“清单”选项卡,展开“编辑”选项。在包设计器清单选项卡底部的文本框中粘贴以下XML代码:
Listing 9-20: Code for CASWebPart
1
) -
*
.
*&
.
- "(" .
-
3
.
1)-7 +."
&.
")( R
.
$ 5"!
&.
"-
*.
0"
N1
.
"N
1
)3
"N1
3
".
*N
1
N1
%
"!
&.
"5
-"
.
-
*-"
.
.
N
5
-"
.
-
*N
H
'N
1
"N
.+Y *%
8 E G+ G'CG
>+/ 5
%
!
&.
"-* -
*.
.
N
+NH
CN
1
"N
.+Y *%
8 +EE"DDLGF' G
# "6
(" !
!.
-
) +
) +*(" 1)-7 +."
!
!) +
!.
*&
!1
) -
*
该代码为CAS Web部件创建了一个命名的权限集,提供了常见的SharePoint应用程序权限,如AspNetHostingPermissions、SecurityPermissions、SharePointSecurityPermission和SystemSecurityPermission。同时,添加了一个Assemblies元素和一个Assembly元素,将Name属性设置为Web部件的名称“CASWebPart”,以告诉SharePoint将指定的权限应用到该Web部件。
部署并测试Web部件,右键单击项目CASWebPart,选择“部署”,部署后测试Web部件,此时它将从Web应用程序的bin目录成功运行。
需要注意的是,Visual Studio 2010的第一个版本存在一个bug,会阻止用户部署添加了CAS策略的SharePoint工件(如Web部件)。可通过创建自定义目标文件来解决该问题,具体可参考知识库文章2022463(http://support.microsoft.com/default.aspx?scid=kb;en-US;2022463 )。
综上所述,通过本文的介绍,我们了解了Silverlight Web部件、Web部件连接、Web部件配置以及代码访问安全等方面的知识和实现方法,希望这些内容对您的SharePoint Web部件开发有所帮助。
SharePoint Web部件开发指南
4. 总结与回顾
在前面的内容中,我们详细探讨了SharePoint Web部件开发的多个重要方面,下面通过一个表格来总结这些关键内容:
| 开发内容 | 要点概述 | 操作步骤 |
| — | — | — |
| Silverlight Web部件 | 无需大量自定义代码,可提升用户体验,可作为沙盒解决方案部署 | 从MSDN代码库下载扩展及文档,可使用自定义或开箱即用的Web部件,深入了解可访问www.silverlight.net |
| Web部件连接 | 分为静态和动态连接,动态连接使用ASP.NET Web部件,通过公共接口和特定属性实现 | 1. 创建项目并选择场解决方案部署;2. 实现接口;3. 创建提供者和消费者Web部件;4. 部署并测试 |
| Web部件配置 - 连接字符串 | 场解决方案可将连接字符串存储在web.config文件中 | 1. 找到web.config文件;2. 添加连接字符串;3. 运行时访问;也可使用SPWebConfigModification类自动修改 |
| Web部件配置 - 代码访问安全(CAS) | 为代码操作和资源访问提供安全模型,可在不同信任级别间平衡 | 1. 创建项目并部署到场解决方案;2. 添加Web部件代码;3. 更改部署属性可能出现安全异常,可创建自定义信任级别解决 |
5. 开发流程可视化
下面通过mermaid格式的流程图来展示Web部件开发的整体流程:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;
A([开始开发]):::startend --> B{选择开发类型}:::decision
B -->|Silverlight Web部件| C(下载扩展及文档):::process
B -->|Web部件连接| D(创建项目并选择部署方式):::process
B -->|Web部件配置| E{配置类型}:::decision
E -->|连接字符串| F(存储到web.config):::process
E -->|代码访问安全| G(创建项目并部署):::process
C --> H(开发并部署):::process
D --> I(实现接口):::process
I --> J(创建提供者和消费者Web部件):::process
J --> K(部署并测试):::process
F --> L(运行时访问):::process
G --> M(添加Web部件代码):::process
M --> N(处理安全异常):::process
N --> O(创建自定义信任级别):::process
O --> P(部署并测试):::process
H --> Q([开发完成]):::startend
K --> Q
L --> Q
P --> Q
6. 常见问题及解决方案
在SharePoint Web部件开发过程中,可能会遇到一些常见问题,下面为您列举并提供解决方案:
-
问题1:沙盒解决方案无法使用Web部件连接
-
原因
:SharePoint不允许在沙盒解决方案中使用Web部件连接。
-
解决方案
:将项目部署为场解决方案。
-
问题2:更改部署属性后出现安全异常
-
原因
:程序集从GAC部署到Web应用程序的bin目录后,不再具有完全信任权限。
-
解决方案
:一是增加服务器场在web.config文件中的整体信任级别,但存在较高安全风险,不推荐;二是为Web部件创建自定义信任级别。
-
问题3:Visual Studio 2010无法部署添加了CAS策略的Web部件
-
原因
:Visual Studio 2010的第一个版本存在bug。
-
解决方案
:创建自定义目标文件,具体可参考知识库文章2022463(http://support.microsoft.com/default.aspx?scid=kb;en-US;2022463 )。
7. 未来展望
随着SharePoint技术的不断发展,Web部件开发也将迎来更多的机遇和挑战。未来可能会有更便捷的开发工具和框架出现,进一步简化开发流程,提高开发效率。同时,安全性也将成为更加重要的关注点,代码访问安全等机制将不断完善,以应对日益复杂的安全威胁。开发者需要持续关注技术动态,不断学习和掌握新的知识,才能在SharePoint Web部件开发领域保持领先地位。
通过本文,我们全面了解了SharePoint Web部件开发的各个方面,从Silverlight Web部件的创建到Web部件连接的实现,再到Web部件配置和代码访问安全的处理,希望这些内容能帮助您在实际开发中更加得心应手,开发出高质量的Web部件。
SharePoint Web部件开发全攻略
超级会员免费看
17

被折叠的 条评论
为什么被折叠?



