📄 itemaudit.aspx
字号:
<%@ 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" %>
<%@ Page Language="C#" MasterPageFile="~/_layouts/application.master" Inherits="Microsoft.SharePoint.WebControls.LayoutsPageBase" %>
<%@ Import Namespace="Microsoft.SharePoint" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Security" %>
<%@ Import Namespace="System.Xml" %>
<%@ Import Namespace="ItemAuditing" %>
<%@ Register TagPrefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls"
Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e) {
SPSite siteColl = SPContext.Current.Site;
SPWeb site = SPContext.Current.Web;
string ListId = Request.QueryString["ListId"];
string ItemId = Request.QueryString["ItemId"];
txtListId.Text = ListId;
txtItemId.Text = ItemId;
cmdGenerateWorkbook.Attributes["onclick"] = "location.replace('" + site.Url + "/_layouts/AuditLogWorkbook.ashx?" + this.Request.QueryString.ToString() + "');";
SPList list1 = site.Lists[new Guid(ListId)];
SPListItem item1 = list1.Items.GetItemById(Convert.ToInt32(ItemId));
item1.Audit.WriteAuditEvent(SPAuditEventType.Custom, "CustomViewAuditEvent", "");
SPSecurity.RunWithElevatedPrivileges(delegate() {
using (SPSite ElevatedSiteCollection = new SPSite(siteColl.ID)) {
using (SPWeb ElevatedSite = ElevatedSiteCollection.OpenWeb(site.ID)) {
SPList list = ElevatedSite.Lists[new Guid(ListId)];
txtListTitle.Text = list.Title;
SPListItem item = list.Items.GetItemById(Convert.ToInt32(ItemId));
txtItemTitle.Text = item.Name;
SPAuditQuery wssQuery;
SPAuditEntryCollection auditCol;
wssQuery = new SPAuditQuery(ElevatedSiteCollection);
wssQuery.RestrictToListItem(item);
auditCol = ElevatedSite.Audit.GetEntries(wssQuery);
DataTable table = new DataTable();
table.Columns.Add("User", typeof(string));
table.Columns.Add("Event", typeof(string));
table.Columns.Add("Occurred", typeof(DateTime));
table.Columns.Add("Version", typeof(string));
DataRow newRow;
foreach (SPAuditEntry entry in auditCol) {
newRow = table.Rows.Add();
newRow["User"] = GetUserNameById(entry.UserId, site);
if (entry.SourceName == "CustomViewAuditEvent") {
newRow["Event"] = "查看审核日志";
}
else {
newRow["Event"] = ConvertEventToLocal(entry.Event);
}
newRow["Occurred"] = entry.Occurred.ToLocalTime();
newRow["Version"] = ParseVersionNumber(entry.EventData);
}
SPBoundField boundField = new SPBoundField();
boundField.HeaderText = "用户";
boundField.DataField = "User";
SPGridView1.Columns.Add(boundField);
boundField = new SPBoundField();
boundField.HeaderText = "发生时间";
boundField.DataField = "Occurred";
boundField.ControlStyle.Width = new Unit(140);
SPGridView1.Columns.Add(boundField);
boundField = new SPBoundField();
boundField.HeaderText = "事件";
boundField.DataField = "Event";
SPGridView1.Columns.Add(boundField);
boundField = new SPBoundField();
boundField.HeaderText = "版本";
boundField.DataField = "Version";
SPGridView1.Columns.Add(boundField);
SPGridView1.AutoGenerateColumns = false;
SPGridView1.DataSource = table.DefaultView;
SPGridView1.DataBind();
SPGridView1.AllowSorting = true;
SPGridView1.HeaderStyle.Font.Bold = true;
}
}
});
}
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";
}
}
protected void cmdViewWithExcelServices_Click(object sender, EventArgs e) {
SPSite siteColl = SPContext.Current.Site;
SPWeb site = SPContext.Current.Web;
string ListId = Request.QueryString["ListId"];
string ItemId = 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();
SPDocumentLibrary library = (SPDocumentLibrary)siteColl.RootWeb.Lists["审核日志库"];
string documentName = string.Format("{0} 审核 在 {1:MM-dd-yyyy}.xlsx", item.Name, DateTime.Now);
string libraryPath = library.ParentWeb.Site.MakeFullUrl(library.RootFolder.ServerRelativeUrl);
string documentPath = libraryPath + "/" + documentName;
library.ParentWeb.Files.Add(documentPath, strDocument, true);
strDocument.Close();
string XlViewerPath = siteColl.ServerRelativeUrl;
if (XlViewerPath[XlViewerPath.Length - 1] != '/')
XlViewerPath += "/";
XlViewerPath += @"_layouts/xlviewer.aspx?listguid={" + library.ID.ToString().ToUpper() + "}";
XlViewerPath += @"&itemid=" + item.ID.ToString() + @"&DefaultItemOpen=1";
Response.Redirect(XlViewerPath);
}
}
});
}
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;
}
</script>
<asp:Content ID="Content6" ContentPlaceHolderID="PlaceHolderMain" runat="server">
<table width="100%" border="1" cellspacing="0" cellpadding="2">
<tr>
<td style="width: 171px">
列表 编号[GUID]</td>
<td>
<asp:TextBox ID="txtListId" runat="server" Width="100%" ReadOnly="True"></asp:TextBox></td>
</tr>
<tr>
<td style="width: 171px">
列表 标题</td>
<td>
<asp:TextBox ID="txtListTitle" runat="server" Width="100%" ReadOnly="True"></asp:TextBox></td>
</tr>
<tr>
<td style="width: 171px">
项目 编号</td>
<td>
<asp:TextBox ID="txtItemId" runat="server" Width="100%" ReadOnly="True"></asp:TextBox></td>
</tr>
<tr>
<td style="width: 171px">
文档 名称</td>
<td>
<asp:TextBox ID="txtItemTitle" runat="server" Width="100%" ReadOnly="True"></asp:TextBox></td>
</tr>
</table>
<hr />
<input type="button" runat="server" id="cmdGenerateWorkbook" value="生成 Excel 工作簿" />
<asp:Button ID="cmdViewWithExcelServices" runat="server" Text="使用 Excel Services 查看工作簿"
Width="250" OnClick="cmdViewWithExcelServices_Click" />
<hr />
<SharePoint:SPGridView ID="SPGridView1" runat="server" AutoGenerateColumns="False"
Width="100%">
<AlternatingRowStyle CssClass="ms-alternating" />
</SharePoint:SPGridView>
</asp:Content>
<asp:Content ID="Content1" ContentPlaceHolderID="PlaceHolderPageTitle" runat="server">
项目审核
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="PlaceHolderPageTitleInTitleArea"
runat="server">
项目审核
</asp:Content>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -