一直想写关于这个信息管理策略的随笔,前段时间做了不少实验,可是一直没达到我想要的效果,今天拿出来算是抛砖引玉吧,希望做过这方面研究的多多分享经验,个人觉得如果利用好Timer,可以实现我们很多的关于定时的需求,如到期提醒、过期删除或归档等等,尤其这个信息策略的action是可以扩展的,我们可以自己创建要执行动作,MOSS2007默认的只有一个删除action。下面就开始写一下我在这方面的一点心得。
如果以前从来没接触过信息管理策略,建议先看一下这篇文章,http://office.microsoft.com/zh-cn/sharepointserver/HA101735292052.aspx。
MOSS2007的信息管理策略有两种,实时策略和定时策略,关于实时策略我还没有深入研究过,它实现的应该是类似于给内容类型附加Event handler的功能,对于定时策略,如到期策略、过期策略,它是通过WSS本身的Timer Job来实现的,在后台有一个windows service,它定时轮循相应的文档库或者列表库,检测是否满足条件,它可以检测任何的时间字段,我们可以创建网站集级的信息管理策略,也可以创建针对某个列表的或者文档库的策略,两者除了使用范围以外基本一致,信息管理策略是可以导出,它也存在一个列表中。
1. 创建信息管理策略
• 为网站集创建信息管理策略
网站操作—网站设置,在网站集管理中网站集策略,可以创建也可以导入,我们点击创建,输入必要的名称和说明后,我们启用过期,如图:
可以选择基于项属性的时间段,在下拉列表中可以选择我们任一日期字段,并在后面选择年、月、日,在项过期时,我们可以在下拉中选择要执行的action,MOSS自带的只有一个删除动作,我们可以开发自定义action。
• 为列表、文档库创建信息管理策略
在设置—列表设置,权限和管理中信息管理策略设置,如果我们创建了网站集信息管理策略,可以选择使用网站集策略。若要为该列表单独创建策略,可以选择定义策略。其他的设置与创建网站集策略完全一致。
2. 给MOSS的信息管理策略添加自定义action
(原文参考地址:http://www.tonstegeman.com/Blog/Lists/Posts/Post.aspx?ID=25)
若要创建一个自定义动作,我们需要继承自IExpirationAction接口,它包含在Microsoft.Office.RecordsManagement.Features命名空间中。我们需要添加对Microsoft.Office.Policy这个DLL的引用,路径为:C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\ISAPI。
例如,我们创建一个名为TestPolicy的信息管理策略动作,示例代码如下:
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint;
using Microsoft.Office.RecordsManagement;
using Microsoft.Office.RecordsManagement.PolicyFeatures;
using Microsoft.Office.RecordsManagement.InformationPolicy;
namespace TestPolicy
{
public class Policy : IExpirationAction
{
public void OnExpiration(Microsoft.SharePoint.SPListItem item,System.Xml.XmlNode parametersData, DateTime expiredDate)
{
//你要实现功能的代码,例如发邮件。。
}
}
}
你还需要将它强命名并添加到GAC中。
我们还需要将这个DLL注册到MOSS中,类似于添加一个Feature,我们要先创建一个
XML文件,我通常都是在VS中创建XML,如下将刚才的TestPolicy注册到MOSS中:
<?xml version="1.0" encoding="utf-8" ?>
<p:PolicyResource id="TestPolicy" featureId="Microsoft.Office.RecordsManagement.PolicyFeatures.Expiration" type="Action" xmlns:p="urn:schemas-microsoft-com:office:server:policy">
<p:LocalizationResources>站点集名称</p:LocalizationResources>
<p:Name>TestPolicy</p:Name>
<p:Description>Only have a test.</p:Description>
<p:Publisher>whale</p:Publisher>
<p:AssemblyName>TestPolicy, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</p:AssemblyName>
<p:ClassName>TestPolicy</p:ClassName>
</p:PolicyResource>
创建完XML文件后,我们在解决方案中添加一个控制台应用程序RegPolicy,同样的也需要添加对Microsoft.Office.Policy的引用。代码如下:
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Office.RecordsManagement.InformationPolicy;
namespace RegPolicy
{
class Program
{
static void Main(string[] args)
{
string actionmanifest = System.IO.File.ReadAllText(@"XML文件路径");
PolicyResourceCollection.Delete("TestPolicy");
PolicyResourceCollection.Add(actionmanifest);
}
}
}
编译执行,如果一切都没问题,我们会在操作的下拉框中看到我们创建的TestPolicy。如图所示:
那老外的博客挺有意思,最后来了一句”Good luck!”,呵呵~~
作者:whalelover
相关文章
同类最新