Другой способ (который я должен сделать в блоге в ближайшее время) - это подделка события создания списка. Я добавляю пустое определение представления с пользовательской страницей aspx к шаблону списка. Пользовательская страница просто выполняет некоторые пользовательские функции в списке, удаляет представление инициализации, а затем перенаправляет на обычный вид. Это немного грязно, и он будет работать, только если список создается через пользовательский интерфейс, но он работает.
Вот очень быстрый пример. У вас уже есть свой шаблон списка. В файле schema.xml добавить новый вид к Views элемента следующим образом:
<Views>
<!-- Below is a blank view used to kick of initialisation after list creation. -->
<View DisplayName="Initialise" Type="HTML" DefaultView="TRUE" WebPartZoneID="Main" SetupPath="pages\Scratch\init.aspx" Hidden="TRUE" Url="_init.aspx">
<Toolbar Type="Standard" />
<ViewHeader />
<ViewBody />
<ViewFooter />
<ViewEmpty />
<ViewFields />
<ViewData />
<Query />
</View>
<!-- standard views would be here -->
</Views>
Вы можете быть в состоянии идти без пустых элементов там. Это было то, что я собирался проверить дальше, прежде чем вести блог. Но это выполнит свою работу. Важными вещами являются:
- Этот вид является первым представлением, а DefaultView имеет значение TRUE.
- В SetupPath установлена пользовательская страница, которую вы предоставите своим решением.
Для пользовательской страницы (init.aspx в моем примере) я просто сделал копию ... \ 12 \ TEMPLATE \ Pages \ viewpage.aspx и изменил то, что наследует страница. Вы можете сделать это с помощью встроенного кода, но я использовал сборку codebehind. Поэтому первая строка этого файла становится:
<%@ Page language="C#" MasterPageFile="~masterurl/default.master" Inherits="SharePointScratch.InitPage,SharePointScratch,Version=1.0.0.0,Culture=neutral,PublicKeyToken=xxxxxxxxxxxxxxxx" %>
И тогда CodeBehind:
using System;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Utilities;
namespace SharePointScratch
{
public class InitPage : System.Web.UI.Page
{
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
SPList list = SPContext.Current.List;
list.ParentWeb.AllowUnsafeUpdates = true;
// Create you folder structure here...
// Fix the views by deleting the initialisation view.
SPView view = SPContext.Current.ViewContext.View;
list.Views.Delete(view.ID);
list.Update();
list.ParentWeb.AllowUnsafeUpdates = false;
// Redirect to the new default view.
SPUtility.Redirect(list.DefaultViewUrl, SPRedirectFlags.Default, this.Context);
}
}
}
В основном, мы полагаемся на поведение SharePoint по умолчанию для отображения вида по умолчанию списка после создания. Пользовательский вид вставляется в схему с единственной целью отпустить какой-либо пользовательский код. Пользовательский код делает, ну, что бы вы ни хотели. После этого вы очищаете, удаляя специальный вид из шаблона и перенаправляя его обратно в представление.
У меня было много проблем с шаблонами, созданными таким образом.Особенно, когда в doclib есть поля поиска, что имеет место прямо сейчас ... – 2010-11-29 13:16:51
Ohh Бедный парень, если вы обрабатываете столбцы Lookup, а также в этой библиотеке, я не думаю, что смогу вам в этом помочь , для первого экземпляра списка вы можете сделать то же самое, создав экземпляр списка или добавив тот же код экземпляра списка в определение сайта – 2010-11-29 14:06:24