⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 auditlogworkbook.ashx

📁 这是一个在SHAREPOINT上开发的一个审核日记的源代码
💻 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 + -