令我对SharePoint2007感到困惑的一件事是,显然无法具有专门应用于网站或网站集本身的可定义设置,而不是内容。我的意思是,你有一些预定义的设置,如网站标识,网站名称和其他各种东西,但似乎没有任何地方可以添加新的设置。
我正在处理的应用程序需要能够创建多种“项目网站集”,这些集合都遵循基本模板,但具有一些专门适用于该网站集的附加设置。除了标准站点名称,我们还需要定义项目编号,项目名称和客户端名称。鉴于我们的一些客户的要求,我们也达到了一个点,我们必须有可配置的设置来改变一些工作流的工作方式,比如文件是用字母还是数字标记。
我们当前的解决方案,我犹豫不决,一直是在SharePoint服务器上存储XML文件。此文件包含每个网站集的一个节点,由根网站的URL标识。节点内部是需要为该网站集定义的所有元素。当我们需要它们时,我们必须每次加载XML文件(它总是需要SPSecurity.RunWithElevatedPrivileges来访问服务器上的文件)来加载它并检索数据。有很多自动化过程必须这样做,当我们到达数百个拥有数万个运行数万个工作流的文件的网站时,我对这种方法的稳定性犹豫不决,他们都希望访问这个文件。也许他们是毫无根据的担忧,但我担心的是,而不是冒险在几年内破坏一切。
我正在查看SPWeb对象并找到AllProperties
哈希表。它看起来就像可能有用的那种东西,但我不知道修改它有多安全。我阅读了MSDN和WSS SDK,但没有发现在向AllProperties
添加全新属性时澄清的内容。将AllProperties
用于此类事情是否安全?或者还有另一个我缺少的功能,它可以处理网站集或网站范围内的全局变量的概念吗?
答案 0 :(得分:5)
建议的方法是使用PropertyBag(键/值对)通过SPFarm的.Properties,SPWeb.RootWeb(用于网站集),SPWeb,SPList等(取决于您需要的范围)。 / p>
MSDN - Managing Custom Configuration Options for a SharePoint Application
作为
的一部分,可以使用生产就绪代码MSDN - The SharePoint Guidance Library
请参阅Hierarchical configuration manager
这使您可以以编程方式访问这些值。如果您想在不使用指导库的情况下执行此操作,则可以使用类似以下代码的内容。
SPWeb web = SPContext.Current.Web;
if (web.Properties.ContainsKey("MyProperty"))
string myProperty = web.Properties["MyProperty"];
如果您希望用户界面允许管理员轻松设置值,请使用SharePoint Designer(urghhhh!)或SharePoint Property Bag Settings
之类的内容答案 1 :(得分:1)
propertybag可用于存储键/值类型属性。我认为这意味着你的目的似乎是什么。
就个人而言,我更需要跨网站集属性(例如数据库连接字符串),并使用this来存储这些属性。
答案 2 :(得分:1)