使用SharePoint API来操作文件,列表对象时,都会用到更新的方法,SharePoint中在更新SPListItem有3个方法:
Updates the database with changes that are made to the list item. (Overrides SPItem.Update().) |
|
Updates the database with changes made to the list item without changing the Modified or Modified By fields. |
|
Updates the item without creating another version of the item. |
在微软的API文档上简单的解释了一下,但是实际在开发的使用中发现这几个API里面的问题有很多,因此工作这些年也遇到了很多坑,这里总结一下,并且对这些API做一些详细的说明。
微软的解释是把对当前SPListItem的更改更新到数据库中,这里面更详细的说明下:
SPListItem splitemitem = list.GetItemById(1); splitemitem["ColumnName"] = "TestValue"; splitemitem.Update();
SPList list = web.GetList("/lists/announcements"); SPListItemCollection items = list.Items; SPListItem item = items.Add(); item[SPBuiltInFieldId.Title] = "A new item!"; item[SPBuiltInFieldId.Body] = "This item was added by a call to the Add method."; item[SPBuiltInFieldId.Expires] = DateTime.Now.AddHours(1); item.Update();
使用Update会产生新的版本,因此UpdateOverwriteVersion方法可以避免这个问题:
SPListItem splitemitem = list.GetItemById(1); splitemitem["ColumnName"] = "TestValue"; splitemitem.UpdateOverwriteVersion();
使用上面两个方法都会更改变当前SPLitemItem的Modified和ModifiedBy信息,因此需要SystemUpdate这个方法。
SPListItem splitemitem = list.GetItemById(1); splitemitem["ColumnName"] = "TestValue"; splitemitem.SystemUpdate();
但是在真正的使用过程中,会有一些特殊情况,会影响到上述API的行为,比如在开启了Content Approval功能后,Approved状态的文件一旦被修改,就会增长一个版本。如果文件被签出,使用Update也不会有问题。因此实际在使用中需要根据具体情况来看。
原文:http://www.cnblogs.com/myprogram/p/4246603.html