zoukankan      html  css  js  c++  java
  • Property Bags Object Model中的小“陷阱”

    今天在调试一个SharePoint程序的时候,发现一个Bug。SharePoint 2007中对SPWeb、SPFolder、SPListItem都提供了一个方便的Property Bags特性,用来存放一些自定义的属性信息,就像这样:

    SPListItem item = ...;
    item.Properties["MyProp1"] = "PropValue1";
    item.Properties["MyProp2"] = "PropValue2";
    item.Update();


    我发现的Bug是,有一些存放在SPWeb.Properties中的自定义属性,没有正确的保存到Content Database中。仔细检查了一下,发现了原因所在。这个小问题确实容易成为一个代码中的“陷阱”,所以提醒一下大家。

    SPFolder、SPListItem的Property Bags(即SPFolder.Properties / SPListItem.Properties)都是直接使用一个Hashtable来实现的,当我们调用SPFolder.Update()或SPListItem.Update()时,就能把它们的Property Bags里面的数据也写回到Content Database。

    但是,SPWeb.Properties是通过一个定制的SPPropertyBag类(继承自System.Collections.Specialized.StringDictionary)来实现的,通过调用SPWeb.Update()并不会将Property Bags中的数据写回到Content Database,而是需要调用SPPropertyBag.Update()方法。示例:

    SPWeb web = SPContext.Current.Web;
    web.Properties["MyProp1"] = "PropValue1";
    web.Properties.Update();


    我不知道为什么它们有这样的设计区别,但个人猜测最大的可能,是SPFolder/SPListItem和SPWeb的实现不是一个Developer写的,写SPFolder/SPListItem的Developer想了一下,觉得使用一个简单的Hashtable就足够了,而写SPWeb的Developer则觉得应该专门定义一个SPPropertyBag类,这样整个项目中不同的需要使用Property Bags特性的类都可以重用这个SPPropertyBag。可惜,就像那句老话说的:“开发人员精心设计用来重用的东东,90%的可能都不会有被重用的可能”... :)

  • 相关阅读:
    自相关函数 互相关函数 平稳随机过程
    MC323发短信程序+MSP430F149
    labview notes
    DSSS FHSS
    dBm与功率(w)换算关系!
    int 正负相乘
    51单片机 1602液晶显示
    51单片机 AD转换
    51单片机 蜂鸣器
    51单片机 串口通信
  • 原文地址:https://www.cnblogs.com/kaneboy/p/2436952.html
Copyright © 2011-2022 走看看