2010-11-26 96 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

相關問題