Еще один метод (о котором я скоро расскажу) - подделать событие создания списка. Я добавляю пустое определение представления с настраиваемой страницей aspx в шаблон списка. Пользовательская страница просто выполняет некоторые пользовательские функции в списке, удаляет представление инициализации, а затем перенаправляет на обычный вид. Это немного грязно, и это будет работать, только если список создан через пользовательский интерфейс, но это работает.
Вот очень быстрый пример. У вас уже есть шаблон списка. В файле schema.xml добавьте новый элемент View к элементу 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 и изменил то, от чего наследуется страница. Вы можете сделать это с помощью встроенного кода, но я использовал сборку кода. Итак, первая строка этого файла становится:
<%@ Page language="C#" MasterPageFile="~masterurl/default.master" Inherits="SharePointScratch.InitPage,SharePointScratch,Version=1.0.0.0,Culture=neutral,PublicKeyToken=xxxxxxxxxxxxxxxx" %>
А потом код:
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 по умолчанию для отображения представления списка по умолчанию после создания. Пользовательский вид вставляется в схему с единственной целью запустить некоторый пользовательский код. Пользовательский код делает, ну что угодно. После этого вы выполняете очистку, удаляя специальный вид из шаблона и перенаправляя обратно в вид.