在SharePoint网站中存储网站级全局变量的正确方法是什么?

Gra*_*ote 6 sharepoint global-variables sharepoint-2007 wss-3.0

令我对SharePoint2007感到困惑的一件事是,显然无法获得专门适用于网站或网站集本身的可定义设置,而不是内容.我的意思是,您有一些预定义的设置,如站点徽标,站点名称和各种其他东西,但似乎没有任何地方可以添加新类型的设置.

我正在处理的应用程序需要能够创建多种"项目网站集",这些集合都遵循基本模板,但具有一些特定于该网站集并且仅适用于该网站集的其他设置.除了标准站点名称,我们还需要定义项目编号,项目名称和客户端名称.鉴于我们的一些客户的要求,我们也达到了一个点,我们必须有可配置的设置来改变一些工作流的工作方式,比如文件是用字母还是数字标记的.

我当前的解决方案,我犹豫不决,一直是在SharePoint服务器上存储XML文件.此文件包含每个网站集的一个节点,由根网站的URL标识.节点内部是需要为该网站集定义的所有元素.当我们需要它们时,我们必须每次加载XML文件(它总是需要SPSecurity.RunWithElevatedPrivileges来访问服务器上的文件)来加载它并检索数据.有很多自动化过程必须这样做,当我们到达数百个拥有数万个运行数万个工作流的文件的网站时,我对这种方法的稳定性犹豫不决,他们都希望访问这个文件.也许他们是毫无根据的担忧,但我担心的是,而不是冒险在几年内破坏一切.

我正在查看SPWeb对象并找到了AllProperties哈希表.它看起来就像可能有用的那种东西,但我不知道修改它有多安全.我阅读了MSDN和WSS SDK,但没有发现任何有关添加全新属性的说明AllProperties.使用AllProperties这种东西是否安全?或者还有另一个我缺少的功能,它可以处理网站集或网站范围内的全局变量的概念?

Rya*_*yan 5

建议的方法是使用PropertyBag(键/值对)通过SPFarm的.Properties,SPWeb.RootWeb(用于网站集),SPWeb,SPList等(取决于您需要的范围).

MSDN - 管理SharePoint应用程序的自定义配置选项

有一个生产就绪代码作为一部分提供

MSDN - SharePoint指导库

请参阅分层配置管理器

这使您可以以编程方式访问这些值.如果您想在不使用指导库的情况下执行此操作,那么您将使用类似以下代码的内容.

SPWeb web = SPContext.Current.Web;
if (web.Properties.ContainsKey("MyProperty"))
   string myProperty = web.Properties["MyProperty"];
Run Code Online (Sandbox Code Playgroud)

如果您希望UI允许管理员轻松设置值,请使用SharePoint Designer(urghhhh!)或类似SharePoint Property Bag设置