2009-09-30 20 views
5

Có thể phân tích trang web nào đang được sử dụng không?Sharepoint tìm nơi webpart đang được sử dụng

Tôi muốn xóa một số webparts khỏi máy chủ chia sẻ của mình, nhưng tôi không biết những gì đang được sử dụng và những gì không được sử dụng?

Có giải pháp cho nó không?

Hiện tại đang sử dụng moss2007

Trả lời

5

Mỗi phần web được thêm vào một trang được lưu trữ trong chính trang đó. Không có cửa hàng trung tâm nào ghi lại nơi từng phần web được sử dụng.

Điều này có nghĩa là bạn không cần phải lặp qua từng trang phần web trong trang web để truy xuất thông tin này. Trên mỗi trang, bạn nên kiểm tra tên lắp ráp của các phần web. Thêm tất cả các phần web bạn tìm vào danh sách được xuất sau khi ứng dụng hoàn tất.

Đối tượng SPWeb cho phép bạn truy xuất trình quản lý phần web cho từng trang bằng SPWeb.GetLimitedWebPartManager(). Sử dụng SPLimitedWebPartManager.WebParts property để truy xuất bộ sưu tập các phần web.

4

Alex's answer (lặp qua các trang web -> trang> phần web) là tốt và cách 'đúng' để thực hiện điều này nhưng khá đắt trên một trang web rất lớn.

Cách khác là truy vấn cơ sở dữ liệu. Tất cả các thông báo trước thường áp dụng khi truy cập trực tiếp vào cơ sở dữ liệu: không thay đổi bất cứ điều gì, có thể phá vỡ bất kỳ lúc nào với gói dịch vụ, v.v. nhưng giả sử chúng ta đều là những cậu bé lớn ở đây: -

Trước tiên, bạn cần tìm hiểu số WebPartTypeId của phần web mà bạn quan tâm trong

Tiếp theo chạy trên cơ sở dữ liệu TẤT CẢ nội dung.

SELECT DISTINCT D.SiteID, D.WebId, W.FullURL as WebURL, D.Id As DocumentId, 
       D.DirName, D.LeafName, tp_ID As WebPartSK 
FROM  dbo.Docs D WITH (nolock) 
INNER JOIN dbo.Webs W WITH (nolock) ON D.WebID = W.Id 
INNER JOIN dbo.WebParts WP WITH (nolock) ON D.Id = WP.tp_PageUrlID 
WHERE WP.tp_ListId Is Null AND WP.tp_Type Is Null AND WP.tp_Flags Is Null 
     AND WP.tp_BaseViewID Is Null AND WP.tp_DisplayName Is Null 
     AND WP.tp_Version Is Null 
AND WP.tp_WebPartTypeId='<your web parts id>' 

Bạn có thể làm điều này theo cách khác xung quanh (có được một danh sách tất cả của WebPartTypeId sử dụng) nhưng bạn không thể có được tên lắp ráp từ các hash WebPartTypeId vì vậy bạn sẽ phải làm một số loại danh sách tra cứu của phần web> typeid's.

+1

@Ryan: Chúng tôi không biết @ Active_t's background vì vậy hãy cẩn thận về các giả định ;-) Khi đọc từ cơ sở dữ liệu sử dụng NOLOCK là điều cần thiết để ngăn chặn deadlocks và phải chấp nhận rằng kết quả có thể không chính xác. Xin lỗi nếu rao giảng cho người cải đạo! –

+0

Tôi đã chỉnh sửa để thêm gợi ý không khóa nhưng chúng ta phải nhớ rằng nó không phải là một viên đạn bạc và giới thiệu các vấn đề tiềm năng của riêng nó (dữ liệu ở trạng thái không nhất quán). Bạn có bất kỳ tài liệu tham khảo tốt về cơ hội gây deadlocks? Sẽ tốt hơn nếu có một số câu trả lời dứt khoát về câu trả lời đó, nhưng không ngạc nhiên là dòng chính thức là ... không. – Ryan

+0

Có nói rằng các vấn đề sẽ được gây ra do đọc dữ liệu không nhất quán trong ví dụ này có lẽ là khá nhỏ. – Ryan

3

Một cách khác để làm điều này là sử dụng phần mở rộng Gary Lapointe STSADM, cụ thể enumPageWebParts

stsadm -o gl-enumpagewebparts -url "http://intranet/hr/pages/default.aspx" -verbose

Nó chỉ xuất ra các bộ phận web được sử dụng trên một trang cụ thể nhưng bạn có thể gọi đây là cho mỗi trang trên trang web của bạn hoặc thậm chí thêm lệnh để lặp qua tất cả các trang trong một trang web.

http://stsadm.codeplex.com/

+1

và đó là nguồn mở tôi tin rằng đây có thể là một nơi tốt để bắt đầu tìm kiếm một số mã ví dụ – Colin

1

tôi đã không thành công tạo ra các trang web loại phần id bằng phương pháp bất kỳ, tôi chỉ đơn giản là không nhận được kết quả khi tôi thực hiện truy vấn. Điều này là do id không bao giờ chính xác.

Để giải quyết vấn đề này, tôi đã tạo một trang mới và chèn một thể hiện của phần web mà tôi quan tâm. Sau đó tôi truy vấn bằng LeafName, cho nó trang mà tôi đã tạo (Tốt nhất để làm cho nó độc đáo!) . Điều này trả về một kết quả duy nhất và sau đó tôi có thể sử dụng tp_WebPartTypeId nó trả về để truy vấn toàn bộ cơ sở dữ liệu nội dung.

Vì vậy, nếu bạn gặp sự cố khi tạo id, hãy thử phương pháp này để thay thế.

2

Và trong trường hợp bất kỳ ai đang tìm kiếm cùng một truy vấn cho SharePoint 2013. Dưới đây là. Chế độ xem đã bị xóa vào năm 2013 và tên bảng có cùng các trường là dbo.AllWebParts.

SELECT DISTINCT D.SiteID, D.WebId, W.FullURL as WebURL, D.Id As DocumentId, 
       D.DirName, D.LeafName, tp_ID As WebPartSK 
FROM  dbo.Docs D WITH (nolock) 
INNER JOIN dbo.Webs W WITH (nolock) ON D.WebID = W.Id 
INNER JOIN dbo.AllWebParts WP WITH (nolock) ON D.Id = WP.tp_PageUrlID 
WHERE WP.tp_ListId Is Null AND WP.tp_Type Is Null AND WP.tp_Flags Is Null 
     AND WP.tp_BaseViewID Is Null AND WP.tp_DisplayName Is Null 
     AND WP.tp_Version Is Null 
AND WP.tp_WebPartTypeId='<your web parts id>' 
Các vấn đề liên quan