首先说一下什么是记录管理:这里有详细的说明

在 网站设置-》网站集管理-》网站集功能 中启用 “现场记录管理”

启用现场记录管理后在 网站管理 中多了2个功能“内容管理器设置” 和“内容管理器规则”

选择一个列表的库设置-》记录声明设置:

然后再文档-》项目中会出现 申明记录

声明为记录后 默认是不能修改和删除, 如果要取消声明 也需要相应的代码

声明为记录后:

如果我们直接删除会有 声明后果了:

其实 文档的修改也有类似的情况。为什么会这样了?

让我们定位到 网站设置-》网站集管理-》记录声明设置:

1)声明记录和取消声明

声明记录方法: Records.DeclareItemAsRecord(item)

取消声明记录: Records.UndeclareItemAsRecord(item)

这里需要引用一些相关的DLL:

Microsoft.Office.DocumentManagement

Microsoft.Office.Policy

主要代码如下:

 private static void RecordTest(){using (SPSite site = new SPSite(siturl)){SPWeb web = site.RootWeb;SPList list = web.GetList(SharePointListURL);SPFolder folder = web.Folders[SharePointListURL];Stream fileStream = File.Open(filePath, FileMode.Open);SPFile file = list.RootFolder.Files.Add(fileSharePointURL, fileStream);SPListItem item = file.Item;file.Update();Console.WriteLine("In Place Records enabled: " + Records.IsInPlaceRecordsEnabled(site).ToString());//Declare the item as a record
                Records.DeclareItemAsRecord(item);//Make sure it declaredobject dateObject = item[Expiration.ExpirationDateFieldInternalName];if (dateObject == null){Console.WriteLine("Not declared!");}else{DateTime date = (DateTime)dateObject;Console.WriteLine("Declared Expiration Date: " + date.ToShortDateString() + " " + date.ToShortTimeString());//Also show if Record using IsRecordConsole.WriteLine("IsRecord: " + Records.IsRecord(item));//Could also use OnHold to check if on hold
                }//Undeclare the object
                Records.UndeclareItemAsRecord(item);web.Close();}}

2)创建保留计划

如果想在列表上创建一个保留策略,首先要检查列表手否有自定义策略,这个需要Microsoft.Office.RecordsManagement.InformationPolicy.ListPolicySettings对象的ListHasPolicy属性,,返回值表示列表是否具有自定义策略。要想将列表设置为使用一个自定义策略,只需要将UseListPolicy设置为true,然后调用update方法。主要代码如下:

  private static void PolicyList(){using (SPSite site = new SPSite(siturl)){SPWeb web = site.RootWeb;SPList list = web.GetList(SharePointListURL);SPFolder folder = web.Folders[SharePointListURL];SPWeb parentWeb = list.ParentWeb;SPList parentList = parentWeb.Lists[folder.ParentListId];ListPolicySettings listPolicySettings = new ListPolicySettings(parentList);string policyXml = @"<Schedules nextStageId='4' default='false'><Schedule type='Default'><stages><data stageId='1' recur='True' offset='6' unit='months'><formula id='Microsoft.Office.RecordsManagement.PolicyFeatures.Expiration.Formula.BuiltIn'><number>6</number><property>Created</property><period>months</period></formula><action type='action' id='Microsoft.Office.RecordsManagement.PolicyFeatures.Expiration.Action.DeletePreviousVersions' /></data><data stageId='2'><formula id='Microsoft.Office.RecordsManagement.PolicyFeatures.Expiration.Formula.BuiltIn'><number>6</number><property>Modified</property><period>months</period></formula><action type='action' id='Microsoft.Office.RecordsManagement.PolicyFeatures.Expiration.Action.Record' /></data></stages></Schedule><Schedule type='Record'><stages><data stageId='3'><formula id='Microsoft.Office.RecordsManagement.PolicyFeatures.Expiration.Formula.BuiltIn'><number>3</number><property>Created</property><period>years</period></formula><action type='action' id='Microsoft.Office.RecordsManagement.PolicyFeatures.Expiration.Action.Delete' /></data></stages></Schedule></Schedules>";if (!listPolicySettings.UseListPolicy){//Enable Location Based Policy if it isn't enabled listPolicySettings.UseListPolicy = true;listPolicySettings.Update();//Refresh to get the updated ListPolicySettingslistPolicySettings = new ListPolicySettings(parentList);}  listPolicySettings.SetRetentionSchedule(folder.ServerRelativeUrl, policyXml, "My Custom Retention");listPolicySettings.Update();Console.WriteLine(listPolicySettings.GetRetentionSchedule(folder.ServerRelativeUrl));web.Close();}}

这里的保留策略是与列表绑定的,一搬建议与内容类型绑定。

  private static void PolicyContentType(){using (SPSite site = new SPSite(siturl)){SPWeb web = site.RootWeb;SPList list = web.GetList(SharePointListURL);SPFolder folder = web.Folders[SharePointListURL];SPWeb parentWeb = list.ParentWeb;SPList parentList = parentWeb.Lists[folder.ParentListId];ListPolicySettings listPolicySettings = new ListPolicySettings(parentList);string policyXml = @"<Schedules nextStageId='4' default='false'><Schedule type='Default'><stages><data stageId='1' recur='True' offset='6' unit='months'><formula id='Microsoft.Office.RecordsManagement.PolicyFeatures.Expiration.Formula.BuiltIn'><number>6</number><property>Created</property><period>months</period></formula><action type='action' id='Microsoft.Office.RecordsManagement.PolicyFeatures.Expiration.Action.DeletePreviousVersions' /></data><data stageId='2'><formula id='Microsoft.Office.RecordsManagement.PolicyFeatures.Expiration.Formula.BuiltIn'><number>6</number><property>Modified</property><period>months</period></formula><action type='action' id='Microsoft.Office.RecordsManagement.PolicyFeatures.Expiration.Action.Record' /></data></stages></Schedule><Schedule type='Record'><stages><data stageId='3'><formula id='Microsoft.Office.RecordsManagement.PolicyFeatures.Expiration.Formula.BuiltIn'><number>3</number><property>Created</property><period>years</period></formula><action type='action' id='Microsoft.Office.RecordsManagement.PolicyFeatures.Expiration.Action.Delete' /></data></stages></Schedule></Schedules>";SPContentType contentType = web.ContentTypes["文档"];Policy policy = Policy.GetPolicy(contentType);//Check to see if it exists, if not create itif (policy == null){Policy.CreatePolicy(contentType, null);policy = Policy.GetPolicy(contentType);}PolicyItem retentionPolicy = policy.Items[Expiration.PolicyId];//See if a policy already exists, if not create oneif (retentionPolicy == null){policy.Items.Add(Expiration.PolicyId, policyXml);policy.Update();}else{retentionPolicy.CustomData = policyXml;retentionPolicy.Update();}//Return back policy XML to make sure it workedretentionPolicy = policy.Items[Expiration.PolicyId];Console.WriteLine("Policy XML: " + retentionPolicy.CustomData.ToString());web.Close();}}

运行后的结果如下:

首先定位到“网站内容类型” -》文档-》信息管理策略设置:

3)创建组织器规则

必须使用Microsoft.Office.RecordsManagement.RecordsRepository.EcmDocumentRoutingWeb对象。必须在站点功能设置中激活内容组织器功能.

网站操作->管理网站功能:

如果想基于一个唯一的属性实现自动折叠,那么可以使用DocumentRouterAutoFolderSettings类,主要代码如下:

   public static void PolicyTest(){using (SPSite site = new SPSite(siturl)){SPWeb web = site.RootWeb;SPList list = web.GetList(SharePointListURL);SPFolder folder = web.Folders[SharePointListURL];SPWeb parentWeb = list.ParentWeb;EcmDocumentRoutingWeb router = new EcmDocumentRoutingWeb(web);foreach (EcmDocumentRouterRule rule in router.RoutingRuleCollection){string s = "Alias:" + rule.Aliases + " AFP:" + rule.AutoFolderPropertyName + " Cond:" + rule.ConditionsString + " CTS:"+ rule.ContentTypeString + " CR:" + rule.CustomRouter + " PRI:" + rule.Priority + " TP:" + rule.TargetPath+ " Name:" + rule.Name + " Desc:" + rule.Description;DocumentRouterAutoFolderSettings autoFolder = rule.AutoFolderSettings;s += "name Format: " + autoFolder.AutoFolderFolderNameFormat+ " PropID:" + autoFolder.AutoFolderPropertyId.ToString()+ " InternalName:" + autoFolder.AutoFolderPropertyInternalName+ " PropName:" + autoFolder.AutoFolderPropertyName+ " TypeasString:" + autoFolder.AutoFolderPropertyTypeAsString+ " MaxItem:" + autoFolder.MaxFolderItems.ToString()+ " Term:" + autoFolder.TaxTermStoreId.ToString();Console.WriteLine(s);}SPContentType contentType = web.ContentTypes["问题"];string contentString = contentType.Id.ToString() + "|" + contentType.Name;SPField fieldname = contentType.Fields["标题"];string fieldNamestring = fieldname.Id.ToString() + "|" + fieldname.InternalName + "|" + fieldname.Title;  EcmDocumentRouterRule newRule = new EcmDocumentRouterRule(web);newRule.Name = "Custom Category Rule";newRule.Description = "Created by Gavin";newRule.Priority = "5";newRule.ContentTypeString = contentString;newRule.TargetPath = "/SiteCollectionDocuments";newRule.ConditionsString = @"<Conditions><Condition Column='8553196d-ec8d-4564-9861-3dbe931050c8|FileLeafRef|Name' Operator='IsNotEqual' Value='NotEqualTo' /><Condition Column='8553196d-ec8d-4564-9861-3dbe931050c8|FileLeafRef|Name' Operator='GreaterThan' Value='GreaterTha=' /><Condition Column='8553196d-ec8d-4564-9861-3dbe931050c8|FileLeafRef|Name' Operator='LessThan' Value='LessThan' /><Condition Column='8553196d-ec8d-4564-9861-3dbe931050c8|FileLeafRef|Name' Operator='GreaterThanOrEqual' Value='GreaterThanEqual' /><Condition Column='8553196d-ec8d-4564-9861-3dbe931050c8|FileLeafRef|Name' Operator='LessThanOrEqual' Value='LessThanOrEqua=' /><Condition Column='8553196d-ec8d-4564-9861-3dbe931050c8|FileLeafRef|Name' Operator='BeginsWith' Value='BeginsWith' /></Conditions>";SPField customField = contentType.Fields["说明"]; DocumentRouterAutoFolderSettings afaoler = newRule.AutoFolderSettings;afaoler.Enabled = true;afaoler.AutoFolderPropertyInternalName = customField.InternalName;afaoler.AutoFolderPropertyId = customField.Id;afaoler.AutoFolderPropertyName = customField.Title;afaoler.AutoFolderPropertyTypeAsString = customField.TypeAsString;afaoler.AutoFolderFolderNameFormat = "%1-%2";   newRule.Enabled = true;router.RoutingRuleCollection.Add(newRule);}}

运行结果如图:

网站管理 ->内容管理器规则

不知道为什么这里用“问题”内容内型后规则不能编辑,之间用自定义的内容内型是没有问题的。

正过代码需要几个常量定义

public const string siturl="http://center.beauty.com/";

private const string SharePointListURL = "http://center.beauty.com/Documents/";
private const string filePath = @"c:\demo.docx";
private const string fileSharePointURL = "http://center.beauty.com/Documents/demo.docx";

这里也附加一段 删除自定义内容内型的代码:

 public static void RemoveContentType(){using (SPSite siteCollection = new SPSite(siturl)){using (SPWeb webSite = siteCollection.OpenWeb()){// Get the obsolete content type.SPContentType obsolete = webSite.ContentTypes["CustomDC"];// We have a content type.if (obsolete != null){IList<SPContentTypeUsage> usages = SPContentTypeUsage.GetUsages(obsolete);// It is in use.if (usages.Count > 0){Console.WriteLine("The content type is in use in the following locations:");foreach (SPContentTypeUsage usage in usages)Console.WriteLine(usage.Url);}// The content type is not in use.else{// Delete it.Console.WriteLine("Deleting content type {0}...", obsolete.Name);webSite.ContentTypes.Delete(obsolete.Id);}}// No content type found.else{Console.WriteLine("The content type does not exist in this site collection.");}}}Console.Write("\nPress ENTER to continue...");Console.ReadLine();}

View Code

sharepoint 2010 记录管理 对象模型相关推荐

  1. SharePoint 2010 客户端对象模型使用 ECMAScript

    ECMAScript是基于javascript的客户端脚本语言,SharePoint 2010中支持使用ECMAScript来调用客户端对象模型 背景 众所周知客户端对象模型是SharePoint 2 ...

  2. 了解 SharePoint 2010 开发中的关键点

    **摘要:**了解为 Microsoft SharePoint 2010 规划和开发业务解决方案时必须做出的关键点. 上次修改时间: 2012年3月13日 适用范围: Business Connect ...

  3. SharePoint 2010 整合Sil“.NET研究”verlight 4应用 - 任务管理

    SharePoint 2010可以与Silverlight实现紧密集成.不管是在浏览器中运行的Silverlight程序还是单独的一个Silverlight程序,都能与SharePoint 2010实 ...

  4. SharePoint 2010开发实例精选——通过客户端对象模型删除页面上的Web部件

    下面的例子是在控制台应用程序中使用客户端对象模型,为了在控制台程序中使用ClientContext,我们需要添加两个dll引用到我们的项目中.Microsoft.SharePoint.Client.d ...

  5. 简介SharePoint 2010 14 Hive文件夹

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u012025054/article/details/36018873 简介SharePoint 20 ...

  6. SharePoint 2010中的客户端模型

    1.介绍 客户端模型是SharePoint 2010才提供的,可以更灵活的在任何客户端设备中操作SharePoint对象,在2007版本中没有客户端模型,2010中有三种客户端模型JavaScript ...

  7. 如何开启匿名访问SharePoint 2010里的Client Object Model

    正如大家所知道的,SharePoint 2010 集成了一个新的特性"客户端对象模型( Client Object Model)",这真的是个很有趣的东西,开发人员可以很方便的写一 ...

  8. sharepoint 2010 内容类型

    SharePoint 2010  在上一版本的基础上进一步发展了内容类型对象.本系列作为一个专题,试图对其进行一个深入的剖析.方便大家在自己的自定义解决方案中对其进行定制. 内容类型的定义 Share ...

  9. Sharepoint学习笔记 –架构系列—Sharepoint的客户端对象模型(Client Object Model)

    前面过了一下Sharepoint的服务器端对象模型,接下来就让我们大致看看Sharepoint的客户端对象模型(Client Object Model: Client OM). 首先需要了解的就是Sh ...

最新文章

  1. 浅析商城网站建设需要注意哪些细节内容呢?
  2. php并行运算,php多进程并行执行脚本的代码
  3. 太骚了!Python模型完美切换SAS,还能这么玩。。
  4. Flink 架构:三层架构体系、运行时组件
  5. Opencv实战(一) 视频人数统计(C++ Opencv)前后背景分离方法
  6. Java23种设计模式之概念篇
  7. 视差滚动不适合网页的5个原因
  8. linux shell转换时间格式,在bash中转换日期格式
  9. jquery跨域请求示例
  10. react调用api等待返回结果_程序员:RPC远程调用原理浅析
  11. putty远程连接以及密钥
  12. java使用xmlWorkerHelper将html转pdf
  13. 微信小程序退出到微信
  14. 机器学习之聚类算法(五)层次聚类代码实现及模型可视化
  15. 解决使用feign调用服务时携带token
  16. [编程实例]360漏洞修复(绿色版)制作器 v1.0
  17. 6-11 使用函数输出水仙花数 (20 分)
  18. 5G催化智能经济快速崛起
  19. 滁州学院计算机系录取,2021年滁州学院各省各专业最低投档录取分数线统计(文科 理科)...
  20. 不想写日报、周报?这款报表自动化工具一定要收好,打工人必备

热门文章

  1. 猜数字游戏的提示(UVa340)
  2. 后台如何通过Request取得多个含有相同name的控件的值?
  3. EF Code First 学习笔记:关系(转)
  4. 重新ICP,在没有Matlab的日子里
  5. Linux下Mysql数据库备份和恢复全攻略
  6. 【OpenCV】直方图应用:直方图均衡化,直方图匹配,对比直方图
  7. OpenCV中的cv::String和CString互相转换
  8. 函数调用 压栈的工作原理
  9. socket与文件描述符
  10. java中不用impore导入的_java import机制(不用IDE)