本文讲述SharePoint 2013/2010 在一个列表或文档库内移动列表项,文档和文件夹位置而保持last modify by 等系统字段保持不变的解决方案。
最近遇到客户一个需求,在一个列表或文档库内移动列表项,文档和文件夹位置而保持last modify by 等系统字段保持不变。
研究出来了,不敢独享,特此共享出来给同鞋们做参考:
using Microsoft.SharePoint;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MoveSPListItemTool
{
class Program
{
static void Main(string[] args)
{
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite site = new SPSite("http://SP2013/"))
{
site.AllowUnsafeUpdates = true;
using (SPWeb web = site.OpenWeb())
{
SPList list = web.Lists["Documents"];
var itemNeedToMove = list.GetItemById(7);
MoveItemTo(itemNeedToMove, "TestDocumentSet");
}
}
});
Console.WriteLine("Done!");
Console.ReadKey();
}
// Path 参数实例: Folder1, Folder1/Folder2
public static void MoveItemTo(SPListItem item, string path)
{
switch (item.FileSystemObjectType)
{
case SPFileSystemObjectType.Folder:
var newFolder = string.Format("{0}/{1}/{2}", item.ParentList.RootFolder.Url, path, item.Folder.Name);
item.Folder.MoveTo(newFolder);
break;
case SPFileSystemObjectType.File:
if (item.File == null)
{
var file = item.Web.GetFile(item.Url);
var newFilePath = string.Format("{0}/{1}/{2}_.000", item.ParentList.RootFolder.Url, path, item.ID);
file.MoveTo(newFilePath);
}
else
{
var file = item.Web.GetFile(item.Url);
var newFilePath = string.Format("{0}/{1}/{2}", item.ParentList.RootFolder.Url, path, item.File.Name);
file.MoveTo(newFilePath);
}
break;
}
}
}
}