📄 auditlogworkbook.ashx
字号:
<%@ Assembly Name="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Assembly Name="ItemAuditing, Version=1.0.0.0, Culture=neutral, PublicKeyToken=7fd3ed697555604d" %>
<%@ WebHandler Language="C#" Class="AuditLogWorkbookHandler" %>
using System;
using System.Web;
using System.Data;
using System.IO;
using System.Security;
using System.Xml;
using Microsoft.SharePoint;
using ItemAuditing;
public class AuditLogWorkbookHandler : IHttpHandler {
public bool IsReusable {
get { return false; }
}
public void ProcessRequest(HttpContext context) {
SPSite siteColl = SPContext.Current.Site;
SPWeb site = SPContext.Current.Web;
string ListId = context.Request.QueryString["ListId"];
string ItemId = context.Request.QueryString["ItemId"];
SPSecurity.RunWithElevatedPrivileges(delegate() {
using (SPSite ElevatedSiteCollection = new SPSite(siteColl.ID)) {
using (SPWeb ElevatedSite = ElevatedSiteCollection.OpenWeb(site.ID)) {
SPList list = ElevatedSite.Lists[new Guid(ListId)];
SPListItem item = list.Items.GetItemById(Convert.ToInt32(ItemId));
AuditLogWorkbook log = new AuditLogWorkbook();
log.WriteHeaderInfo(list.Title, item.Name, DateTime.Now);
SPAuditQuery wssQuery;
SPAuditEntryCollection auditCol;
wssQuery = new SPAuditQuery(ElevatedSiteCollection);
wssQuery.RestrictToListItem(item);
auditCol = ElevatedSite.Audit.GetEntries(wssQuery);
string eventType;
foreach (SPAuditEntry entry in auditCol) {
if (entry.SourceName == "CustomViewAuditEvent") {
eventType = "查看审核日志";
}
else {
eventType = ConvertEventToLocal(entry.Event);
}
log.WriteEntry(GetUserNameById(entry.UserId, site),
entry.Occurred.ToLocalTime().ToString(),
eventType,
ParseVersionNumber(entry.EventData));
}
Stream strDocument = log.GetDocument();
context.Response.ClearContent();
context.Response.ClearHeaders();
context.Response.AddHeader("content-disposition", "attachment; filename=ItemAuditLog.xlsx");
context.Response.ContentType = @"application/vnd.-excel.document.12";
context.Response.ContentEncoding = System.Text.Encoding.UTF8;
strDocument.Position = 0;
BinaryWriter writer = new BinaryWriter(context.Response.OutputStream);
BinaryReader reader = new BinaryReader(strDocument);
writer.Write(reader.ReadBytes((int)strDocument.Length));
reader.Close();
writer.Close();
strDocument.Close();
context.Response.Flush();
context.Response.Close();
context.Response.End();
}
}
});
}
protected String ConvertEventToLocal(SPAuditEventType Event)
{
string operate = String.Empty;
switch (Event)
{
case SPAuditEventType.AuditMaskChange: //A change in the types of events that are audited for the object.
operate = "更改事件类型[审核]";
break;
case SPAuditEventType.CheckIn: //Check-in of the object.
operate = "签入";
break;
case SPAuditEventType.CheckOut: //Check-out of the object.
operate = "签出";
break;
case SPAuditEventType.ChildDelete: //Deletion of one of the child objects of the object.
operate = "子项目删除";
break;
case SPAuditEventType.ChildMove: //Move of one of the child objects of the object.
operate = "子项目移动";
break;
case SPAuditEventType.Copy: //Copying of the object.
operate = "复制";
break;
case SPAuditEventType.Custom: //Custom action or event.
operate = "自定义";
break;
case SPAuditEventType.Delete: //Deletion of the object.
operate = "删除";
break;
case SPAuditEventType.EventsDeleted: //Deletion of audited events that are connected with the object from the SharePoint database.
operate = "删除事件[审核]";
break;
case SPAuditEventType.Move: //Move of the object.
operate = "移动";
break;
case SPAuditEventType.ProfileChange: //Change in a profile that is associated with the object.
operate = "个性化更改";
break;
case SPAuditEventType.SchemaChange: //Change in the schema of the object.
operate = "架构更改";
break;
case SPAuditEventType.Search: //Search on the object.
operate = "搜索";
break;
case SPAuditEventType.SecGroupCreate: //Creation of a user group for a SharePoint site collection.
operate = "用户组创建[网站集]";
break;
case SPAuditEventType.SecGroupDelete: //Deletion of a group that is associated with a SharePoint site collection.
operate = "用户组删除[网站集]";
break;
case SPAuditEventType.SecGroupMemberAdd: //Addition of a new member to a group that is associated with a SharePoint site collection.
operate = "添加用户[网站集]";
break;
case SPAuditEventType.SecGroupMemberDel: //Deletion of a member from a group that is associated with a SharePoint site collection.
operate = "删除用户[网站集]";
break;
case SPAuditEventType.SecRoleBindBreakInherit: //Turning off inheritance of security settings from the parent of the object.
operate = "不从父级继承权限";
break;
case SPAuditEventType.SecRoleBindInherit: //Turning on inheritance of security settings from the parent of the object.
operate = "从父级继承权限";
break;
case SPAuditEventType.SecRoleBindUpdate: //Changing the permissions of a user or group for the object.
operate = "更改用户(组)权限";
break;
case SPAuditEventType.SecRoleDefBreakInherit: //Turning off inheritance of role (that is, permission level) definitions from the parent of the object.
operate = "停止从父级继承权限级别";
break;
case SPAuditEventType.SecRoleDefCreate://Creation of a new role (that is, permission level) definition associated with the object.
operate = "添加权限级别";
break;
case SPAuditEventType.SecRoleDefDelete: //Removal of a role (that is, permission level) definition associated with the object.
operate = "移除权限级别";
break;
case SPAuditEventType.SecRoleDefModify: //Changing a role (that is, permission level) definition associated with an object.
operate = "更改权限级别";
break;
case SPAuditEventType.Undelete: //Restoration of an object from the Recycle Bin.
operate = "从回收站还原";
break;
case SPAuditEventType.Update: //Changing the properties of an object or creating an object.
operate = "更改对象属性或创建对象";
break;
case SPAuditEventType.View: //Viewing of the object by a user.
operate = "查看";
break;
case SPAuditEventType.Workflow:
operate = "工作流";
break;
default:
operate = "未知操作";
break;
}
return operate;
}
string GetUserNameById(int UserId, SPWeb site) {
try {
return site.SiteUsers.GetByID(UserId).Name;
}
catch {
return UserId.ToString();
}
}
protected string ParseVersionNumber(string versionString) {
try {
int startMajor = versionString.IndexOf("<Major>") + 7;
int endMajor = versionString.IndexOf("</Major>");
int lengthMajor = endMajor - startMajor;
int startMinor = versionString.IndexOf("<Minor>") + 7;
int endMinor = versionString.IndexOf("</Minor>");
int lengthMinor = endMinor - startMinor;
string majorNumber = versionString.Substring(startMajor, lengthMajor);
string minorNumber = versionString.Substring(startMinor, lengthMinor);
if (majorNumber == "0" && minorNumber == "-1")
return "N/A";
return majorNumber + "." + minorNumber;
}
catch {
return "N/A";
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -