2010-11-26 5 views
3

У меня есть шаблон библиотеки документов с типом содержимого. Это работает отлично, но единственное, что я хотел бы добавить, это то, что когда пользователь создает экземпляр новой библиотеки документов на основе этого шаблона, у этого есть предопределенная структура папок уже на месте.SharePoint - пользовательская библиотека документов с структурой папок

Я пробовал добавить теги модулей в свой schema.xml, но это, похоже, не работает.

Я знаю, что можно предоставить библиотеку документов с файлами и папками с помощью функции ListInstance, но в этом случае это невозможно. Я бы хотел, чтобы предопределенная структура папок была частью шаблона библиотеки документов.

Возможно ли это?

Благодаря

Маартен

ответ

2

Другой способ (который я должен сделать в блоге в ближайшее время) - это подделка события создания списка. Я добавляю пустое определение представления с пользовательской страницей 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 по умолчанию для отображения вида по умолчанию списка после создания. Пользовательский вид вставляется в схему с единственной целью отпустить какой-либо пользовательский код. Пользовательский код делает, ну, что бы вы ни хотели. После этого вы очищаете, удаляя специальный вид из шаблона и перенаправляя его обратно в представление.

3

Если Вы хотите, чтобы достичь этого, используя определение библиотеки документов. Я не думаю, что это было бы осуществимо. Что вы можете сделать, так это воспользоваться шаблонами библиотеки списков/документов. 1 Создайте пользовательский Doclibary так, как вы хотите. 2. Создайте нужную структуру папок. без загрузки каких-либо документов. 3 Сохраните библиотеку doc в качестве шаблона, перейдя в настройки Doclibray (убедитесь, что вы храните шаблон вместе с содержимым, хранящимся в нем)

+0

У меня было много проблем с шаблонами, созданными таким образом.Особенно, когда в doclib есть поля поиска, что имеет место прямо сейчас ... – 2010-11-29 13:16:51

+0

Ohh Бедный парень, если вы обрабатываете столбцы Lookup, а также в этой библиотеке, я не думаю, что смогу вам в этом помочь , для первого экземпляра списка вы можете сделать то же самое, создав экземпляр списка или добавив тот же код экземпляра списка в определение сайта – 2010-11-29 14:06:24