Как быстро и просто программным способом назначить для списка свои
формы, лежащие в _layouts? Для этого нужно взять у списка нужный тип
содержимого и подменить часть XML в его определении. Для примера
возьмём первый попавшийся тип содержимого и назначим ему формы просмотра
и редактирования:
1 вариант:
2 вариант:
1 вариант:
var ct = list.ContentTypes[0]; string ns = "http://schemas.microsoft.com/sharepoint/v3/contenttype/forms/url"; var xml = new System.Xml.XmlDocument(); xml.LoadXml( "<FormUrls xmlns=\"" + ns + "\">" + "<Display>_layouts/MyDisplayForm.aspx</Display>" + "<Edit>_layouts/MyEditForm.aspx</Edit>" + "</FormUrls>"); ct.XmlDocuments.Delete(ns); ct.XmlDocuments.Add(xml); ct.Update();
2 вариант:
public static void AddFormToList(SPWeb web, string sitePrefix, string listname, string formName, string webPartName, PAGETYPE pageType) { string errorMessage = "Import error"; web.AllowUnsafeUpdates = true; //get current list SPList currentList = web.Lists.TryGetList(listname); if (currentList == null) return; //get web part gallery SPList wpGallary = ListTools.GetListByRelativePath(web, "_catalogs/wp"); if (wpGallary == null) return; if (!formName.Contains(".aspx")) formName = formName + ".aspx"; //get root folder SPFolder root = currentList.RootFolder; //form url string customFormUrl = SPUrlUtility.CombineUrl(web.ServerRelativeUrl, "/" + root.Url + "/" + formName); //get page SPFile page = web.GetFile(customFormUrl); if (!page.Exists) page = root.Files.Add(customFormUrl, SPTemplateFileType.FormPage); //get part from gallery SPListItemCollection collect = wpGallary.GetItems(new SPQuery() { Query = string.Format("<Where><Eq><FieldRef Name='Title'/><Value Type='Text'>{0}</Value></Eq></Where>", webPartName) }); if (collect.Count > 0) { using (SPLimitedWebPartManager wpmgr = page.GetLimitedWebPartManager(PersonalizationScope.Shared)) { //add empty part DataFormWebPart webPart = new DataFormWebPart(); IListWebPart part = webPart; part.ListId = currentList.ID; part.PageType = pageType; wpmgr.AddWebPart(webPart, "Main", 1); //add custom part string webpartString = web.GetFileAsString(web.Url + "/" + collect[0].File.Url); string webPartXml = new StringReader(webpartString).ReadToEnd(); XmlTextReader reader = new XmlTextReader(new StringReader(webPartXml)); System.Web.UI.WebControls.WebParts.WebPart importWebPart = wpmgr.ImportWebPart(reader, out errorMessage); importWebPart.Title = webPartName; wpmgr.AddWebPart(importWebPart, "Main", 0); } switch (pageType) { case PAGETYPE.PAGE_DISPLAYFORM: currentList.DefaultDisplayFormUrl = customFormUrl; break; case PAGETYPE.PAGE_EDITFORM: currentList.DefaultEditFormUrl = customFormUrl; break; case PAGETYPE.PAGE_NEWFORM: currentList.DefaultNewFormUrl = customFormUrl; break; default: break; } currentList.Update(); } web.AllowUnsafeUpdates = false; }
Комментариев нет:
Отправить комментарий