[C#.NET][Sharepoint 2013] 封存檔案 - Enable In Place Records on Document Library
使用者情境:
- 當文件進入封存後,無法修改該檔案的任何屬性,包含內容,但能夠下載檔案
PS.CSOM 目前不支援 Records,所以在這裡使用的是 Server-Site Object Model
本文章節
啟用 『In Place Records Management』
如下步驟:
只有頂層網站有『In Place Records Management』,如下圖:
子網站若需要該功能,得自行啟用
開啟 Record,如下圖:
如下步驟:
成功之後,會看到圖示有一把鎖
重新整理畫面,鎖的圖示就會不見。
使用 Server API Declare Record & Undeclare Record
準備環境
- Install Sharepoint Foundation 2013
- Add Reference Microsoft.SharePoint.dll & Microsoft.Office.Policy.dll(Path:C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\15\ISAPI\Microsoft.Office.Policy.dll)
- Server-Side API:http://msdn.microsoft.com/en-us/library/cc768559.aspx
- 啟用 『In Place Records Management』
開發重點
- Declare Record:調用 Microsoft.Office.RecordsManagement.RecordsRepository.RecordRecords.DeclareItemAsRecord(SPListItem)
- Undeclare Record:調用 Microsoft.Office.RecordsManagement.RecordsRepository.RecordRecords.Records.UndeclareItemAsRecord(SPListItem)
- 調用 DeclareItemAsRecord(SPListItem) 或 UndeclareItemAsRecord(SPListItem) 時,必需要將整個 SPSite 釋放,才會讓第二次的命令生效
完整範例如下:
using Microsoft.Office.RecordsManagement.PolicyFeatures; using Microsoft.Office.RecordsManagement.RecordsRepository; using Microsoft.SharePoint; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace ConsoleApplication1 { internal class Program { private const string s_TopSite = @"http://sps2013"; private const string s_SubSite = @"/csomapi"; private const string s_List = @"Documents"; private const string s_FileName = @"myDoc.docx"; private static void Main(string[] args) { addFile(); recordFile(); unrecordFile(); } private static void addFile() { using (SPSite site = new SPSite(s_TopSite)) { using (SPWeb web = site.OpenWeb(s_SubSite)) { SPFolder list = web.Lists[s_List].RootFolder; FileStream fileStream = File.OpenRead(s_FileName); SPFile file = list.Files.Add(s_FileName, fileStream, true); file.Update(); } } Console.WriteLine("addFile 按任意鍵繼續"); Console.Read(); } private static void recordFile() { using (SPSite site = new SPSite(s_TopSite)) { using (SPWeb web = site.OpenWeb(s_SubSite)) { var list = web.Lists[s_List].RootFolder; var files = list.Files; foreach (SPFile file in files) { var item = file.Item; Console.WriteLine(item.Name); if (item.Name == s_FileName) { Console.WriteLine("IsRecord: " + Records.IsRecord(item)); Console.WriteLine("IsLocked: " + Records.IsLocked(item)); if (!Records.IsRecord(item)) { Records.DeclareItemAsRecord(item); file.Update(); Console.WriteLine("Record Finish"); } break; } } } } Console.WriteLine("addFile 按任意鍵繼續"); Console.ReadKey(); } private static void unrecordFile() { using (SPSite site = new SPSite(s_TopSite)) { using (SPWeb web = site.OpenWeb(s_SubSite)) { var list = web.Lists[s_List].RootFolder; var files = list.Files; foreach (SPFile file in files) { var item = file.Item; Console.WriteLine(item.Name); if (item.Name == s_FileName) { Console.WriteLine("IsRecord: " + Records.IsRecord(item)); Console.WriteLine("IsLocked: " + Records.IsLocked(item)); if (Records.IsRecord(item)) { Records.UndeclareItemAsRecord(item); file.Update(); Console.WriteLine("Unrecord Finish"); } break; } } } } Console.WriteLine("unrecordFile 按任意鍵繼續"); Console.ReadKey(); } } }
本文出自:http://www.dotblogs.com.tw/yc421206/archive/2014/06/09/145460.aspx
若有謬誤,煩請告知,新手發帖請多包涵
Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET