SharePoint 2013 Create Folder with conententtype programer
记录一下昨天写的SharePoint tool,需求是这样的:
在SharePoint list subfolder 下创建1000个folder,这些folder指定特殊的contenttype,contenttype中有一个Taxonomy类型的field,为这个filed赋值,并且新创建的这些folder下只能创建指定contenttype的file。
创建folder的代码如下:
public static void CreatFolder(string siteUrl)//传入site url { using (SPSite site = new SPSite(siteUrl)) { using (SPWeb web = site.OpenWeb()) { SPList list = web.Lists.TryGetList("your list title"); if (list != null) { SPSecurity.RunWithElevatedPrivileges(() => { web.AllowUnsafeUpdates = true; SPFolder BAFolder = list.RootFolder.SubFolders.Cast<SPFolder>(). FirstOrDefault(f => f.Name.Equals("your folder name or root folder", StringComparison.OrdinalIgnoreCase)); if (BAFolder.Exists) { TaxonomyFieldValue taxonomyFieldValue = GetTaxonomyFieldValue(site, list); for (int i = 100000; i < 101001; i++) { string gvName = "GV" + i; SPListItem newItem = list.Items.Add(BAFolder.ServerRelativeUrl, SPFileSystemObjectType.Folder, gvName); newItem[SPBuiltInFieldId.ContentTypeId] = list.ContentTypes["your content type name"].Id; newItem.Update(); newItem["Title"] = gvName;
//为Taxonomy field 赋值 newItem["your taxonomy field internal name"] = taxonomyFieldValue; newItem.Update(); list.Update();
//为新创建的folder指定UniqueContentTypeOrder即在new folder下只能创建UniqueContentTypeOrder中包含的contenttype类型的file or folder SPFolder gvFolder = newItem.Folder; Collection<SPContentType> gvFolderOrderedContentTypes = new Collection<SPContentType>(); for (int j = 0; j < list.ContentTypes.Count; j++) { if (list.ContentTypes[j].Name == "your contenttype name") { gvFolderOrderedContentTypes.Add(list.ContentTypes[j]); } } gvFolder.UniqueContentTypeOrder = gvFolderOrderedContentTypes; gvFolder.Update(); } } web.AllowUnsafeUpdates = false; }); } } } }
private static TaxonomyFieldValue GetTaxonomyFieldValue(SPSite site, SPList list) { TaxonomySession session = new TaxonomySession(site); TermStore termStore = session.TermStores["Managed Metadata Service"]; Group group = termStore.Groups["group name"]; TermSet termSet = group.TermSets["termset name"]; Term term = termSet.Terms["term name"];
//获取TaxonomyFieldValue TaxonomyField taxonomyField = list.Fields["your taxonomy field name"] as TaxonomyField; TaxonomyFieldValue taxonomyFieldValue = new TaxonomyFieldValue(taxonomyField); taxonomyFieldValue.TermGuid = term.Id.ToString(); taxonomyFieldValue.Label = term.Name; return taxonomyFieldValue; }
希望对大家有所帮助!