2009-08-12 16 views
2

我之前沒有使用過webparts for sharepoint,但需要對webpart進行更改,這需要傳播到大約700個網站。這是對webpart某個屬性的更改,值需要更改。有沒有辦法爲web部件獲取元數據並直接在數據庫中進行更改(我認爲這是它的存儲位置)?WebPart「元數據」?

這裏是場景:Webpart包含它應顯示的文檔類型(內部類型)的逗號分隔列表。現在有新的文檔。需要添加到所有700個網站的類型。我需要一種方法來枚舉網站,獲取webpart元數據,並將這些新的文檔類型添加到webpart。目前他們手動到每個網站,點擊編輯,輸入新的文檔類型,然後保存。

回答

3

正如其他人說,正確的做法是通過編程實現這一點,而不是編輯內容數據庫,這將使您的安裝不受支持。我經常使用控制檯應用程序在由網站模板創建的網站組成的網站集中執行此操作。

以下是更改ListViewWebPart的Title屬性的示例。已更新以包含遞歸循環的代碼。我沒有測試過,但它應該可以工作。

private static void ProcessSiteCollection(string url) 
{ 
    using (SPSite siteCollection = new SPSite(url)) 
    { 
     SPWeb rootWeb = siteCollection.RootWeb; 
     ProcessWebs(rootWeb); 
    } 
} 

private static void ProcessWebs(SPWeb parentWeb) 
{ 
    foreach (SPWeb web in parentWeb.Webs) 
    { 
     try 
     { 
      UpdateWebPart(web); // Set web part properties 
      ProcessWebs(web); // Recursively loop through children 
     } 
     finally 
     { 
      web.Dispose(); 
     } 
    } 
} 

private static void UpdateWebPart(SPWeb web) 
{ 
    using (SPLimitedWebPartManager webPartManager = 
     web.GetLimitedWebPartManager("default.aspx", PersonalizationScope.Shared)) 
    { 
     try 
     { 
      foreach (WebPart webPart in webPartManager.WebParts) 
      { 
        if (webPart.Title == "My Web Part") 
        { 
          ListViewWebPart listViewWebPart = (ListViewWebPart)webPart; 
          listViewWebPart.Title = "Updated Web Part"; 
          webPartManager.SaveChanges(listViewWebPart); 
          web.Update(); 
          break; 
        } 
      } 
     } 
     finally 
     { 
      webPartManager.Web.Dispose(); 
     } 
    } 
} 
+1

這是否適用於我剛添加的場景。所有網站都是從模板創建的。 Sharepoint是否有辦法列舉這些網站,併爲每個網站獲取一個webpart實例? – epitka 2009-08-13 12:44:23

+0

正如我在答覆的第一個版本中所提到的,是的,這是可以做到的,但我省略了它來保持簡短。我現在用一個完整的代碼示例更新了答案。 – 2009-08-13 13:40:01

+0

我們需要在webpart管理器中部署web嗎? – Evgeny 2012-05-25 07:22:48

3

直接訪問sharepoint內容數據庫是一個很大的「不」。這是官方的答案。 :)

這就是說,我只看過內容數據庫,從來沒有試圖實際改變任何手動。

我的建議是修改現有的Web部件,根據當前設置的屬性修改屬性。 (我假設某些當前設置的屬性無效或需要根據對基礎設施的更改進行更新。)...如果是這種情況,可以驗證屬性;確保當前財產更改爲所需財產,並/或確保未來財產更改有效。

祝你好運!

2

切勿

嚴重的是,走不進內容數據庫和編輯。這樣,如果發生任何事情,您不再支持,Microsoft將不再支持您(直到您將數據庫恢復爲備份的早期版本)。

您可以使用API​​來訪問你的網站的webpart,這裏的一些代碼,應該讓你開始:

Enumerate page webparts