将自定义属性添加到可通过代码获得的站点

时间:2010-01-13 16:08:48

标签: web-parts wss wss-3.0

我被要求做一些事情,我对Sharepoint的开发和定制非常陌生,所以有点不确定如何去做,或者甚至可能。简介是创建一个Web部件,显示当前站点的子站点列表,我已经乱搞并创建了一个Web部件来执行此操作。

问题的第二部分是这个列表需要被过滤但是它当前的活动状态以及它是什么类型的站点,这意味着我只想显示属于Work Projects类型的Active Projects。是否有可能为sharepoint中的站点创建这样的属性,以及如何访问它们以执行某种形式的过滤,可能只需使用foreach循环或使用LINQ,我只是有点困惑我怎么去这个,我正在努力找到真正具体的东西。

谢谢,

罗布

1 个答案:

答案 0 :(得分:1)

这是可能的。 SPWebApplicationSPWeb对象都有一个所谓的“Property Bag”。此属性包可分别通过所提及对象中的PropertiesAllProperties访问。 SPWebApplicationSPPersistedObject,它继承了属性包。

您可以通过代码(以及通过SharePoint Designer为SPWeb对象)将值存储在此属性包中。属性包只能由系统帐户访问,因此访问属性包的任何代码都应该被SPSecurity.RunWithElevatedPrivileges块包围:

SPSecurity.RunWithElevatedPrivileges(delegate {
  // value can be any object, 
  // but I recommend sticking to primitive types like string, int etc. only
  SPContext.Current.Site.RootWeb.Properties[key] = value;
  SPContext.Current.Site.RootWeb.AllProperties[key] = value;
  SPContext.Current.Site.RootWeb.Update();
  SPContext.Current.Site.RootWeb.Properties.Update();
});

SPWeb对象同时具有aProperties和AllProperties属性。正如您所看到的,我更新了两个属性包,您可以在这篇关于属性包 here 的更深入的文章中阅读原因。

<强> P.S。

我在这里只提到SPWebApplication的完整性,你应该坚持使用SPWeb。我通常将值存储在一个地方,这就是当前的SPSite的RootWeb。