在SharePoint开发中,列表是一个很方便也头疼的功能,方便在于通过浏览器就可以很容易定制列表的栏位,包括栏位类型和试图等等,头疼的地方在于在开发完了部署到生产环境时不太好弄,第一次部署的时候倒是可以使用数据库还原的方式,但是要追加修改的话,就很麻烦,只能在开发环境先配一遍,然后在生产环境再重新配一遍,如果不小心配错了,还很麻烦,可能要调试半天才能发现问题。另外,如果多个人共同开发一个项目,要合并各自对列表的修改也很麻烦。
总之,要是直接在生产上使用,倒是很方便,但是对于开发人员来说,就比较痛苦。
想了许久,也查了很多资料,终于找到了一个对于开发人员来说比较好的解决方法,就是通过Visual Studio开发List模板,部署到系统中后,手工或者通过脚本创建列表实例,后续若修改列表都通过修改VS项目中的列表模板,而不是通过OOB的方式来做,系统中的列表实例会自动根据模板更新。
这样,多人开发时,可使用TFS统一对列表模板进行维护,在各自开发环境开发只要部署最新的代码,都是最新的列表,从开发多次部署到生产环境时,也只要部署解决方案,创建新的列表实例就可以了,不需要一遍遍通过浏览器配置了。
这种方法稍微麻烦点的地方是,VS里配置List没有浏览器或者SPD方便,尤其对于Lookup型字段,都需要修改schema.xls来指定Lookup字段的List和ShowField字段,其中List要指定GUID值,设置view也只能靠改schema来完成。
看看能不能通过SPD先创建再导出一份schema?
总体来说,对于开发人员是利大大于弊,列表只需要配置一次,后续部署生产同步都很容易了。
详细操作步骤如下:
- 在VS项目中添加一个新项目,选择列表
输入列表名称,选择列表模板类型
- 创建完列表,设置列表的栏及栏类型,栏名先输入英文,再改成中文,以便于后续开发在代码中引用,若直接中文,后续在引用列表栏时需使用中文的UNICODE,非常麻烦而且不直观。
- 在VS解决方案浏览器里可看到列表包括如下图的几个文件
List1Instance->Elements.xml
Elements.xml
Schema.xml
在这可以多说几句,在Sharepoint里列表有列表模板和列表实例两个概念,列表模板定义了列表的结构,比如在浏览器里新建一个列表时可以看到很多列表模板,比如自定义列表、任务等,而列表实例就是网站里实际的一个列表,每个网站实例都是基于列表模板创建的,当模板发生了变化,实例也会跟着修改,有点类似类和类的对象。
在这,为了确保重复部署解决方案时不会导致网站已有的列表实例被破坏,也就是不会导致已有列表的数据被删掉,可以直接删掉ListInstance文件,这样在部署时只会更新列表模板,而列表实例会自动按照新的模板刷新。
重点是Schema.xml,MSDN上有详细的List Schema介绍
对于Lookup型的字段,我们需要在Schema.xml文件中找到对应的字段,设置List和ShowField字段,如:
其中List的GUID可以通过VS连接到Sharepoint站点查看列表的ID属性:工具->连接到Sharepoint