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.mzph.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;进…