首页 > 代码库 > SharePoint API 中SPListItem的更新
SharePoint API 中SPListItem的更新
使用SharePoint API来操作文件,列表对象时,都会用到更新的方法,SharePoint中在更新SPListItem有3个方法:
Update | Updates the database with changes that are made to the list item. (Overrides SPItem.Update().) |
SystemUpdate() | Updates the database with changes made to the list item without changing the Modified or Modified By fields. |
UpdateOverwriteVersion | Updates the item without creating another version of the item. |
在微软的API文档上简单的解释了一下,但是实际在开发的使用中发现这几个API里面的问题有很多,因此工作这些年也遇到了很多坑,这里总结一下,并且对这些API做一些详细的说明。
Update方法
微软的解释是把对当前SPListItem的更改更新到数据库中,这里面更详细的说明下:
- 用来更新属性,此API可以更新属性,但是更新后Modified会变成当前时间和ModifiedBy为当前用户。如果开启了版本控制,会生成一个新的版本。
SPListItem splitemitem = list.GetItemById(1);splitemitem["ColumnName"] = "TestValue";splitemitem.Update();
- 用来添加SPLitemItem,这种情况必须要用这个方法。
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();
UpdateOverwriteVersion
使用Update会产生新的版本,因此UpdateOverwriteVersion方法可以避免这个问题:
SPListItem splitemitem = list.GetItemById(1);splitemitem["ColumnName"] = "TestValue";splitemitem.UpdateOverwriteVersion();
SystemUpdate
使用上面两个方法都会更改变当前SPLitemItem的Modified和ModifiedBy信息,因此需要SystemUpdate这个方法。
SPListItem splitemitem = list.GetItemById(1);splitemitem["ColumnName"] = "TestValue";splitemitem.SystemUpdate();
但是在真正的使用过程中,会有一些特殊情况,会影响到上述API的行为,比如在开启了Content Approval功能后,Approved状态的文件一旦被修改,就会增长一个版本。如果文件被签出,使用Update也不会有问题。因此实际在使用中需要根据具体情况来看。
SharePoint API 中SPListItem的更新