在SharePoint 2010中,网站元数据通常存储在哈希表SPWeb.AllProperties
中,可以通过新的SharePoint 2010 API进行访问和管理,如SPWeb.GetProperty
、SPWeb.AddProperty
、SPWeb.SetProperty
和SPWeb.RemoveProperty
。这些属性对于构建自定义组件时存储配置数据非常有用。
SharePoint提供了多种存储配置数据的方式,例如委托控件可以使用元素清单,Web部件可以使用.webpart
文件,全局配置可以使用web.config
、自定义SharePoint列表或SPFarm
、SPWebApplication
、SPSite
、SPWeb
和SPList
的属性包。虽然市面上有许多免费工具可以覆盖上述部分场景,但作者之前为SharePoint2007编写的工具升级到SharePoint 2010后,决定将其发布出来。
该工具仅限于在SPWeb
中存储自定义属性,因此用户需要是站点管理员,或者在顶级站点中使用它来存储全局配置数据,需要是站点集合管理员。它应该能够覆盖大多数使用案例。在SPFarm
或SPWebApplication
中存储属性风险更高,可能需要更高的访问权限,这在生产环境中可能不一定有,或者需要访问SharePoint 2010中央管理。
开发这个工具的挑战在于使界面与SharePoint的其他应用程序页面无缝对接。这意味着不仅要有相似的外观和感觉,还要有整个用户界面和后台的工作方式。
共有3个应用程序页面:MngSiteProperties.aspx
(管理页面)、AddSiteProperty.aspx
(添加页面)和EditSiteProperty.aspx
(编辑页面)。所有3个页面都继承自WebAdminPageBase
,并重写RequireSiteAdministrator
以返回true
。
UI元素尽可能使用内置的SharePoint元素进行渲染。使用的元素包括用户控件ToolBar.ascx
、ToolBarButton.ascx
、InputFormSection.ascx
、InputFormControl.ascx
、ButtonSection.ascx
和自定义控件SPGridView
和InputFormTextBox
。
所有UI字符串都存储在资源文件中。应用程序页面中使用的UI字符串存储在应用程序全局资源文件QuestechSiteProperty.resx
中。该文件在Visual Studio 2010中的Deployment Type
设置为AppGlobalResource
。
在MngSiteProperties.aspx
中,站点属性列表在SPGridView
中渲染,并包裹在UpdatePanel
中,将在下一点中解释更多。使用ItemTemplate
渲染到编辑页面的超链接,将属性名称作为查询字符串传递。必须小心对属性名称进行URL编码,因此不能使用HyperLinkField
。
使用新的SharePoint模态对话框机制启动添加和编辑操作,具体是函数SP.UI.ModalDialog.commonModalDialogOpen
。编写了一个回调函数,在添加或编辑操作成功完成后手动刷新UpdatePanel
。或者可以使用SP.UI.ModalDialog.RefreshPage
,但这会刷新整个页面,并使用表单提交!
通常在使用SharePoint模态对话框时,应在新的SharePoint客户端API中编写服务器逻辑,或者将其打包在WCF中。这允许在逻辑完成后轻松回调到启动器。但作者还没有准备好完全重写SharePoint 2007的代码。因此,在AddSiteProperty.aspx
和EditSiteProperty.aspx
的代码后台中的操作事件成功完成后,执行以下操作:
page.Response.Clear();
page.Response.Write(
String.Format(@"
", returnValue));
page.Response.End();
这将渲染SP.UI.ModalDialog.commonModalDialogClose
到浏览器,使其关闭当前对话框,并将returnValue
传递给启动器回调函数。
由于站点属性由SharePoint存储在哈希表中,属性值可能是对象而不仅仅是字符串。管理页面将使用ToString
列出属性值,但如果检测到属性值不是字符串,则编辑页面中的OK
按钮将被禁用,不允许编辑。
在编辑任何内置站点属性时要格外小心,除非知道自己在做什么。
应用程序页面通过站点功能QuestechSiteProperty
在Site Settings
中暴露。提供的Visual Studio 2010解决方案包括构建和部署此工具所需的所有支持文件,除了强名称密钥文件(key.snk
)。它充分利用了内置的SharePoint集成。不再需要第三方工具或自定义预构建和后构建脚本来构建SharePoint解决方案文件。
打开SharePoint2010管理外壳,使用Add-SPSolution
添加解决方案文件QuestechSiteProperty.wsp
,如下所示:
Add-SPSolution "C:\QuestechSystems.SiteProperty\bin\Release\QuestechSiteProperty.wsp"
或者使用stsadm
,添加解决方案文件QuestechSiteProperty.wsp
,如下所示:
stsadm -o addsolution -filename "C:\QuestechSystems.SiteProperty\bin\Release\QuestechSiteProperty.wsp"