使用Solution添加list模板并根据需要自动创建列表

我们知道SharePoint可以将一个list保存成一个模板,然后使用这个模板创建相同的list。

如果在项目中,也需要创建一些相同的list,那么我们可以把一个list,导出成模板然后添加到solution中,然后根据需要创建list。

具体的方法如下,

1. 导出list模板

使用SharePoint,list setting中的保存模板功能,将list保存为一个模板ListTemplate.stp。然后将这个模板下载下来备用。

2. 在solution中创建一个element,在其下创建一个子文件夹,用来存放列表模板,将创建好的ListTemplate.stp模板上传:

使用Solution添加list模板并根据需要自动创建列表_第1张图片

然后设置ListTemplate.stp的属性如下,一定要将Deployment Type设置为ElementFile,才会随着solution一起部署。同时Deployment Location路径设置如下,以便之后使用代码读取。

使用Solution添加list模板并根据需要自动创建列表_第2张图片

3. 添加feature receiver,在feature被激活的时候,将ListTemplate上传到list template gallery中:

        public override void FeatureActivated(SPFeatureReceiverProperties properties)
        {
            SPWeb web = properties.Feature.Parent as SPWeb;
            SPSite site = web.Site;

            if (null != site)
            {
                string rootDirectory = properties.Definition.RootDirectory;
                if (!rootDirectory.EndsWith(@"\"))
                {
                    rootDirectory = rootDirectory + @"\";
                }

                string path = rootDirectory + "ListTemplate";
                if (Directory.Exists(path))
                {
                    string[] templateFiles = Directory.GetFiles(path, "*.stp", SearchOption.TopDirectoryOnly);
                    SPDocumentLibrary catalog = site.GetCatalog(SPListTemplateType.ListTemplateCatalog) as SPDocumentLibrary;
                    this.UploadTemplate(catalog, templateFiles);
                }
            }
        }
4. 部署solution,并且激活feature之后,就可以在List Gallery中找到ListTemplate.stp模板了。

既然模板已经 有了,根据ListTemplate.stp模板创建list就很简单了,参见以下方法:

        public void CreateListByTemplate(SPSite web)
        {
            SPListTemplateCollection listTemplates = web.Site.GetCustomListTemplates(web);
            foreach (SPListTemplate spListTemplate in listTemplates)
            {
                if(spListTemplate.InternalName.StartsWith("ListTemplate"))
                {
                    try
                    {
                        Guid listId = web.Lists.Add(spListTemplate.Name, spListTemplate.Description, spListTemplate);
                    }
                    catch
                    {
                    }
                }
            }
        }




你可能感兴趣的:(SharePoint,研究)