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)