在SharePoint 2013中创建自定义列表的方式有很多,在网站内容页面添加应用程序就可以创建(站点内容-〉 您的应用程序),也可以通过SharePoint Designer 2013创建,而本文将描述的是用Visual Studio 2012 创建自定义列表的内容,因笔者水平有限,如果各位专家高手发现任何疏漏和错误,望不惜赐教!

首先确认您已经准备好了SharePoint环境,并且安装了Visual Studio的插件(没有插件请参考http://yalla.itgroove.net/2012/08/sharepoint-2013-project-templates-for-visual-studio-2012/)。然后打开Visual Studio-〉新建项目选择Office/SharePoint->SharePoint解决方案->SharePoint 2013-空项目,这里名称、位置可以修改。项目的名字就是发布后生成wsp文件的名字, 所以为项目取个友好的名字吧。

接下来进入自定义向导,如果选择“部署为沙盒解决方案”,执行环境将受到限制而仅能访问某些资源,例如不能在代码中提升权限,在SharePoint映射文件夹里添加内容也会受限。但是有些时候您也许只能这样选择,例如从安全管理考虑(沙盒解决方案不会影响整个服务器场)或者您在部署时只有网站集管理员权限而没有场管理员权限。

下面的项目属性将和部署有关。

选择解决方案资源管理器里的项目右键-〉添加-〉新建项-〉Office/SharePoint->列表,为项目取个温暖的名字。我想做个客户信息的列表就叫MyCustomerList。

接着是选择列表设置,可以选择根据模板创建实例,也可以创建新的模版及实例,我这里都创建新的。修改显示名称会影响列表的标题,但也会影响URL。我现在没有直接改成中文,而是在下面的步骤再修改标题。

新建成功后可看到以下内容:功能文件夹、功能文件、列表模板文件夹、列表模板的Elements.xml文件、列表实例文件夹、列表实例的Elements.xml文件,Schema.xml文件等。

打开功能(Feature)文件,可以修改功能标题和说明,部署后在设置->网站设置->网站操作-〉管理网站功能会看到这个功能。一个项目里可以有多个功能文件,一个功能文件里也可以包含多个元素(范围相同的),给每个功能文件也取一个友好的名字,容易辨识(功能文件的名字不要太长,否则用Visual Studio部署时会报错)。将开发包部署并激活功能后,我们开发自定义列表就能用了。

看一下功能属性,这个和部署步骤后的激活功能有关。

切换到清单选项卡看看功能清单,这里包含上面的功能属性和这个功能里的开发元素(自定义列表模板和自定义列表实例)。

打开列表模版和列表实例都有个元素文件Elements.xml,它们的一些属性就定义在这里。注意,这里的Type或TemplateType值,这个值不能和其他项目的有重复,已经有了就要换一个,否则部署时会报错。

在列表选项卡可以修改标题、URL和说明,这回我将标题改为中文(更改会反应在Elements.xml里)。

切换到栏选项卡,现在看到只有一个标题列。再看下内容类型有两个,其中项目是默认值。如果我们另选择添加一个内容类型并把它设为默认值,会发现上面的列变了,可能有好多列!现在理解下内容类型,网上说“内容类型就是由网站栏集合做成的列表模版”,也就是说我一个客户列表可以做多个客户内容类型——个人客户和企业客户,个人客户可以有姓名、性别,年龄等字段,企业用户可以有法人代表、注册资金等字段。 在SharePoint网站中,设置->网站设置->Web 设计器库->网站内容类型里有很多定义好的内容类型,内容类型也可以自己开发,可以继承。

根据需求,添加修改列(使用网格为列表配置列)。如果不需要,可以把默认的列删掉。

也可以选择已有的栏。在SharePoint网站中,设置->网站设置->Web 设计器库->网站栏里有很多定义好的栏,网站栏也可以自己开发。

我这里自己手工输入几个列,选择“类型”和“是否必填”。

注意这里的属性,DisplayName是显示的列名,ID和Name将来在代码里操作可能会使用,要保证其唯一。Type是可以选择可以详细设置的,系统为我们准备了几个Type,我们也可以开发Type--创建自定义字段类型。

修改完上面的栏,再看下内容类型,发现多了个ListFieldsContentType的内容类型,而且被设为默认值,看来这个内容类型是因为刚才调整了列表的栏后自动创建的。因为在部署后,我在网站内容类型中没找到叫这个名字的内容类型,再新建一个列表修改后新的内容类型也叫这个名称,没有冲突,所以我理解这个内容类型是列表私有的。

切换到视图选项卡,可以添加和修改视图,在这里可以选择可用列,也可以对列排序。

现在,打开Schema.xml文件,可以看到我们设置栏、内容类型、视图还有其他很多的内容都在这里,喜欢XML的高手可以直接修改它,作为新手遇到不会写的定义也可以从做好的Schema.xml内容里借鉴。

<?xml version="1.0" encoding="utf-8"?>
<List xmlns:ows="Microsoft SharePoint" Title="MyCustomerList" FolderCreation="FALSE" Direction="$Resources:Direction;" Url="Lists/MyCustomerList" BaseType="0" xmlns="http://schemas.microsoft.com/sharepoint/" EnableContentTypes="TRUE">
<MetaData>
<ContentTypes> <ContentType ID="0x010047da51229e2f4910b4b04d43ef226aa5" Name="ListFieldsContentType"><FieldRefs><FieldRef ID="{092f3bfe-9a30-4d02-bc2f-aa9259caf21c}" Name="CustomerName" /><FieldRef ID="{23550288-91B5-4e7f-81F9-1A92661C4838}" Name="Gender" /><FieldRef ID="{fce16b4c-fe53-4793-aaab-b4892e736d15}" Name="EMail" /><FieldRef ID="{2a464df1-44c1-4851-949d-fcd270f0ccf2}" Name="CellPhone" /><FieldRef ID="{fc2e188e-ba91-48c9-9dd3-16431afddd50}" Name="WorkAddress" /><FieldRef ID="{01cdb1e0-9bc5-442a-8d77-d25e42b0efa5}" Name="Recency" /><FieldRef ID="{bdcf18e5-1b72-4bc7-afc8-76c29e6385b3}" Name="Frequency" /><FieldRef ID="{a943ca8c-a2ad-4a90-8a78-2f6a202f6553}" Name="Monetary" /><FieldRef ID="{c55677bb-5f33-46b9-a51b-4cc7337c295f}" Name="BusinessPage" /><FieldRef ID="{c45e594b-7351-473a-b71c-7c1c52e08df0}" Name="CustomerType" /><FieldRef ID="{277df47f-398c-4049-987b-66520fd77f8a}" Name="Owner" /><FieldRef ID="{284fece0-ca30-4d55-8b37-fad83f509b70}" Name="Sharers" /></FieldRefs></ContentType><ContentTypeRef ID="0x0120" /><ContentTypeRef ID="0x01">
<Folder TargetName="Item" />
</ContentTypeRef></ContentTypes>
<Fields> <Field Name="CustomerName" ID="{092f3bfe-9a30-4d02-bc2f-aa9259caf21c}" DisplayName="客户姓名" Type="Text" /><Field ID="{23550288-91B5-4e7f-81F9-1A92661C4838}" Name="Gender" StaticName="Gender" SourceID="http://schemas.microsoft.com/sharepoint/v3" DisplayName="$Resources:core,Gender_OL;" Group="$Resources:core,Person_Event_Columns;" Type="Choice" Sealed="TRUE" AllowDeletion="TRUE"><CHOICES><CHOICE>$Resources:core,Male;</CHOICE><CHOICE>$Resources:core,Female;</CHOICE></CHOICES></Field><Field ID="{fce16b4c-fe53-4793-aaab-b4892e736d15}" Name="EMail" SourceID="http://schemas.microsoft.com/sharepoint/v3" StaticName="EMail" Group="$Resources:core,Person_Event_Columns;" DisplayName="$Resources:core,E-Mail;" ReadOnly="FALSE" Type="Text" FromBaseType="TRUE" AllowDeletion="TRUE" /><Field ID="{2a464df1-44c1-4851-949d-fcd270f0ccf2}" Name="CellPhone" SourceID="http://schemas.microsoft.com/sharepoint/v3" StaticName="CellPhone" Group="$Resources:core,Person_Event_Columns;" DisplayName="$Resources:core,Mobile_Phone;" Type="Text" IMEMode="inactive" Required="TRUE" /><Field ID="{fc2e188e-ba91-48c9-9dd3-16431afddd50}" Name="WorkAddress" SourceID="http://schemas.microsoft.com/sharepoint/v3" StaticName="WorkAddress" Group="$Resources:core,Person_Event_Columns;" DisplayName="$Resources:core,Address;" Type="Note" NumLines="2" Sortable="FALSE" Required="TRUE" /><Field Name="Recency" ID="{01cdb1e0-9bc5-442a-8d77-d25e42b0efa5}" DisplayName="最近消费时间" Type="DateTime" Format="DateOnly" /><Field Name="Frequency" ID="{bdcf18e5-1b72-4bc7-afc8-76c29e6385b3}" DisplayName="消费频率" Type="Number" Decimals="2" Max="1" Min="0" Percentage="TRUE" /><Field Name="Monetary" ID="{a943ca8c-a2ad-4a90-8a78-2f6a202f6553}" DisplayName="消费金额" Type="Currency" /><Field Name="BusinessPage" ID="{c55677bb-5f33-46b9-a51b-4cc7337c295f}" DisplayName="业务系统链接" Type="URL" Required="TRUE" /><Field Name="CustomerType" ID="{c45e594b-7351-473a-b71c-7c1c52e08df0}" DisplayName="客户类型" Type="Choice" Required="TRUE" List="Lists/CustomerTypeList" ShowField="Title"><CHOICES><CHOICE>钻石</CHOICE><CHOICE>白金</CHOICE><CHOICE>黄金</CHOICE><CHOICE>白银</CHOICE><CHOICE>青铜</CHOICE><CHOICE>精钢</CHOICE><CHOICE>垃圾</CHOICE></CHOICES></Field><Field Name="Owner" ID="{277df47f-398c-4049-987b-66520fd77f8a}" DisplayName="所有者" Type="User" Required="TRUE" UserSelectionMode="PeopleOnly" /><Field Name="Sharers" ID="{284fece0-ca30-4d55-8b37-fad83f509b70}" DisplayName="分享者" Type="UserMulti" Required="TRUE" Mult="TRUE" /></Fields>
<Views> <View BaseViewID="0" Type="HTML" MobileView="TRUE" TabularView="FALSE">
<Toolbar Type="Standard" />
<XslLink Default="TRUE">main.xsl</XslLink>
<RowLimit Paged="TRUE">30</RowLimit>
<ViewFields> <FieldRef Name="LinkTitleNoMenu"></FieldRef></ViewFields>
<Query>
<OrderBy> <FieldRef Name="Modified" Ascending="FALSE"></FieldRef></OrderBy>
</Query>
<ParameterBindings>
<ParameterBinding Name="AddNewAnnouncement" Location="Resource(wss,addnewitem)" />
<ParameterBinding Name="NoAnnouncements" Location="Resource(wss,noXinviewofY_LIST)" />
<ParameterBinding Name="NoAnnouncementsHowTo" Location="Resource(wss,noXinviewofY_ONET_HOME)" />
</ParameterBindings>
</View><View BaseViewID="1" Type="HTML" WebPartZoneID="Main" DisplayName="$Resources:core,objectiv_schema_mwsidcamlidC24;" DefaultView="TRUE" MobileView="TRUE" MobileDefaultView="TRUE" SetupPath="pages\viewpage.aspx" ImageUrl="/_layouts/15/images/generic.png?rev=23" Url="AllItems.aspx">
<Toolbar Type="Standard" />
<XslLink Default="TRUE">main.xsl</XslLink>
<JSLink>clienttemplates.js</JSLink>
<RowLimit Paged="TRUE">30</RowLimit>
<ViewFields> <FieldRef Name="LinkTitle"></FieldRef><FieldRef Name="CustomerName" /><FieldRef Name="Gender" /><FieldRef Name="EMail" /><FieldRef Name="CellPhone" /><FieldRef Name="WorkAddress" /><FieldRef Name="Recency" /><FieldRef Name="Frequency" /><FieldRef Name="Monetary" /><FieldRef Name="BusinessPage" /><FieldRef Name="CustomerType" /><FieldRef Name="Owner" /><FieldRef Name="Sharers" /></ViewFields>
<Query>
<OrderBy> <FieldRef Name="ID"></FieldRef></OrderBy>
</Query>
<ParameterBindings>
<ParameterBinding Name="NoAnnouncements" Location="Resource(wss,noXinviewofY_LIST)" />
<ParameterBinding Name="NoAnnouncementsHowTo" Location="Resource(wss,noXinviewofY_DEFAULT)" />
</ParameterBindings>
</View></Views>
<Forms>
<Form Type="DisplayForm" Url="DispForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" />
<Form Type="EditForm" Url="EditForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" />
<Form Type="NewForm" Url="NewForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" />
</Forms>
</MetaData>
</List>

开发已经完成了了,现在用Visual Studio将项目部署,进入网站已经能看到我的客户列表。

 

再选择Visual Studio发布,生成了一个.wsp的文件-SharePointProject1.wsp(SharePointProject1是项目名),这个文件就可以拿到生产环境部署了。

最后出于好奇,我把wsp文件解压缩,看看里面是什么(如果您的机器上的压缩软件不能直接解压,可尝试修改后缀名为cab。)。我看到的首先是一个清单文件(manifest.xml),一个DLL文件(SharePointProject1.dll),还有一个功能文件夹。打开清单文件看到里面有项目属性的信息,DLL文件和功能文件夹位置等;反编译DLL文件,看到的主要是程序集信息,因为这个项目没写什么C#代码,这里内容非常少。接着再打开功能文件夹,看到的是功能清单文件(Feature.xml),列表模版文件夹(MyCustomerList)、列表实例文件夹(MyCustomerList)。功能清单文件里有功能的属性信息、列表模版和列表实例的元素位置。列表模版和列表实例文件夹里都装着各自的元素文件(Elements.xml),其中列表模板文件夹里还有个Schema.xml文件,我们开发的东西都找到了!

  

参考资料:

1、《在 SharePoint 2010 中创建自定义列表定义》

http://msdn.microsoft.com/zh-cn/library/ff728096(v=office.14).aspx

2、《创建 SharePoint 的网站栏、内容类型和列表》

http://msdn.microsoft.com/zh-cn/library/vstudio/ee231593(v=vs.110).aspx

3、《创建自定义字段类型》

http://msdn.microsoft.com/zh-cn/library/bb862248(office.14).aspx

微软Web平台安装器下载:

http://www.microsoft.com/web/downloads/platform.aspx

SharePoint 2013开发入门探索(一)- 自定义列表的更多相关文章

  1. SharePoint 2013开发入门探索(二)- 列表操作

    我们如何用代码对SharePoint列表做些例如增删改查的操作呢?如果您的程序可以部署到服务器上,就可以使用 服务器对象模型,因为服务器对象模型提供的功能最多,限制最少:否则可能要选择客户对象模型等其 ...

  2. 跟我学SharePoint 2013视频培训课程——探索默认的列表和库(6)

    课程简介 第6天,探索默认的列表和库. 视频 SharePoint 2013 交流群 41032413

  3. 移动设备和SharePoint 2013 - 第5部分:自定义应用

    博客地址:http://blog.csdn.net/foxdave 原文地址 在该系列文章中,作者展示了SharePoint 2013最显著的新功能概观--对移动设备的支持. 该系列文章: 移动设备和 ...

  4. SharePoint 2013 开发——概述

     博客地址:http://blog.csdn.net/FoxDave 近来阅读SharePoint 2013开发一书,带着与大家一起分享其中的内容. 部署场景: 本地部署(On-Premise D ...

  5. SharePoint 2013 开发——开发自定义操作APP

    博客地址:http://blog.csdn.net/FoxDave 自定义操作即我们所说的Ribbon和ECB(Edit Control Block),在SharePoint 2013之前,我们可以 ...

  6. SharePoint 2013 开发教程

    做了SharePoint有三年了,大家经常会问到,你的SharePoint是怎么学的,想想自己的水平,也不过是初级开发罢了.因为,SharePoint开发需要接触的东西太多了,Windows操作系统. ...

  7. 系列文章--SharePoint 2013 开发教程

    做了SharePoint有三年了,大家经常会问到,你的SharePoint是怎么学的,想想自己的水平,也不过是初级开发罢了.因为,SharePoint开发需要接触的东西太多了,Windows操作系统. ...

  8. SharePoint 2013 Designer 入门教程

    SharePoint的使用中,SharePoint Designer是非常重要的工具,我们可以通过Designer设计页面.母版页,维护.管理站点,也可以定制列表表单.数据视图,设计工作流等等.下面总 ...

  9. SharePoint 2013 状态机工作流之扩展自定义状态

    当我们使用SharePoint 2013的状态机工作流时,发现一个非常不爽的事情,就是SharePoint 所有的工作流状态,都是固定的那些,没办法显示我们自定义的状态,后来经过Google发现,原来 ...

随机推荐

  1. 很不错的sql练习题(select)

      创建表和输入数据 CREATE TABLE STUDENT (SNO VARCHAR(3) NOT NULL,    SNAME VARCHAR(4) NOT NULL,    SSEX VARC ...

  2. Java内部类,枚举

    模式: 模板模式: 简单工厂模式: 适配器模式:  interface ICellPhone  {   void sendMsg();  } class Android implements ICel ...

  3. 去除bootstrap模态框半透明阴影

    当使用bootstrap模态框默认自带半透明阴影,如果想要去除阴影,需要怎么做呢? 今天在项目中我遇到了这个问题,想要去除模态框的阴影,试了好久都没解决.后来问同事的时候才知道,当模态框弹出后,会加上 ...

  4. 双二次Lagrange 有限元计算特征值程序(基于iFEM)

    function lambda = c0P2(h) %% Mesh [node,elem] = squarequadmesh([,,,],h); elem = elem(:,[,,,]); showm ...

  5. Vue.JS入门学习随笔

    PS:先说说学习Vue的缘由吧,学习完了React之后,突然发现又出了一款叫做vue的框架,而且据说可以引领又一波新框架的潮流,我容易吗我!!!   Vue.js(读音 /vjuː/, 类似于view ...

  6. CSS3 结构伪类选择器 详解

    1 CSS3 结构伪类选择器 1.E:root 匹配E元素所在的根元素 即:html 2. E:nth-child(n) (1)匹配E元素的父元素中第n个子元素,(2)且该位置的子元素类型必须是E类型 ...

  7. 【Android端 APP 内存分析】使用工具进行APP的内存分析

    Android端可以通过adb 命令直接获取内存信息,当然Android studio也提供了对内存的监控分析工具,并且后续可以结合MAT做分析 今天介绍的是通过Android studio和MAT工 ...

  8. Jquery动态在td中添加checkbox

    如图:想要在这个id为headId的<td>中,用jquery动态添加checkbox 代码如下 : data是我用ajax 从后台获取的数据,里面含有若干个user类,我想把所有的人名字 ...

  9. Windows XP SP3 VC6环境下成功编译openssl-0.9.8zh

    1.下载openssl-0.9.8zh解压到f:\openssl-0.9.8zh 下载nasm-2.12.03rc1解压到D:\develop\nasm-2.12.03rc1并把添加到系统环境变量PA ...

  10. 【Lua】Lua的几点优化原则

    Lua是一门以性能著称的脚本语言,被广泛的应用在很多方面,比如很多游戏的插件. 很多时候,没有必要去考虑性能的问题,不过,如果我们在开始编写代码的时候就以更适当,性能更高的方式与结构去组织代码,对于程 ...