2010-11-26 81 views
3

我有一个具有内容类型的自定义文档库模板。这工作正常,但我想补充的唯一的事情是,当用户实例化基于该模板的新文档库时,该文档库已经具有预定义的文件夹结构。SharePoint - 具有文件夹结构的自定义文档库

我已经尝试在我的schema.xml中添加Module标签,但这似乎并不奏效。

我知道可以通过ListInstance功能配置带有文件和文件夹的文档库,但在这种情况下这是不可能的。我希望预定义的文件夹结构是文档库模板的一部分。

这可能吗?

感谢

马腾

回答

2

另一种方法(我必须尽快博客上)保存文档库为模板是假的列表创建事件。我添加一个空的视图定义与自定义aspx页到列表模板。自定义页面仅执行列表中的一些自定义功能,删除初始化视图,然后重定向到普通视图。这有点乱,而且只有在通过UI创建列表时才会有效,但它起作用。

这是一个非常快速的例子。你已经有你的列表模板。在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 \模板\网页\ 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默认行为,以显示创建后列表的默认视图。在架构中插入自定义视图的唯一目的是引发一些自定义代码。自定义代码可以,无论你想要什么。在此之后,您通过从模板中删除特殊视图并重定向回视图进行清理。

3

如果你想实现这一点使用文档库定义。我不认为这是可以实现的。你可以做的是帮助列表/文档库模板。 1按照需要创建自定义Doclibary。 2.创建所需的文件夹结构。无需上传任何文件。 3,通过将Doclibray设置(请确保您存储存入其与内容一起模板)

+0

我用这种方式创建了很多模板问题。特别是当doclib中存在查找字段时,现在就是这种情况... – 2010-11-29 13:16:51

+0

哦,可怜的家伙,如果你正在处理查找列以及在这个库中,我不认为我能在这种情况下帮助你很多。对于列表的第一个实例,您可以通过创建列表实例或通过在网站定义中添加相同的列表实例代码来完成相同的操作 – 2010-11-29 14:06:24

相关问题