SharePoint 2010 文檔管理之點擊次數


  前言:很多場景下,我們都需要對一篇文章或者文檔的點擊次數進行統計,然而SharePoint本身並沒有給我們設計這樣一個字段,所以我們需要通過簡單的字段開發來實現這樣一個功能。

一、創建項目:

  1. 創建一個空的SharePoint項目,添加一個“SharePoint映射文件夾”,映射到Template/Xml下,用來保存我們對於字段描述的xml。

  2. 添加一個xml到映射的xml文件夾下,名字為fldtypes_字段名,前面的名字必須是這樣規則,才會被SharePoint所識別,xml模板附后。

  3. 添加一個VisitorRecord.cs文件繼承自SPField字段,添加一個VisitorRecordControl.cs文件繼承自BaseFieldControl。

  4. 項目結構,如下圖:

image

二、添加代碼

  1. 添加Xml描述

<?xml version="1.0" encoding="utf-8" ?>

<FieldTypes>

<FieldType>

<Field Name="TypeName">VisitorRecord</Field>

<Field Name="ParentType">Text</Field>

<Field Name="TypeDisplayName">瀏覽次數</Field>

<Field Name="TypeShortDescription">每點擊一次DispForm頁,瀏覽次數+1</Field>

<Field Name="UserCreatable">TRUE</Field>

<Field Name="Sortable">TRUE</Field>

<Field Name="AllowBaseTypeRendering">TRUE</Field>

<Field Name="Filterable">TRUE</Field>

<Field Name="FieldTypeClass">VisitorRecord.VisitorRecord,VisitorRecord, Version=1.0.0.0, Culture=neutral, PublicKeyToken=a3d395e8da16bea6</Field>

<RenderPattern Name="DisplayPattern">

<Column/>

</RenderPattern>

</FieldType>

</FieldTypes>

  2. 添加VisitorRecord方法,如下表格:

class VisitorRecord : SPField

{

public VisitorRecord(SPFieldCollection fields, string fieldName)

: base(fields, fieldName)

{

Init();

}

public VisitorRecord(SPFieldCollection fields, string typeName, string displayName)

: base(fields, typeName, displayName)

{

Init();

}

void Init()

{

//設置在DisplayForm頁顯示

this.ShowInDisplayForm = true;

//設置在EditFrom頁不顯示

this.ShowInEditForm = false;

//在NewForm頁不顯示

this.ShowInNewForm = false;

}

public override BaseFieldControl FieldRenderingControl

{

get

{

BaseFieldControl vr1 = new VisitorRecordControl();

vr1.FieldName = this.InternalName;

return vr1;

}

}

}

  3. 添加VisitorRecordControl類代碼

class VisitorRecordControl : BaseFieldControl

{

public void UpdateItemFieldValue()

{

try

{

SPSecurity.RunWithElevatedPrivileges(delegate()

{

using (SPSite site = new SPSite(SPContext.Current.Site.ID))

{

using (SPWeb web = site.OpenWeb(SPContext.Current.Web.ID))

{

web.AllowUnsafeUpdates = true;

SPList list = web.Lists[this.ListId];

SPListItem item = list.GetItemById(this.ItemId);

if (item == null) return;

if (ItemFieldValue != null)

item[this.FieldName] = (Convert.ToInt32(this.ItemFieldValue.ToString()) + 1).ToString();

else

item[this.FieldName] = "1";

item.SystemUpdate();

web.AllowUnsafeUpdates = false;

}

}

});

}catch{}

}

protected override void Render(System.Web.UI.HtmlTextWriter output)

{

if (this.ControlMode == SPControlMode.Display)

{

this.UpdateItemFieldValue();

if (this.ItemFieldValue != null)

{

output.Write(this.ItemFieldValue.ToString());

}

else

{

output.Write("0");

}

}

}

}

三、顯示效果介紹:

  1. 新建項目,並沒有顯示我們的自定義字段,因為隱去了;

image

  2. 所有項目頁面,我們的視圖里有這個字段,可以看到每個項目的訪問量;

image

  3. 點擊詳細頁面,可以看到訪問量,並且會+1

image

  4. 編輯頁面下,也沒有顯示這個字段;

image

四、字段其他介紹:

  1. 字段類型

  可以看到我們一開始繼承的字段類型,是SPField類型,這個是基礎字段類型,當然,我們可以繼承SharePoint已經存在的內置字段類型,如下表:

單行文本 – SPFieldText

多行文本 – SPFieldMultiLineText

數字 – SPFieldNumber

貨幣 – SPFieldCurrency

是/否 – SPFieldBoolean

日期 - SPFieldDateTime

選項(單選) - SPFieldChoice

  2. 字段結構:

  基本,我們可以理解SharePoint的字段有一個GAC下文件(xxx.dll),一個字段描述性文件(fldtypes_xxx.xml)在Template/xml下,可能還有一個用戶控件(xxx.ascx),在TEMPLATE/CONTROLTEMPLATES下。

  3. 一些其他方法或事件

//判斷輸入值的有效性

public override string GetValidatedString(object value)

//重寫字段默認值

public override string DefaultValue

//該字段是否允許被爬網

public override bool NoCrawl

//字段刪除時執行的事件

public override void OnDeleting()

//字段添加后執行的事件

public override void OnAdded()

//字段更新后執行的事件

public override void OnUpdated()

五、參考文檔:

http://msdn.microsoft.com/zh-cn/library/gg132914.aspx

http://www.cnblogs.com/flowman/archive/2012/10/31/2748049.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM