2009-03-11 37 views

Trả lời

15

Nếu bạn đang tìm kiếm mã, tôi có thứ gì đó cho bạn. Nếu bạn muốn tìm tất cả các phần web Query Nội dung thì bạn sẽ gọi mã của tôi như thế này:

FindWebPart("http://server.com/", "Microsoft.SharePoint.Publishing.WebControls.ContentByQueryWebPart"); 

Dưới đây là các mã:

public static void FindWebPart(string siteCollectionUrl, string webPartName) 
{ 
    using (SPSite siteCollection = new SPSite(siteCollectionUrl)) 
    { 
     using (SPWeb rootSite = siteCollection.OpenWeb()) 
     { 
      FindWebPartHelper(rootSite, webPartName); 
     } 
    } 
} 

public static void FindWebPartHelper(SPWeb site, string webPartName) 
{ 
    // Search for web part in Pages document library 
    SPList pagesList = null; 
    try 
    { 
     pagesList = site.Lists["Pages"]; 
    } 
    catch (ArgumentException) 
    { 
     // List not found 
    } 

    if (null != pagesList) 
    { 
     SPListItemCollection pages = pagesList.Items; 
     foreach (SPListItem page in pages) 
     { 
      SPFile file = page.File; 
      using (SPLimitedWebPartManager mgr = file.GetLimitedWebPartManager(PersonalizationScope.Shared)) 
      { 
       try 
       { 
        SPLimitedWebPartCollection webparts = mgr.WebParts; 
        foreach (System.Web.UI.WebControls.WebParts.WebPart wp in webparts) 
        { 
         // Here perform the webpart check 
         // For instance you could identify the web part by 
         // its class name 

         if (webPartName == wp.GetType().ToString()) 
         { 
          // Found a match! Now do something... 
          Console.WriteLine("Found web part!"); 
         } 
        } 
       } 
       finally 
       { 
        // Needs to be disposed 
        mgr.Web.Dispose(); 
       } 

      } 
     } 
    } 

    // Check sub sites 
    SPWebCollection subSites = site.Webs; 
    foreach (SPWeb subSite in subSites) 
    { 
     try 
     { 
      FindWebPartHelper(subSite, webPartName); 
     } 
     finally 
     { 
      // Don't forget to dispose! 
      subSite.Dispose(); 
     } 
    } 
} 

Ofcourse, bạn có thể thay đổi chút để mã này. Hiện tại nó có so sánh chuỗi, nhưng thật dễ dàng để thực hiện nó theo cách được đánh máy hơn. Chúc vui vẻ!

+0

vô địch, cảm ơn cho giúp đỡ – nailitdown

+0

Rất vui được giúp đỡ :-) – LeonZandman

+0

Nhân tiện, bạn có nên đánh dấu câu trả lời của mình là câu trả lời hay không bằng cách nhấp vào dấu kiểm? – LeonZandman

3

Bằng cách thay thế, nếu bạn muốn kiểm tra các trang phần web bao gồm các trang mặc định trên các trang web cộng tác, bạn có thể sử dụng đoạn mã sau đó sử dụng tài sản tập tin của đối tượng SPWeb:

private static void FindWebPart(string siteUrl, string webPartName) 
{ 
    using (var site = new SPSite(siteUrl)) 
    { 
     foreach (SPWeb web in site.AllWebs) 
     { 

      foreach (var file in web.Files.Cast<SPFile>().Where(file => file.Name.EndsWith("aspx"))) 
      { 
       FindWebPartOnPage(webPartName, file); 
      } 

      var pagesTemplateType = (SPListTemplateType)Enum.Parse(typeof(SPListTemplateType), "850"); 
      foreach (var documentLibrary in web.Lists.Cast<SPList>().Where(list => list.BaseTemplate == pagesTemplateType || (list.BaseTemplate == SPListTemplateType.DocumentLibrary && list.Title.Contains("Pages")))) 
      { 
       foreach (var file in documentLibrary.Items.Cast<SPListItem>().Where(item => item.File.Name.EndsWith("aspx")).Select(item => item.File)) 
       { 
        FindWebPartOnPage(webPartName, file); 
       } 
      } 

      web.Dispose(); 
     } 
    } 
} 

private static void FindWebPartOnPage(string webPartName, SPFile file) 
{ 
    using (var webPartManager = file.GetLimitedWebPartManager(PersonalizationScope.Shared)) 
    { 
     if (webPartManager.WebParts.Cast<WebPart>().Any(webPart => webPart.GetType().Name == webPartName)) 
     { 
      Console.WriteLine(file.ServerRelativeUrl); 
     } 

     webPartManager.Web.Dispose(); 
    } 
} 

Lưu ý: thư viện Pages được tạo bởi tính năng Publishing không có giá trị BaseTemplate của SPListTemplateType.DocumentLibrary; thay vào đó nó được đại diện bởi một giá trị "ẩn" của 850.

này được gọi một cách tương tự như câu trả lời LeonZandman, tuy nhiên chỉ có tên lớp được sử dụng để cung cấp cho một trận đấu:

FindWebPart("http://yoursite.com/", "MyWebPart"); 
Các vấn đề liên quan