我有一个包含内容类型的自定义文档库模板。这很好但我唯一想补充的是当用户基于该模板实例化一个新的文档库时,它已经有一个预定义的文件夹结构。
我尝试在schema.xml中添加Module标签,但这似乎不起作用。
我知道可以使用带有ListInstance功能的文件和文件夹来配置文档库,但在这种情况下这是不可能的。我希望预定义的文件夹结构是文档库模板的一部分。
这可能吗?
由于
马腾
答案 0 :(得分:3)
如果您想使用文档库定义来实现此目的。我不认为这是可以实现的。您可以做的是获取列表/文档库模板的帮助。 1以您希望的方式创建自定义Doclibary。 2.创建所需的文件夹结构。没有上传任何文件。 3,通过转到Doclibray设置将文档库另存为模板(确保将模板与存储在其中的内容一起存储)
答案 1 :(得分: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>
你可能没有那里的空元素。这是我在博客之前要进一步测试的东西。但这将完成工作。重要的是:
对于自定义页面(在我的示例中为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默认行为在创建后显示列表的默认视图。在架构中插入自定义视图,其唯一目的是触发一些自定义代码。无论你想要什么,自定义代码都可以。在此之后,通过从模板中删除特殊视图并重定向回视图来清理。