前言:使用過SharePoint的人都知道,SharePoint對於操作是便捷的,但是對於數據量承載卻是不令人滿意的,這樣,就要求我們需要更加合理的使用,規范大家的使用規則和習慣,所以,定期清理不必要的文檔也就成為了一個問題。
考慮到這一點,我覺得寫一個小工具,用來實現文檔歸檔,是比較方便的辦法。當然,如果你願意,可以封裝為TimerJob或者Windows Service都是沒有問題的,甚至於Windows計划任務也都是可行的,只要你願意。
一、 界面設計:
如上圖,首先需要輸入下載文檔需要的用戶名、密碼、域的名字,否則我們是沒有權限下載文檔的;
然后是站點地址,打開SPSite,會同時加載出來所有的SPWeb;
然后選擇我們需要的SPWeb,會自動加載出來所有的文檔庫;
選擇我們需要的文檔庫,選擇日期,早於這個日期的所有文檔,都在歸檔的范圍內;
勾選自動刪除已歸檔文檔,這樣會刪除已經下載到指定路徑的文檔,並且不會出現在回收站。
二、 設計思路:
很簡單的思路,大神勿噴,感謝!
基於SharePoint 2010 Server版本,服務器端對象模型,需要運行在服務器上。
通過服務器端對象模型,獲取所有的SPListItem集合,通過WebClient對象,把所有早於歸檔日期的文檔下載下來,然后Item.Delete()掉已經下載了的文檔,當然,只是為了完成歸檔的任務,沒有太豐富的功能。
如果不刪除文檔庫的文檔,也可以使用它來下載文檔庫的文檔,感覺比在Windows資源管理器里打開,進行復制粘貼的速度要快一些。
三、 部分代碼:
批量刪除部分的代碼,沒有通過Caml語句篩選,可能有些很X很暴力,還請見諒,需要的話,可以優化。
SPList list = web.Lists[ListID]; SPListItemCollection itemcoll = list.Items; string strURL = string.Empty; int maxNum = itemcoll.Count; progressBarBackUp.Maximum = maxNum; for (int i = maxNum - 1; i >= 0; i--) { try { if (Convert.ToDateTime(itemcoll[i]["Created"].ToString()) > Convert.ToDateTime(dateTimePicker1.Text))//可以優化~~~~~~~~~ { continue; } strURL = web.Url + "/" + itemcoll[i].Url; BackUpDoc(strURL); if (cbAutoDel.Checked) { itemcoll[i].Delete(); //itemcoll[i].Update(); } } catch { } progressBarBackUp.Value ++; }
|
如下,下載文檔的方法,通過URL下載文檔到指定路徑;
Ø public void BackUpDoc(string url) Ø { Ø try Ø { Ø string strFileName = string.Empty; Ø int l1 = url.LastIndexOf('/'); Ø strFileName = "/" + url.Substring(l1, url.Length - l1); Ø NetworkCredential nc = new NetworkCredential(tbUserName.Text, tbPassWord.Text, tbDomain.Text); Ø WebClient wc = new WebClient(); Ø wc.Credentials = nc; Ø byte[] file = wc.DownloadData(url); Ø File.WriteAllBytes(tbSavePath.Text + strFileName, file); Ø } Ø catch Ø { Ø } Ø } |
四、 功能演示
首先,我在文檔庫<知識積累>里面,批量上傳一些文檔,因為是測試,都是一些比較亂七八糟的文檔,莫見怪~~~O(∩_∩)O~
然后,打開工具,輸入用戶名、密碼、域名;輸入網站地址,打開網站;選擇站點,選擇文檔庫;選擇時間,點擊歸檔,運行如下圖:
如下圖,都已經下載到桌面上的ls文件夾中了
查看原來的文檔庫,刷新看一下,如下圖:
查看回收站,也沒有我們刪除的文檔,如下圖:
工具下載地址:http://files.cnblogs.com/jianyus/DocLibBackUpTool.rar
后記:隨便寫一個練手的工具,有興趣的可以看看,大神勿噴~~最近有點怕怕了,都不敢寫東西了,其實,本意就是分享~~有交流的可以留言,或者加入我的SharePoint QQ群,大家一起交流~~