• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
水清木华
博客园    首页    新随笔    联系   管理    订阅  订阅
SharePoint开发:使用Feature创建自定义表单的内容类型和字段

Windows SharePoint Services(WSS) 3.0是微软发布的针对企业级Web站点的开发和管理工具。WSS的工作核心是文档库(Document Library)和列表(List)。两者非常类似,都是数据的组织和存储方式。不同之处在于,文档库是用来存储各种各样的文档的,比如doc,docx,ppt,pdf等等;文档库提供文档的组织和管理方式,让站点的使用者可以共享文档,从而实现工作流(Workflow)。而列表则比较像常规意义上的数据库。

 列表的每一列代表一个栏位(Column),这个栏位的数据类型称为字段(Field)。字段可以有许多种类型,在WSS中预定义的字段包括电话号码,姓氏,名字,创建日期,公司等等。列表的每一行则代表一个数据项。

内容类型(Content Type)可以理解为列表的定义。内容类型定义了列表拥有哪些字段,以及列表的工作流。

实际应用中,我们常常需要不同的、自定义的列表和工作流。虽然WSS的管理界面可以让我们非常简单的为列表创建新的栏位,但是“简单”的代价就是“低效”。试想当我们需要建立许多用处不同但是内容类似的列表时,手工建立栏是一件多么耗时的工作。另一方面,如前所述,WSS提供了有限的预定义的字段。如果我们需要自定义的字段类型,同样需要在管理界面中手工建立,甚为不便。

幸运的是,WSS提供了良好的可扩展平台, 让我们可以自由的定制上述的Filed和Content Type。WSS的这一平台称为“Feature”,即通过编写轻量级的XML文档就可以实现对于WSS中许多内容的定制,包括字段和内容类型。

文件夹 C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\FEATURES存储了WSS的Feature.xml文件。在其中的fields文件夹中定义了WSS内置的字段类型。大家不妨查阅这个xml文件并参考MSDN以了解每个<Field>标签下的属性含义,以及其父标签和子标签。这里需要说明的一个概念是字段类型(Field Type)。每一个字段的定义中,都会出现“字段类型”。所谓字段类型,就是字段的格式,限制和现实方式的定义。举个例子,“姓氏”,“名称”,“部门”是不同的三个字段,但是他们属于同一种字段类型--单行文本(Text)。关于字段类型的具体定义,大家可以参阅C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\XML文件夹下的FLDTYPES.XML文件。

 下面以实例演示如何创建一个自定义的内容类型,包含有自定义的字段,之后用这个内容类型创建一个新的列表。

假设我们要创建一个新的用户管理列表,这个列表包含三个字段,分别是用户名称,用户标识,和用户部门。这三个字段全都是单行文本。

 

第一步:创建Feature.xml

Code
<?xml version="1.0" encoding="utf-8"?>
<Feature Id="0B921908-41B7-11DD-BEE6-541956D89593"
    Title
="用户管理"
    Description
="用户管理列表"
    Version
="1.0.0.0"
    Scope
="Web"
    xmlns
="http://schemas.microsoft.com/sharepoint/">
    
<ElementManifests>
        
<ElementManifest Location="ListTemplates\UserList.xml" />
    
</ElementManifests>
</Feature>

 Feature.xml指明了自定义的内容类型、字段等所在的文件。

 

 第二步:创建UserList.xml

Code
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
    
<ListTemplate
        
Name="userlist"
        Type
="3001"
        BaseType
="0"
        OnQuickLaunch
="FALSE"
        SecurityBits
="11"
        Sequence
="510"
        DisplayName
="用户管理"
        Description
="用户管理列表"
        Image
="/_layouts/images/itgen.gif"/>
  
<Field ID="{858B8476-7CF0-4c34-8EE7-BDFEF3812BF9}"
        Name
="User_Name"
        SourceID
="http://schemas.microsoft.com/sharepoint/v3"
        StaticName
="User_Name"
        Group
="$Resources:Document_Columns"
        DisplayName
="User_Name"
        Type
="Text">
  
</Field>
  
<Field ID="{BF651273-12B7-4efa-AA85-6AF8FB419CAB}"
        Name
="User_Id"
        SourceID
="http://schemas.microsoft.com/sharepoint/v3"
        StaticName
="User_Id"
        Group
="$Resources:Document_Columns"
        DisplayName
="User_Id"
        Type
="Text">
  
</Field>
  
<Field ID="{92487493-2237-401d-9A61-2E12399B9C24}"
        Name
="User_Department"
        SourceID
="http://schemas.microsoft.com/sharepoint/v3"
        StaticName
="User_Department"
        Group
="$Resources:Document_Columns"
        DisplayName
="User_Department"
        Type
="Text">
  
</Field>
</Elements>

 在这个文件中定义了新的字段User_Name,User_Id,User_Department。

 

第三步:创建Schema.xml

 由于Schema.xml太大,这里就不全部贴出来。

我们需要改动三个地方:

(1) 在<List><MetaData>下,添加如下内容

Code
<ContentType ID="0x0303"
        Name
="UserContentType"
        Group
="MyContentTypeGroup"
        Sealed
="TRUE"
        Version
="0">
      
<FieldRefs>
        
<FieldRef ID="{858B8476-7CF0-4c34-8EE7-BDFEF3812BF9}" Name="User_Name" />
        
<FieldRef ID="{BF651273-12B7-4efa-AA85-6AF8FB419CAB}" Name="User_Id" />
        
<FieldRef ID="{92487493-2237-401d-9A61-2E12399B9C24}" Name="User_Department" />
      
</FieldRefs>
    
</ContentType>

 这是新定义的Content Type

 

(2) 在<List><MetaData><Fields>下,添加如下内容

Code
<Field ID="{858B8476-7CF0-4c34-8EE7-BDFEF3812BF9}"
             Name
="User_Name"
             DisplayName
="用户姓名"
             Type
="Text"
             SourceID
="http://schemas.microsoft.com/sharepoint/v3"
             Required
="TRUE"
             StaticName
="User_Name"/>
      
<Field ID="{BF651273-12B7-4efa-AA85-6AF8FB419CAB}"
             Name
="User_Id"
             DisplayName
="用户标示"
             Type
="Text"
             SourceID
="http://schemas.microsoft.com/sharepoint/v3"
             Required
="TRUE"
             StaticName
="User_Id"/>
      
<Field ID="{92487493-2237-401d-9A61-2E12399B9C24}"
             Name
="User_Department"
             DisplayName
="用户部门"
             Type
="Text"
             SourceID
="http://schemas.microsoft.com/sharepoint/v3"
             Required
="TRUE"
             StaticName
="User_Department"/>

 这是对先前定义的Field做一改动和扩展

 

(3) 在 <List><MetaData><Views><View BaseViewID="1"><ViewFields>下(注意,Views标签下一般有两个View标签,这里选第二个),添加如下内容

<FieldRef Name="User_Name" />
<FieldRef Name="User_Id" />
<FieldRef Name="User_Department" />

 这里定义显示在列表当中的栏位

 

至此,我们就创建好了自定义的列表。打开网站的页面,进入创建的页面,点击“用户管理”,填入表名和说明,就可以创建一个新的列表了。

 

最后我想阐述一下我对xml配置文档的理解。早在用ASP.NET做网站的时候,就知道如果在web.config里面写Connection String和Profile的话,就可以非常灵活快捷的实现网站的特性。这里也是一样,虽然SharePoint的网站内容存储在数据库中难以更改,但是微软为我们提供了Feature这一强大的特性,让我们可以自由的扩展网站的内容,而对网站的其他部分不产生任何影响,而且也不需要对特性进行任何编译。另外,在未来可以用编程来实现对于xml文件的读取,从而实现更多的功能。

posted on 2009-07-04 20:25  水清木华  阅读(871)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3