在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"