Sharepoint學習筆記—Site Definition系列-- 2、創建Content Type

?Sharepoint本身就是一個豐富的大容器,里面存儲的所有信息我們可以稱其為“內容(Content)”,為了便于管理這些Conent,按照人類的正常邏輯就必然想到的是對此進行“分類”。分類所涉及到的層面又必然包括:
? 1、分類的標準或特征描述{即:類型屬性(或:與該類型項目相關聯的屬性)}。
? 2、對應類的關聯動作(即:工作流,行為以及其他設置)
?? 在Content Type的組織上還有一個Content Type Group,每一種Content Type分屬于不同的Group。
?? 我們以家里的東西為例,你家里的各種物品就算是家里的Content,你可以對它們定義不同的Content Type,如:書籍,廚房用具等等。
?? 書籍類涉及到的屬性可以有書籍名,作者名,ISBN,書籍類別,出版日期。這些屬性定義都基于預先定義好的公共屬性描述(Site Columns),在書籍類我們可以定義相關的工作流 eg:借閱工作流,保管工作流....,可以定義在操作書籍類時使用到的管理表單,讀書卡等等.......
?? 因此,在Sharepoint中也基本按照此邏輯進行管理,我們看看微軟對Content Type的定義:
?? 內容類型(Content Type) 是 Microsoft SharePoint Foundation 2010 列表或文檔庫中一類項目或文檔的元數據(列)、工作流、行為以及其他設置的可重用集合。借助于內容類型,可以采用集中的可重用方式來管理一類信息的設置。
?? 也就是說:? 內容類型用于定義列表項List Item、文檔Document或文件夾Folder的屬性。每種內容類型都可以指定:?
??????1.與該類型項目相關聯的屬性
????? 2.可以從該類型項目啟動的工作流
????? 3.文檔模板(針對文檔內容類型)
????? 4.可用的文檔轉換(針對文檔內容類型)
?????? 5.自定義功能
?? 您可以將內容類型與列表或庫相關聯。當您執行此操作時,即表示您正在指定該列表或庫可以包含此種內容類型的項目,并且該列表或庫中的“新建”命令將允許用戶新建此類型的項目。
? ? Sharepoint支持一個Document Library關聯多個Content types. 但對于Document library或list中的某個Item,允許一個且只能是一個Contenttype與它關系,這個好理解,好比一個容器可以存放好幾類的物品,但一個物品只能屬于某一個種類,否就會引起管理上的混亂。
?? ?而一個Content Type必然需要一組描述其特征的屬性.例如:貓科動物類,那么就你就要有一組特征來描述貓科動物類以區別其它類。描述特征所用的每一個屬性占用一個Field來表示。每一個Field其實都屬于某一個Site Column。
??? 你還可以關聯一個Document template給某個Content Type,這樣在創建此類Content Type的實例時就可以要求用戶同時填寫一個基于此Document Template的Document文檔,連同包含此Conent Type的List Item實例一起存儲在List中。
??? 當創建一個新的ContentType時,你最好先到Sharepoint預定義的Column Groups(eg:Base Columns, Core Contact and Calendar Columns, Core Document Columns, Core Task and Issue Columns, Custom Columns, Extended Columns)中去找找有沒有現成的Site Column供你使用,而不是急著另外創建一個新的Site Column.這樣做的好處是為保持系統內Site Column定義的一致性以及今后的維護管理提供方便。
??? Content Type是按照層次關系進行組織的,所有的ContentType都有它們的Parent ContentType,如果對它們的Parent Content Type進行修改,那么這種改動會推及到這些Child Content Type,但反之則不然。Content Type的層次關系如下圖:

????
??? 由圖可見,所有的Content Type都來自System下的Item,而Item是一個隱藏的Content Type,它里面沒有包含任何Column。

??? Content Type按作用范圍可分為Site Collection Level的和List Level的。前一個層次作用于整個Site Collection,而后一個層次則只對某個特定的List起作用。
?? 既然Site Columns是按照Site Column Groups進行組織的,Content Types也是按照Content Type Groups進行組織的,下面就是系統常用的Content Type Groups:
???????? ? Document Content Types
???????? ? Folder Content Types
???????? ? Group Work Content Types
???????? ? List Content Types
???????? ? Special Content Types

?? ?我們可以使用兩種途徑來創建Content Type
??????? ?1、通過Sharepoint的UI創建
??????? ?2、通過Visual Studio編碼創建
?? ?這里我們看看如何通過VisualStudio編碼創建,首先打開VS2010,新建一個項目,使用Content Type模板,Solution命名為MyContentType1?

??? 選擇新建的Solution為Farm類型

??

? 確定此新建的ContentType基于Picture

?

??? 新建項目如下圖:

?

?

??? 我們新增的Content Type將在ContentType1點的Elements.xml中進行定義。請輸入代碼內容如下:

<!--?Parent?ContentType:?Picture?(0x010102)?-->
??<ContentType?ID="0x01010200404203548fea4e479b7684c563248c8b"
???????????????Name
="MyContentType1?-?ContentType1"
???????????????Group
="Custom?Content?Types"
???????????????Description
="My?Content?Type"
???????????????Version
="0">
??????<FieldRefs>??????????
??????????<!--Date?Picture?Taken-->
??????????<RemoveFieldRef?ID="{a5d2f824-bc53-422e-87fd-765939d863a5}"/>
??????????<!--Picture?Size-->
??????????<RemoveFieldRef?ID="{922551b8-c7e0-46a6-b7e3-3cf02917f68a}"/>
??????????<!--About?Me-->
??????????<FieldRef?ID="{e241f186-9b94-415c-9f66-255ce7f86235}"?DisplayName="Information?About?this?Picture"/>
??????????<!--Cameral?Used-->
??????????<FieldRef?ID="{B8A42D20-BE9C-48ED-AFC1-78BD48C523A9}"?DisplayName="Cameral?Used"/>
??????</FieldRefs>
??</ContentType>

?項目如下圖:

?對代碼說明如下:

一、Content Type相關屬性

?????

?1、Content Type ID:即內容類型ID

???? 內容類型的ID是識別內容類型的唯一標識,它隱含了內容類型的上下級繼承關系,即從內容類型ID中可以看出此內容類型是繼承自哪個父內容類型的,內容類型ID中包含了父內容類型ID,我們可以從內容類型ID號中找到頂級的系統內容類型。
??? ?WSS 3會使用ID號中的這些信息來確定內容類型之間的關系,以及執行操作。?
??? ?內容類型可以使用兩種方式中的任何一種表示,而系統內容類型ID為”0x”, 所有其它內容類型都從系統內容類型繼承。所有其它內容類型ID都必須使用以上兩種方式之一創建一個ID號,并且此ID號在站點集里必須為唯一的,下面就是這兩種表示方法:
??? 規則?a、 父內容類型ID + 兩位十六進制的值(兩位十六進制的值不能是00),如:0x0101
??? ??? WSS自帶的內容類型ID均以這種方式生成。例如:基本內容類型Item的ID號為0x01,此ID指示Item的類型內容是直接繼承自系統內容類型。文檔內容類型(Document content type)的ID號為0x0101,文件夾內容類型(Folder content type)的ID號為:0x0120, 分以這兩個ID號,我們可以看出,文檔內容類型和文件夾內容類型都繼承于Item內容類型,而Item內容類型又繼承自系統內容類型???

????規則b、 父內容類型ID + “00” + 十六進制GUID,如:0x010100D5C2F139516B419D801AC6C18942556D???

??????? WSS在以下幾種情況下創建內容類型時,將使用此種規則成生內容類型ID:

????????? 1、 基于其它內容類型創建網站內容類型

????????? 2、 當增加一個網站內容類型到某個列表時,系統會將網站內容類型復制到此列表并生成為列表內容類型,此生成的內容類型ID

?????? 在以下幾種情況時,推薦使用GUID方式的內容類型ID:

????????? 1、 繼承自系統默認的內容類型,如文檔內容類型

??????????2、 繼承自第三方開發的內容類型,使用GUID的內容類型ID,能保證內容類型的唯一,并且不會跟將來開發人員繼承此第三方控制生成的新內容類型ID重復

??????? 當你使用GUID方式定義了一個內容類型的ID后,你仍然可以使用第一種方式給繼承于此內容類型的類型命名。使用在ID中的GUID可以擔當命名空間的角色,任何繼承自此內容類型的類型都能加上兩位的十六進制數值來表示新ID,如“0x010100D5C2F139516B419D801AC6C18942556D08

??????? 內容類型ID最大長度為512字節,因為一個字節可以存放兩個十六進制的值,所以一個內容類型ID最多可使用1024個字符。

??????? 下圖是一些系統的ContentType及其ID表

???????

? 這里是一些Content Type ID的例子

1.創建一個content?type,它的GUID?{0BB3F82D-2A62-4b77-833C-28045F765D7B}?,它的Parent是contact?(0x0106),那么,你可以設置其ID如下:
0x0106000BB3F82D2A624B77833C28045F765D7B
2.創建一個content?type,它的GUID?{0E3E8F35-3A21-4ed7-8151-816C48E2D64D}?,它的Parent是document?(0x0101),那么,你可以設置其ID如下:
0x0101000E3E8F353A214ED78151816C48E2D64D
3.創建一個content?type,它的GUID?{A6C62A39-E374-4d8d-9EFE-90DD65B659F8}?,它的Parent是?item?(0x01),那么,你可以設置其ID如下:
0x0100A6C62A39E3744D8D9EFE90DD65B659F8

?? 2、Content Type的Name屬性:就是我們給這個Content Type起的標識名

?? 3、Content Type的Group屬性:我們把這個Content Type劃分入Content Type Group的哪一個組,即分組管理我們的Content Type

?? 4、Content Type的Description屬性: 對這個Content Type的說明

?? 5、Content Type的Inherits屬性: 這個屬性要結合我們后面講的<RemoveFieldRef>元素使用,如果此處設置Interits='True',則<RemoveFieldRef>不會起作用。因此,我們需要取掉它的設置。

?? 6、Content Type的Version屬性:定義它的版本號

??

二、?<FieldRefs>??元素內容

???? ?<FieldRefs>?元素內才是我們真正定義的Content Type的內容,這里我們分別說明

?1、?<RemoveFieldRef>元素 : 此元素定義我們想要移除的Field

?????? 由于我們新增的Content Type是繼承自Picture,所以它擁有Picturey這個Parent Content Type的所有Field,即繼承關系,但在此處,我們不想要從Picture繼承來的"Date Picture Taken" 與 "Picture Size"這兩個Field,所以我們需要作的工作包括 :

????? a.移除Content Type的Inherits屬性

????? b.添加<RemoveFieldRef>元素

???? ?因為如果Content Type的Inherits屬性設置為Ture,則不管我們在這里設置了任何RemoveFieldRef元素,它們都不會起作用,系統會強行讓我們新創建的這個ContentType繼承所有其Parent Content Type所具有的fields,所以我們必須要打破我們新定義的Content Type與它的Parent: Picture之間的繼承關系。

????? 接下來就是我們如何知道我們想要取消的Field它們的ID值呢?

????? 我們可以使用VS2010里的Server Exploer這個工具,當我們使用Server Exploer這個工具建立了與Sharepoint網站的連接后,我們就可以看到此網站的各種對象
???? ???

? 展開ContentType節點,找到Picture節點,然后就可以查看到對應Field的ID號,可以直接復制到本Solution中來。

?

?

2、 <FieldRef>元素 : 定義我們想要添加的新的Field

?? 在本例中,我們添加了兩個Fields,一個是系統本來就有的Site Column,名叫About Me,獲取其ID的方法同上既:使用Server Exploer

?? 我們給了它一個新的DisplayName="Information About this Picture",這個DisplayName將會顯示在Sharepoint的Content Type的管理UI界面上。???

<!--About?Me-->
??????????<FieldRef?ID="{e241f186-9b94-415c-9f66-255ce7f86235}"??DisplayName="Information?About?this?Picture"/>

??? 上面我們添加或移除的都是系統已經存在的Site Columns,如果我們想要操作的Site Column不存在那怎么辦呢,我們既可以通過Sharepoint UI來創建那個Site Column,也可以通過Visual Studio2010來創建,具體的方法參考此文 Sharepoint學習筆記—Site Definition系列-- 創建Site Columns

???

? 接下來請Build和部署此Solution,然后到Sharepoint網站去查看

?

可以看到我們新增的Content Type已經出現在預期的位置

?

并且它的內容正是我們此處所定義的內容(移除了兩個Fields,添加了兩個Fields,其中一個是系統自帶的,一個是我們上文用VS2010開發的)

?

?

???

轉載于:https://www.cnblogs.com/wsdj-ITtech/archive/2012/09/01/2470274.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/260463.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/260463.shtml
英文地址,請注明出處:http://en.pswp.cn/news/260463.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

arduino byte轉string_Java數組轉List集合的三駕馬車

點擊上方 藍字關注我們來源&#xff1a;blog.csdn.net/x541211190/article/details/79597236前言本文中的代碼命名有的可能不太規范&#xff0c;是因為沒法排版的問題&#xff0c;小仙已經很努力去解決了&#xff0c;希望各位能多多點贊、分享。好了&#xff0c;不多bb了(不要讓…

ES6筆記(4)-- Symbol類型

系列文章 -- ES6筆記系列 Symbol是什么&#xff1f;中文意思是標志、記號&#xff0c;顧名思義&#xff0c;它可以用了做記號。 是的&#xff0c;它是一種標記的方法&#xff0c;被ES6引入作為一種新的數據類型&#xff0c;表示獨一無二的值。 由此&#xff0c;JS的數據類型多了…

mysql類型說明_MYSQL 數據類型說明

MySQL支持大量的列類型&#xff0c;它可以被分為3類&#xff1a;數字類型、日期和時間類型以及字符串(字符)類型。本節首先給出可用類型的一個概述&#xff0c;并且總結每個列類型的存儲需求&#xff0c;然后提供每個類中的類型性質的更詳細的描述。概述有意簡化&#xff0c;更…

LeetCode OJ - Convert Sorted List to Binary Search Tree

題目&#xff1a; Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST. 解題思路&#xff1a; 注意是讓構造平衡二叉搜索樹。 每次將鏈表從中間斷開&#xff0c;分成左右兩部分。左邊部分用來構造左子樹&#xff…

手把手教你如下在Linux下如何寫一個C語言代碼,編譯并運行

文章目錄手把手教你如下在Linux下如何寫一個C語言代碼&#xff0c;編譯并運行打開Ubuntu終端創建 helloworld.c編譯C文件手把手教你如下在Linux下如何寫一個C語言代碼&#xff0c;編譯并運行 打開Ubuntu終端 我這里的終端是Windows下的WSL&#xff0c;如果有疑問&#xff0c;…

郵件群發工具的編寫(二)數據的保存

數據的保存與讀取 人類是在不斷探索與改進中進步的 上一篇&#xff0c;郵件群發工具的編寫&#xff08;一&#xff09;郵件地址提取&#xff0c;我們講到了郵箱的提取。 那么這一篇&#xff0c;講一下提取完的郵箱信息的保存和讀取。 首先&#xff0c;我希望對上一篇郵箱提取類…

mysql 文件描述符_MySQL沒有發布臨時文件描述符

幾天前,我們遇到了MySQL安裝的一些嚴重問題&#xff1a;MySQL不斷打開臨時文件(正常行為)但這些文件從未發布過.結果是,最終磁盤空間耗盡,我們必須重新啟動服務并手動清理/ tmp.使用lsof,我們看到這樣的事情&#xff1a;mysqld 16866 mysql 5u REG 8,3 0 692 /tmp/ibyWJylQ (de…

c++ lambda函數_C++11 之 lambda函數的詳細使用

1. lambda 函數概述lambda 表達式是一種匿名函數&#xff0c;即沒有函數名的函數&#xff1b;該匿名函數是由數學中的λ演算而來的。通常情況下&#xff0c;lambda函數的語法定義為&#xff1a;[capture] (parameters) mutable ->return-type {statement}其中&#xff1a;[c…

zabbix監控 openstack 的實例的資源使用情況

領導提出的需求&#xff1a;在不給云主機安裝客戶端的情況下&#xff0c;監控云主機的 cpui 內存 網絡 io&#xff0c;并且能出圖。想了幾個方案&#xff1a;1、ceilometer取數據&#xff0c;存入mangodb&#xff0c;用zabbix來讀mangodb數據繪圖2 ceilometer 取數據 &#xff…

pytorch 正向與反向傳播的過程 獲取模型的梯度(gradient),并繪制梯度的直方圖

記錄一下怎樣pytorch框架下怎樣獲得模型的梯度 文章目錄引入所需要的庫一個簡單的函數模型梯度獲取先定義一個model如下定義兩個獲取梯度的函數定義一些過程與調用上述函數的方法可視化一下梯度的histogram引入所需要的庫 import os import torch import torch.nn as nn impor…

2012-9

響應式設計的典范 http://www.bostonglobe.com/ 網站測試頁面 http://www.webpagetest.org/ 編程算法 http://blog.sina.com.cn/s/articlelist_1647038822_1_1.html C Programmers Cookbook http://www.cppblog.com/mzty/category/7609.html Blade 是一個現代構建系統&#xff…

PV操作 (轉載)

PV操作與信號量的處理相關&#xff0c;P表示通過的意思&#xff0c;V表示釋放的意思。信號量是最早出現的用來解決進程同步與互斥問題的機制&#xff0c;包括一個稱為信號量的變量及對它進行的兩個原語操作。 信號量&#xff08;semaphore&#xff09;的數據結構為一個值和一個…

ubuntu升級python_Ubuntu 升級python3為更高版本【已實測】

2020-04-13 更新安裝步驟&#xff1a; 1. 先update一下 sudo apt update 2. 安裝依賴庫 sudo apt-get install zlib1g-dev libbz2-dev libssl-dev libncurses5-dev libsqlite3-dev libreadline-dev tk-dev libgdbm-dev libdb-dev libpcap-dev xz-utils libexpat1-dev liblzma-d…

mysql5.0 java連接_Java連接mysql5.0

網上的資料真爛&#xff0c;千篇一律的拷貝的&#xff0c;根本不能用&#xff0c;鄙視&#xff01; 正題&#xff1a; 到MYSQL網站下載mysql-connector-java-5.0.4.zip文件&#xff0c;解壓&#xff1b; 解壓后有一個文件&#xff1a;mysql-connector-java-5.0.4-bin.jar 把這個…

Framework打包

2019獨角獸企業重金招聘Python工程師標準>>> iOS app需要在許多不同的CPU架構下運行&#xff1a; arm7: 在最老的支持iOS7的設備上使用 arm7s: 在iPhone5和5C上使用 arm64: 運行于iPhone5S的64位 ARM 處理器 上 i386: 32位模擬器上使用 x86_64: 64為模擬器上使用…

windows 10 下利用WSL的Linux環境實現vscode C/C++環境的配置

本文主要結合二個工具&#xff0c;介紹如何在windows搭建Linux開發環境&#xff1a; WSL(Windows Subsystem for Linux)VSCode(Visual Studio Code) 文章目錄WSL安裝VSCode安裝配置Linux下的C/C環境1. 打開WSL的控制臺2. 更新ubuntu軟件3. 安裝GCC和GDB4. 配置VSCode(1). 打開…

java類初始化順序

轉自&#xff1a;http://zangweiren.iteye.com/blog/208122 對于靜態變量、靜態初始化塊、變量、初始化塊、構造器&#xff0c;它們的初始化順序以此是&#xff08;靜態變量、靜態初始化塊&#xff09;>&#xff08;變量、初始化塊&#xff09;>構造器。我們也可以通過下…

Java 8 - Interface Default Method接口默認方法

Java 8 相比于Java 7 推出了幾大特色&#xff08;features&#xff09;(接口默認方法)default methods in interface, &#xff08;接口靜態方法&#xff09;static method in interface, 函數編程(functional programming)&#xff0c; lamda expression, stream API.這里首先…

Windows 11下 WSL使用 jupyter notebook

這里寫目錄標題前言在WSL下的配置測試運行更優雅的啟動方法配置jupyter生成默認配置文件生成秘鑰修改配置文件nohup啟動前言 一直都使用jupyter notebook&#xff0c;不管做數據分析&#xff0c;還是調試代碼&#xff0c;還有寫文章都是。但是好像在WSL下又不好使。看了網上有…

sql2000導出mysql_如何將sql2000的數據庫導入到mysql中?

展開全部先用SQl2000導出e68a843231313335323631343130323136353331333262373366文本文件&#xff0c;把后綴名改為CSv&#xff0c;再從Mysql中一導入OK參考&#xff1a;第一種是安裝mysql ODBC&#xff0c;利用sql server的導出功能&#xff0c;選擇mysql數據源&#xff0c;進…