創建一個List Definition有多條途徑,這里由於我們要基於前面的用戶自定義Content Type來創建一個List Defintion,所以我們就需要使用到List Definition From Content Type模板。
這里先大致描述如何創建List Definition,然后重點介紹一下List Definition里面的相關內容。
首先打開我們前面創建的Content Type的項目,在這個項目中新添加一個Item,在模板中選擇Definition From Content Type,如下圖
下一步采用默認設置即可,點選讓系統給你創建一個List Instance.
這樣我們就基於我們前面創建的用戶自定義ContentType創建了一個用戶自定義的ListDefinition, 創建好后的項目如下圖:
一個完整的List Definition應該包括:
. Feature.xml 文件(里面有元素清單Element Manifest)
.List Instance列表實例
.List Template列表模板
.功能文件夾Feature Folder (%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\FEATURES) 中的 Schema.xml 文件。
一、作為Feature的Feature.xml
里面定義了一個List Definition所需要的具備的各方面的定義內容,它的Element Mainfest即元素清單中列出了這些方方面面的定義工作所涉及的描述文件所在位置,下面是本例的Feature.xml的Manifest內容:
< Properties >
< Property Key ="GloballyAvailable" Value ="true" />
</ Properties >
< ElementManifests >
< ElementManifest Location ="ContentType1\Elements.xml" />
< ElementManifest Location ="ListInstance1\Elements.xml" />
< ElementFile Location ="PicListDefinition\EditDlg.htm" />
< ElementManifest Location ="PicListDefinition\Elements.xml" />
< ElementFile Location ="PicListDefinition\FileDlg.htm" />
< ElementFile Location ="PicListDefinition\Repair.aspx" />
< ElementFile Location ="PicListDefinition\Schema.xml" />
< ElementFile Location ="PicListDefinition\Upload.aspx" />
</ ElementManifests >
</ Feature >
可以看到,這個Feature涉及到了ContentType的定義,ListInstance的定義,PicListDefinition的定義以及PicListDefinition所對應的Schema.xml的定義,另外還包括幾個用於界面定義的ASPX,這些ASPX將會在Schema.xml中引用到。
二、對於List Template
ListTemplate 元素用於指向某 List definition 的定義,這個定義包含在 Schema.xml 文件中,你在創建List實例時就會用到這個ListTemplate,而這個ListTemplate又指向了具體的某個List Definition。所以它們的關系是 List Instance-->List Template--->Schema.xml(定義了特定的List Definition)。因此,List Template起到了承上啟下的作用。
ListTemplate 元素有許多屬性,這些屬性的詳細說明請參考MSDN
這里,就以本例為樣本進行說明:
Type ="10006"
BaseType ="1"
OnQuickLaunch ="TRUE"
SecurityBits ="11"
Sequence ="110"
DisplayName ="MyContentType1 - PicListDefinition"
Description ="My List Definition"
Image ="/_layouts/images/itdl.png"
DocumentTemplate ="121" />
Name :用於指定List Definition的內部名稱。不能使用空格或特殊字符。此名稱還用於查找包含用於定義正在使用的架構的 Schema.xml 文件的文件夾。 本例定義的名字是PicListDefinition
Type : 是個 Integer類型值。提供這個List Template的唯一標識符。此標識符只需要在這個Feature內保持唯一,注意,僅限於這個Feature,它不用在所有的Feature Definition 或Site Definition內保持唯一,這比較符合常理,因為有可能不同的Feature Definition 或Site Definition是由不同的人開發,他們之間不可能還要為List Tempalte的Type保持唯一隨時進行協商。如果你想要查看都有哪些默認列表模板類型,請參閱SPListTemplateType
,在本例,我們給它一個值10006,請注意這個值將會用到List Instance的定義中,它們二者必須對應一致。

BaseType :是個Integer值。用於為此List Template指定基本類型或默認架構,可以的值如下:
0 -- GenericList
1 -- DocumentLibrary
3 -- DiscussionBoard
4 — Survey
5 -- Issue
本例由於我們定義的是PicList的類型是Document Library,所以此處設置為1。
OnQuickLaunch:本例設置為TRUE,即在網站的“快速啟動”欄中顯示根據本List Template定義創建的List實例,這樣我們一旦部署我們的這個Solution,就可以在我們的測試網站的QuickLaunch欄找到這個List實例。
SecurityBits:它看似一個Integer類型,其實是個 Text值,是包含一個 2 位數字的字符串。該字符串中的第一個數字控制讀取權限;第二個數字控制編輯權限。對於讀取權限,有效的數字如下:
1 用戶可讀取所有項。
2 用戶只能讀取自己的項。
對於編輯權限,有效的數字如下:
1 用戶可編輯所有項。
2 用戶只能編輯自己的項。
4 用戶不能編輯項。
需要注意的是,此處的設置對具有 ManageLists 權限的用戶(他們自然具有讀寫權限)不起作用。
本例我們設置的值為11,即用戶可讀取,可編輯所有項。
Sequence : Integer值。指定排序優先級,以供“創建”頁上的List Template使用。如果未設置 Sequence,則該模板顯示在同樣缺少 Sequence 值的任何其他模板的任意順序的最后。指定相同序列的兩個模板以任意順序排序在一起。
DisplayName:指定列表定義的顯示名稱。
Description:提供列表定義的說明
Image:指定指向用於表示列表的圖標的 URL。
DocumentTemplate: Integer值。它只在 BaseType 設置為 1(文檔庫)的 ListTemplate 元素中有效。考慮到未來兼容性,該屬性應為空或對應於 DocumentTemplates 枚舉中 DocumentTemplate 元素的 Type 屬性
下面是一個表說明List Template的各個屬性
三、對於ListInstance
主要用於定義List Instance的相關特性。
本例的定義代碼如下:
OnQuickLaunch ="TRUE"
TemplateType ="10006"
Url ="Lists/MyContentType1-ListInstance1"
Description ="My List Instance" >
</ ListInstance >
Title :架構中此List實例的標題。該標題必須是唯一的,即在其所部署的網站(注意:不是其所在的所有網站或網站集)上必須唯一,不能有與其重名的其它List存在。
OnQuickLaunch:指定要通過“快速啟動”導航來為列表打開的視圖頁的 URL。
TemplateType:這個值必須與要使用的列表模板的整數標識符一樣,在上面的List Template中我們定義的Type="10006",所以此處也必須使用此值以使二者對應起來。這了是在Instance與Template之間建立關聯的關聯點。
Url:放置此List實例的相對於網站的 URL。
Description:列表實例的說明。
CustomSchema:這個屬性在本例沒有使用,它是可選屬性,類型為 string。用於指定用於列表實例的自定義架構。它是Sharepoint2010新引入的特性,它為用戶在后期介入控制List的相關特性以及測試提供了方便。這個屬性以后可能會繼續寫筆記來說明它。
四、Schema.xml說明
前面我們說過,一個List Instance對應着一個List Template,而一個List Tempalet又對應着一個 Schema.xml,這個Schema.xml是List Definition的基本組成文件,這個文檔以Element元素作為根節點,其下包含的內容有:
.列表中的字段定義
.列表視圖的工具欄定義
.內容類型聲明 ContentType
.以及列表的其他元數據(eg:列表說明..)。
一個Schema.xml文件總體結果如下圖:
下面分別介紹它的各個節點以節點下的內容
4.1 Content Type節點
本例的定義如下:
這個節點下描述了此List Definition所用到的ContentType.這里必須注意的是:我們在前面用戶自定義ContentType1的Elements.xml中描述的內容在這里的Schema.xml中的ContentType節點里又必須重新描述一下,這是微軟的使用要求,雖然這樣看來似乎有些重復了。 因為這個節點就是用於描述列表內容類型聲明的,如果這里的Content Type是系統默認的,那么我們只需要加入對此系統的ContentType的引用就行(eg :<ContentTypeRef ID="0x01">),但由於本例我們使用的ContentType是用戶自定的,這個定義有可能是在其它Solution中開發並部署,而本處的Solution並不知道如何引用用戶自定義的ContentType,所以在Schema.xml中就必須要重新描述一下。
4.2 Fields節點
這個節點包含 Schema.xml 文件中的列表定義或全局 Onet.xml 文件中的基本列表類型的字段定義,以指定在列表中實現的字段。
這里包括我們用戶自定義的Site Column,如本例的
還包括我們引用的以及移除的Field,如本例的:
StaticName ="Notes" Group ="_Hidden" DisplayName ="$Resources:core,About_Me;" ReadOnly ="FALSE" Type ="Note"
Sortable ="FALSE" RichText ="TRUE" RichTextMode ="FullHtml" FromBaseType ="TRUE" />
< Field ID ="{a5d2f824-bc53-422e-87fd-765939d863a5}" Type ="DateTime" Group ="$Resources:core,Document_Columns;" ShowInNewForm ="FALSE" ShowInFileDlg ="FALSE" Name ="ImageCreateDate" DisplayName ="$Resources:core,Date_Picture_Taken;" Format ="DateTime" Sealed ="TRUE" SourceID ="http://schemas.microsoft.com/sharepoint/v3/fields" AllowDeletion ="TRUE" StaticName ="ImageCreateDate" Customization ="" />
< Field ID ="{922551b8-c7e0-46a6-b7e3-3cf02917f68a}" Type ="Computed" Group ="_Hidden" Name ="ImageSize" DisplayName ="$Resources:core,Picture_Size;" ShowInNewForm ="FALSE" ShowInFileDlg ="FALSE" ShowInEditForm ="FALSE" Filterable ="FALSE" Sortable ="FALSE" SourceID ="http://schemas.microsoft.com/sharepoint/v3/fields" StaticName ="ImageSize" Customization ="" >
當然,還有從Parent繼承下來的其它Fields,這里就不一一說明了,下面是本例中此部分的代碼截圖:
當然,還有從Parent繼承下來的其它Fields,這里就不一一說明了。
4.3 Views節點
這個節點顧名思意就是與定義List的視圖有關的。它是用於定義包含在列表中使用的視圖集。在Sharepoint中每個List都可以包含大量的視圖。
一個Views節點包括許多View節點,一個View節點又包括諸如:Aggregations、GroupByFooter、GroupByHeader、Joins、PagedClientCallbackRowset、PagedRecurrenceRowset、PagedRowset、ParameterBindings、ProjectedFields、Query、RowLimit、RowLimitExceeded、Toolbar、ViewBidiHeader、ViewBody、ViewData、ViewEmpty、ViewFields、ViewFooter、ViewHeader、ViewStyle、XslLink等類型的節點定義。這些節點其實就是定義一個View的方方面面(如:工具條顯示,顯示行限制,視圖類型等等)
本例的Views節點如下圖:
里面定義了不少的View,下面就以第一個View的定義來說明
< Toolbar Type ="Standard" />
< XslLink Default ="TRUE" >main.xsl </ XslLink >
< RowLimit Paged ="TRUE" >30 </ RowLimit >
< ViewFields >
< FieldRef Name ="DocIcon" >
</ FieldRef >
< FieldRef Name ="LinkFilenameNoMenu" >
</ FieldRef >
< FieldRef Name ="Editor" >
</ FieldRef >
</ ViewFields >
< ParameterBindings >
< ParameterBinding Name ="NoAnnouncements" Location ="Resource(wss,noitemsinview_doclibrary)" />
< ParameterBinding Name ="NoAnnouncementsHowTo" Location ="Resource(wss,noitemsinview_doclibrary_howto)" />
< ParameterBinding Name ="AddNewAnnouncement" Location ="Resource(wss,Add_New_Document)" />
< ParameterBinding Name ="MoreAnnouncements" Location ="Resource(wss,MoreDocuments)" />
</ ParameterBindings >
< Query >
< OrderBy >
< FieldRef Name ="Modified" Ascending ="FALSE" >
</ FieldRef >
</ OrderBy >
</ Query >
</ View >
4.3.1、<View>元素:先看View元素的屬性,詳細的說明參考MSDN
BaseViewID屬性:類型為 Integer。指定基視圖的 ID。如果你是通過Sharepoint的UI來創建List的Views,BaseViewID將會按順序給值(即:0,1,2,3,..n)。
如果你通過List Definition的Schema.xml來定義Views,則它們不一定非得是按順序遞增的,你也可以自己給定但必須確保它是唯一的(eg: 0,1,3,7,11,16,22....)。
對於BaseViewId=3這個視圖比較特殊,網上有人提到它沒有New與Upload菜單,它可能是一個Explorer視圖。
Type屬性:指定視圖的呈現類型。該類型是常見的枚舉 HTML 視圖,並可設置為 HTML、Chart 或 Pivot。本例中設置為"HTML"類型。
MobileView屬性:若要指定標准 SharePoint 列表視圖是默認的移動視圖,則為 TRUE。只可以將每個列表中的一個視圖指定為默認的移動視圖。本例就是把第一個視圖設置為默認的移動視圖。
TabularView屬性:告訴系統打不打開TabularView顯示效果,此效果如下圖:
FreeForm:若要在呈現字段時指定某些字段類型的替代字段格式,則為 TRUE。尤其是,此屬性將影響對自定義非表格格式視圖類型中特別有用的數字列的對齊方式。
4.3.2 Toolbar 元素 : 用於定義列表視圖的工具欄,該工具欄是視圖的一部分,顯示在視圖頁眉的上方,如圖:
此元素的下定義格式如下:
Position = "After"
Type = "Standard" | "FreeForm" >
</ Toolbar >
Position = "After",工具欄將在視圖正文下方出現;反之,工具欄將在視圖正文上方出現。
4.3.3 XslLink元素: 對列表視圖應用在指定 XSL 文件中定義的模板。
XSL(EXtensible Stylesheet Language)是指可擴展樣式表語言。
XSL之於 XML 就像 CSS 之於 HTML。說白了就是將XML中的數據用指定的顯示格式輸出.XML不像HTML,它不包含任何顯示格式的信息. XSL 包含兩個部分:
a. XSLT – 用於轉換 XML 文檔的語言. XSLT 是指 XSL 轉換 (XSL Transformation)
b. XPath – 用於在 XML 文檔中導航的語言
XSL 文檔是由模板或規則構成,每個模板定義應用於特定 XML 節點的規則。XSL 模板如下所示:
模板的作用是用來承載XML文檔中的數據的,就像一個模具,如果這個模具是方形的,那么用這個模具做出來的模型也一定是方形的,而XML文檔中的數據就是用來真充模具的原料。實際上在模板中可以嵌套子模板,但最上層模板必須將match設為"/"。
本例定義使用了Main.xsl,Main.xsl是Sharepoint2010三個默認的XSLT Stylesheets之一,用於Sharepoint的Data 視圖與List 視圖的Webpart,並與vwstyle.xsl和fldtypes.xsl一起使用。
4.3.4 <RowLimit>元素: 這個好理解,就是設置要在視圖中顯示的項目數的行限制
4.3.5 <ViewFields>元素: 在這個元素中通過其子元素 FieldRef 元素提供視圖中的字段集。
如本例:
< FieldRef Name ="DocIcon" >
</ FieldRef >
< FieldRef Name ="LinkFilenameNoMenu" >
</ FieldRef >
< FieldRef Name ="Editor" >
</ FieldRef >
</ ViewFields >
提供了三個字段DocIcon,LinkFilenameNoMenu與Editor
4.3.6 <ParameterBindings>元素:主要用於為用於呈現視圖的 XSL 提供相關信息,它里面的子元素<ParameterBinding>就是針對樣式表的參數綁定。
SharePoint Foundation 可使用參數綁定來為XSL中的XSLT 轉換提供資源。要定義要在 XSLT 中使用的資源,可在 .resx 文件中定義該資源,將該資源綁定到視圖(方法是在列表的 Schema.xml 文件的ParameterBindings> 部分中聲明該資源),然后在自定義 XSLT 中使用該資源。還可以編程方式通過對象模型添加參數綁定。
所以,我們需要知道的就是:這個元素是和我們定義視圖的樣式有關的,為了定義我們的視圖樣式,我們需要引用一些外部資源,而到哪里去找這些資源,就是在這個地方利用parameterBinding來指明資源的位置。
ParameterBinding的使用的格式就是:
參照本例的定義:
< ParameterBinding Name ="NoAnnouncements" Location ="Resource(wss,noitemsinview_doclibrary)" />
< ParameterBinding Name ="NoAnnouncementsHowTo" Location ="Resource(wss,noitemsinview_doclibrary_howto)" />
< ParameterBinding Name ="AddNewAnnouncement" Location ="Resource(wss,Add_New_Document)" />
< ParameterBinding Name ="MoreAnnouncements" Location ="Resource(wss,MoreDocuments)" />
</ ParameterBindings >
它里面定義了三個參數資源,都是到Resource中去對應Name尋找,尋找的resourceFile文件名就是wss,resourceName名分別是noitemsinview_doclibrary,noitemsinview_doclibrary_howto,Add_New_Document與MoreDocuments。
關於XSLT的參數綁定請參考MSDN
4.3.7 <Query>元素:這個元素也好理解,就是定義視圖的查詢。即在加載視圖的數據時,要顯示哪些數據在此視圖中。
本例的查詢代碼如下:
< OrderBy >
< FieldRef Name ="Modified" Ascending ="FALSE" >
</ FieldRef >
</ OrderBy >
</ Query >
即只設置了按照Modified字段進行排序的要求
4.4 Form節點
此節點用於定義基列表類型中的表單集合。
本例定義如下:
以本例中的DisplayForm定義為例
Type屬性:用於指示要描述的表單類型,可為以下值之一:DisplayForm、EditForm 或 NewForm。
SetupPath屬性:指定包含表單 .aspx 頁的安裝目錄中文件夾的相對路徑,例如,pages/form.aspx。
Url屬性:指定用於表單的 ASP.NET 文件的路徑。
WebPartZoneID屬性:指定 Web 部件的區域。
在本例中你可能還注意到有一個NewFormDialog,這個是用於定義一個界面,這個界面用於當用戶需要在Sharepoint UI上創建一個新的List Item或修改一個List Item時就會跳出這個類似於Dialog的界面來讓用戶輸入List Item信息。
4.5 DefaultDescription 元素
設置在列表視圖的標題區域中和 Microsoft SharePoint Foundation 的“文檔和列表”頁上顯示的默認說明。
本例
是通過引用Resource資源中的定義來實現。
有了上面的說明,我們對List Definition有個大致的感性認識,接下來Build並部署我們的Solution,然后到測試網站上去查看結果,效果如下: