在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内容里借鉴。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <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">
  3. <MetaData>
  4. <ContentTypes>
  5.  
  6. <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">
  7. <Folder TargetName="Item" />
  8. </ContentTypeRef></ContentTypes>
  9. <Fields>
  10.  
  11. <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>
  12. <Views>
  13.  
  14. <View BaseViewID="0" Type="HTML" MobileView="TRUE" TabularView="FALSE">
  15. <Toolbar Type="Standard" />
  16. <XslLink Default="TRUE">main.xsl</XslLink>
  17. <RowLimit Paged="TRUE">30</RowLimit>
  18. <ViewFields>
  19.  
  20. <FieldRef Name="LinkTitleNoMenu"></FieldRef></ViewFields>
  21. <Query>
  22. <OrderBy>
  23.  
  24. <FieldRef Name="Modified" Ascending="FALSE"></FieldRef></OrderBy>
  25. </Query>
  26. <ParameterBindings>
  27. <ParameterBinding Name="AddNewAnnouncement" Location="Resource(wss,addnewitem)" />
  28. <ParameterBinding Name="NoAnnouncements" Location="Resource(wss,noXinviewofY_LIST)" />
  29. <ParameterBinding Name="NoAnnouncementsHowTo" Location="Resource(wss,noXinviewofY_ONET_HOME)" />
  30. </ParameterBindings>
  31. </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">
  32. <Toolbar Type="Standard" />
  33. <XslLink Default="TRUE">main.xsl</XslLink>
  34. <JSLink>clienttemplates.js</JSLink>
  35. <RowLimit Paged="TRUE">30</RowLimit>
  36. <ViewFields>
  37.  
  38. <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>
  39. <Query>
  40. <OrderBy>
  41.  
  42. <FieldRef Name="ID"></FieldRef></OrderBy>
  43. </Query>
  44. <ParameterBindings>
  45. <ParameterBinding Name="NoAnnouncements" Location="Resource(wss,noXinviewofY_LIST)" />
  46. <ParameterBinding Name="NoAnnouncementsHowTo" Location="Resource(wss,noXinviewofY_DEFAULT)" />
  47. </ParameterBindings>
  48. </View></Views>
  49. <Forms>
  50. <Form Type="DisplayForm" Url="DispForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" />
  51. <Form Type="EditForm" Url="EditForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" />
  52. <Form Type="NewForm" Url="NewForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" />
  53. </Forms>
  54. </MetaData>
  55. </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. 使用github参与开源项目

    github上有很多非常优秀的开源项目,作为开源项目的受益者,你否想过为开源项目贡献自己的代码?

  2. [原创]Lodop打印, 以及Lodop引用css文件控制打印样式的问题.

    最近在做Lodop打印功能: 思路是:  用MasterPage搭个打印页面的框架, 然后在具体的页面中填入数据, 打印的样式由母版页和CSS来控制. 困扰了一天的问题是:  在打印的JS文件中, 引 ...

  3. python学习文章

    推荐大家看看,这几个涉及到解决问题了 用机器学习算法解决问题(图文+程序) http://www.bida.org.cn/index.php?qa=7 数据的价值是提升业务而不仅仅是用户画像 http ...

  4. String 与 StringBuffer的区别

    String="a" 的方式每相加一次就创建一个新的常量,原常量不消失,比较占内存:StringBuffer是放在堆里面,append直接在原地址相加,不占内存

  5. Struts2 有关于无法正常的使用通配符

    今天使用struts 2.3.4版本,做了一个通配符的小测试,结果其他的Action都能正常的使用,但是使用通配符的Action不能正常的使用.网上找了很久,最后发现,貌似strust2.3版本以上的 ...

  6. Tcc学习笔记(三) 使用举例

    TCC的使用以使用第三方库为例子,例子包括:OpenGL , GMP以及SDL等. 1.TCC使用GLUT 去OpenGL下载http://www.opengl.org/resources/libra ...

  7. mvc 项目下 webservice 程序无法运行

    错误描述: 可以出现调用HelloWorld的界面 点击调用按钮报无法找到该资源 错误分析: 把webservice当成controller了. 解决: global中 添加  routes.Igno ...

  8. JSP开发模式2(计算器)

    CalculatorBean———————————————————————————————————————————— public class CalculatorBean {    private ...

  9. C# WebBrowser 网页缩放的方法

    1.引用COM:MicroSoft Internet Controls 2. 核心代码如下: private void button2_Click(object sender, EventArgs e ...

  10. 网络编程——URL编程

    URL:是统一资源定位器的简称,它表示Internet某一资源的地址.通过URL我们可以访问Internet上的各种网络资源,比如最常见的www,ftp站点.浏览器通过解析给定的URL可以在网络上查找 ...