一般情况下对IT管理者来说,在SharePointFarm中维护Feature,更喜欢使用命令行实现,这样可以省去登录到具体站点的操作。比如IT接到enduser的一个需求,要开启SiteCollectionFeature,如果直接操作......
2023-01-12
最近在做文档库设计的时候,公司需要统计用户对文档的下载次数这个功能,在sharepoint 2010中,有提供了一个叫审核的功能,可以协助我们做到。如果需要统计用户对文档的下载次数,并且在sharepoint的文档列表中显示,考虑到性能的问题,所以采取的方案,就是使用时序timer job,定时去更新文档的下载次数,如下图:
在开始做这个功能之前,需要启动一个文档的审计功能,点击文档的库设置,信息管理策略设置,选择内容类型(更改源),选择库和文件夹,点击确定,如下图:
接下来我们开始实现这个功能。
1。创建一个自定义列表,《下载次数更新表》,包含两个字段,DocumentLibraryUrl,DocumentColumn.这个表示用来存放需要更新的文档库以及所要更新的字段,例如下载次数,当然如果是其它字段也可以。只要和文档库的名称是一样的,就可以。
例如我们需要更新一个文档库的下载次数,我们提交一条数据,如下图所示。
2。创建一个时序的class文件,DocumentCountJob.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint.Administration;
using Microsoft.SharePoint;
namespace TimerJobForDocumentDownloadCount
{
public class DocumentCountJob : SPJobDefinition
{
public DocumentCountJob(): base(){}
public DocumentCountJob(string jobName, SPService service, SPServer server, SPJobLockType targetType)
: base(jobName, service, server, targetType)
{
}
public DocumentCountJob(string jobName, SPWebApplication webApplication)
: base(jobName, webApplication, null, SPJobLockType.ContentDatabase)
{
this.Title = jobName;
}
public override void Execute(Guid contentDbId)
{
SPSite site = new SPSite("http://moss:8000");
SPWeb web = site.OpenWeb();
web.AllowUnsafeUpdates = true;
SPList list = web.Lists.TryGetList("下载次数更新表");
//需要更新的文档库列表
SPList DocumentList;
SPAuditQuery wssQuery = new SPAuditQuery(site);
int count;
wssQuery.AddEventRestriction(SPAuditEventType.View);
foreach (SPListItem item in list.Items)
{
DocumentList = web.GetList(item["DocumentLibraryUrl"].ToString());
foreach (SPListItem DocumentItem in DocumentList.Items)
{
wssQuery.RestrictToListItem(DocumentItem);
SPAuditEntryCollection auditCol = web.Audit.GetEntries(wssQuery);
count = auditCol.Count;
string columnName = item["DocumentColunm"].ToString();
DocumentItem[columnName] = count;
DocumentItem.Update();
}
}
}
}
}
3。添加一个feature。DocumentDownloadCount.如下图所示
4。添加一个事件接收器。
实现这个事件接收器的两个方法函数,在上一篇博客中有详细说明了timer job的用法,具体可以参考
sharepoint 2010 如何创建一个timer job。
using System;
using System.Runtime.InteropServices;
using System.Security.Permissions;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Security;
using Microsoft.SharePoint.Administration;
namespace TimerJobForDocumentDownloadCount.Features.DocumentDownloadCount
{
[Guid("51410494-650b-4e9e-8358-fd8eaa4f5a93")]
public class DocumentDownloadCountEventReceiver : SPFeatureReceiver
{
const string JOB_NAME = "DocumentDownloadCount";
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
SPSite site = properties.Feature.Parent as SPSite;
foreach (SPJobDefinition job in site.WebApplication.JobDefinitions)
{
if (job.Name == JOB_NAME)
{
job.Delete();
}
}
DocumentCountJob Doc = new DocumentCountJob(JOB_NAME, site.WebApplication);
SPMinuteSchedule schedule = new SPMinuteSchedule();
schedule.BeginSecond = 0;
schedule.EndSecond = 59;
schedule.Interval = 5;
Doc.Schedule = schedule;
Doc.Update();
}
public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
{
SPSite site = properties.Feature.Parent as SPSite;
foreach (SPJobDefinition job in site.WebApplication.JobDefinitions)
{
if (job.Name == JOB_NAME)
{
job.Delete();
}
}
}
}
}
5。部署这个timer job。部署完成之后,我们在管理中心的作业定义中可以找到,如下图所示
点击进去可以配置它的具体运行时间间隔。如下图所示
6。最后重启服务sharepoint 2010 timer,整个过程就完成了。
相关文章
一般情况下对IT管理者来说,在SharePointFarm中维护Feature,更喜欢使用命令行实现,这样可以省去登录到具体站点的操作。比如IT接到enduser的一个需求,要开启SiteCollectionFeature,如果直接操作......
2023-01-12
我们经常会在SharePoint网站集的权限列表中看到某个user有LimitedAccessPermission,但是我们都知道或者试过,在SharePointsitecollection中没有办法直接添加user赋予LimitedAccess权限,并且LimitedAccess这个......
2023-01-12
在这样的场景下,比如统计员工的个人信息,IT会在SharePoint中新建list,加一些需要填写的栏位,然后让公司员工登录填写。这时候比起大家都能看到彼此信息而言,从公司角度更想让员工只能......
2023-01-12
大多数企业使用SharePoint文档库时,都会建议EndUser在编辑文档前先做CheckOut动作,这样可以保证文档在当前用户编辑过程中,其他人只能view而不能edit,防止多人同时修改同一文件互相影响的......
2023-01-12
为了记录SharePointLibrary/List中file/Item的修改情况,ITAdministrator会在List/Library的VersionSettings中开启Version管控设置。之后用户每次编辑item/file保存就会生成一个新的version记录,这样我们就会知道......
2023-01-12