转载原地址:  http://www.cnblogs.com/wsdj-ITtech/archive/2012/09/01/2470274.html

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开发的)

转载 SharePoint【Site Definition 系列】– 创建Content Type的更多相关文章

  1. SharePoint自动化系列——Add content type to list.

    转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 将创建好的content type(若是跨web application需要事先publish c ...

  2. SharePoint自动化系列——Content Type相关timer jobs一键执行

    转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 背景: 在SharePoint Central Administration->Monito ...

  3. SharePoint自动化系列——通过PowerShell创建SharePoint Site Collection

    通过PowerShell创建SharePoint Site Collection,代码如下: Add-PSSnapin microsoft.sharepoint.powershell function ...

  4. 转载-SharePoint 2010 WebPart与Google地图系列 一:创建显示地图的WebPart

    [原] SharePoint 2010 WebPart与Google地图系列 一:创建显示地图的WebPart 摘要: 作为信息化先驱的产品SharePoint 2010竟然对GIS相关技术支持如此有 ...

  5. sharepoint content type publishing

    1. Create 1 Project Team sites (Site1) on SharePoint(可以用普通site)2. Go to http://<PCName>:8080/_ ...

  6. SharePoint Development - Custom Content Type using Visual Studio 2010 based SharePoint 2010

    博客地址 http://blog.csdn.net/foxdave 本文所述均来自之前实际的项目模块 首先再论述一下SharePoint ContentType内容类型 SharePoint的列表和文 ...

  7. SharePoint Site Pages & Application Pages

    转:http://www.wcode.net/plus/view.php?aid=1582071 SharePoint一个很重要的概念就是Site Pages和Application Pages.接触 ...

  8. SharePoint Search之(一):创建Search服务应用程序

    计划写一个关于怎样使用SharePoint Search的系列,包括下面几个方面: (一)创建Search Service Application (二)持续爬网(continues crawl) ( ...

  9. XAML实例教程系列 - 类型转换器(Type Converter)七

    XAML实例教程系列 - 类型转换器(Type Converter) 分类: Windows 8 Silverlight2012-06-25 13:40 961人阅读 评论(0) 收藏 举报 butt ...

随机推荐

  1. UR #13 Ernd

    考试的时候没有注意到可以将(a,b)放在二维平面上之后旋转坐标系,使得转移变成树状数组二维偏序 这样就算我想出来了第二个转移的斜率优化也没有什么卵用啊(摔西瓜 设g(i)表示当前站在第i个水果下面且第 ...

  2. [itint5]三数和为0

    http://www.itint5.com/oj/#20 其实是3sum的变种,有重复数字,但是一开始还是写错了.其实是选定一个后,在右边剩余数组里找2sum,找到一组后继续找. #include & ...

  3. 解读Q_GLOBAL_STATIC(QFontDatabasePrivate, privateDb)

    根据 src/corelib/global.h template <typename T>class QGlobalStatic{public: T *pointer; inline QG ...

  4. Servlet 下载文件

    这几天有点懒散,还好没有忘记看书,上周去了国家图书馆翻阅了一些和Java相关的书籍,其实这些书都是自己以前看过或者听过,按理来说,不应该看自己已经看过的书籍,应该找一些最新的书籍去看,但是每次走到书架 ...

  5. etc/ld.so.conf的使用说明

    这个文件记录了编译时使用的动态链接库的路径.默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件如果你安装了某些库,比如在安装gtk+-2.4.13时它会需要glib-2.0 &g ...

  6. I2C I2S SPDIF

    I2C总线 大多数是用于电视机等家用电器的(显卡与显示器之间的通讯也是)I2S: I2S(Inter—IC Sound)总线, 又称 集成电路内置音频总线,是飞利浦公司为数字音频设备之间的音频数据传输 ...

  7. Git教程(5)常用技巧之本地分支

    http://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E7%AE%80%E4%BB%8B 基础 Git 研发组 ...

  8. The Impact of Garbage Collection on Application Performance

    As we’ve seen, the performance of the garbage collector is not determined by the number of dead obje ...

  9. UVa 11971 (概率) Polygon

    题意: 有一根绳子,在上面随机选取k个切点,将其切成k+1段,求这些线段能够成k+1边形的概率. 分析: 要构成k+1边形,必须最长的线段小于其他k个线段之和才行. 紫书上给出了一种解法,但是感觉理解 ...

  10. win8.1 64 安装用友T3+sql2005-64步骤

    1. 环境:win8.1 64 专业版  4G内存  .net framwork 3.5 2.初始过程及所需软件 安装sql2008数据库,安装完T3发现并不支持此数据库,运行T3老是出现连接数据时的 ...