需求:有兩個site collection admin權限的用戶user1和user2,user2刪除OtherUserDelete.txt文件,user1進行還原,其中user1的回收站裏面有兩個文件CurrentUserDelete.txt(user1刪除)和OtherUserDelete.txt(user2刪除),這裏只考慮first stage一級回收站的情況
dll引用:主要是調用Microsoft.SharepointOnline.CSOM中的Client api
問題:回收站分爲兩個,一個是End User的只有自己刪除的文件,另外一個是site collection級別的回收站,但是Web.Recyclebin裏面只能得到當前用戶刪除的文件,如下面代碼
using (ClientContext clientContext = new ClientContext("https://youserver"))
{
string pass = "yourpassword";
var securepassword = new SecureString();
foreach (char c in pass.ToCharArray())
{
securepassword.AppendChar(c);
}
clientContext.Credentials = new SharePointOnlineCredentials("[email protected]", securepassword);
var deletedItems = new List<RecycleBinItem>();
try
{
RecycleBinItem deletedItem = null;
Web web = clientContext.Site.RootWeb;
clientContext.Load(web);
clientContext.Load(web.RecycleBin, items => items.Include(
oItem => oItem.Title,
oItem => oItem.Id,
oItem => oItem.Author,
oItem => oItem.DeletedBy,
oItem => oItem.DirName,
oItem => oItem.DeletedDate
));
clientContext.ExecuteQuery();
var recycleBinItems = web.RecycleBin;
for (int i = recycleBinItems.Count; i > 0; i--)
{
RecycleBinItem item = recycleBinItems[i - 1];
deletedItems.Add(item);
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
1.通過Web.GetRecycleBinItemsByQueryInfo(RecycleBinQueryInformation query)拿到回收站所有的文件,其中屬性 ShowOnlyMyItems要設置爲false才能拿到其他用戶刪除的文件
RecycleBinQueryInformation queryInformation = new RecycleBinQueryInformation
{
ShowOnlyMyItems = false
};
var recycleBinItems = web.GetRecycleBinItemsByQueryInfo(queryInformation);
clientContext.Load(recycleBinItems, items => items.Include(
oItem => oItem.Title,
oItem => oItem.Id,
oItem => oItem.Author,
oItem => oItem.DeletedBy,
oItem => oItem.DirName,
oItem => oItem.DeletedDate,
oItem => oItem.DirNamePath
));
clientContext.ExecuteQuery();
foreach (RecycleBinItem item in recycleBinItems)
{
string guid = item.Id.ToString();
//你想要還原的文件guid
if (item.Id.ToString().Equals("424d868f-f08a-4f56-809b-37466d8c2f79"))
{
deletedItem = item;
item.Restore();
clientContext.ExecuteQuery();
break;
}
}
2.上面方法成功拿到user2刪除的文件,但是還原的時候出問題了,報錯:Value does not fall within the expected range.
3.解決辦法是通過RecycleBinItemCollection.GetById(Guid id)方法拿到想要還原的user2刪除的文件RecycleBinItem,然後進行還原就成功還原了
RecycleBinItem deletedItem = null;
Web web = clientContext.Web;
RecycleBinQueryInformation queryInformation = new RecycleBinQueryInformation
{
ShowOnlyMyItems = false
};
var recycleBinItems = web.GetRecycleBinItemsByQueryInfo(queryInformation);
clientContext.Load(recycleBinItems, items => items.Include(
oItem => oItem.Title,
oItem => oItem.Id,
oItem => oItem.Author,
oItem => oItem.DeletedBy,
oItem => oItem.DirName,
oItem => oItem.DeletedDate,
oItem => oItem.DirNamePath
));
clientContext.ExecuteQuery();
deletedItem =recycleBinItems.GetById(new Guid("yourfileid"));
clientContext.Load(deletedItem, w => w.DirName);
deletedItem.Restore();
clientContext.ExecuteQuery();