2011-06-21 25 views
36

Tôi đã thử tất cả các đề xuất trên web, không có kết quả.Không thể xóa SharePoint 2010 ContentType "Loại nội dung đang được sử dụng".

Tôi đã viết một ứng dụng giao diện điều khiển theo những hướng dẫn: http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spcontenttypecollection.delete.aspx

Các "Usages.Count" là = 0. Tuy nhiên, khi nó cố gắng để xóa các Content Type tôi nhận được một ngoại lệ:

"Nội dung loại đang được sử dụng. "

Đây là cài đặt mới (đang phát triển) hoàn toàn mới. Tôi đã tạo một trang thử nghiệm trong SP Designer, đã tạo một Loại Nội dung, sau đó là một danh sách. Sau đó, tôi đã xóa danh sách, xóa nó khỏi Thùng rác và cố gắng xóa loại nội dung ...... Ugh.

+5

Tôi đã tìm thấy sự cố. Tôi tiếp tục đọc về "hai" tái chế BINS. Tôi tiếp tục kiểm tra trang web và thùng rác "thu thập trang web". Tôi đã bỏ lỡ "liên kết" ở phía trên cùng của các trang mẹ "Recycle BIN" có nhãn "Site Collection Recycle Bin". Sau khi nhấp vào tùy chọn đó (và sau đó chọn "Đã xóa từ người dùng cuối Recycle Bin") Tôi đã có thể loại bỏ các loại nội dung. – Shayne

Trả lời

70

Tôi đã thất vọng bởi vấn đề này cho đến khi tôi tìm thấy nhận xét của bạn. Lời khuyên tuyệt vời.

  1. Xóa khỏi thùng rác của trang web.
  2. Xóa khỏi tuyển tập trang> Cài đặt trang web> Quản trị tuyển tập trang> Thùng rác.
  3. Xóa khỏi Mục Thùng rác của Người dùng Cuối.
  4. Xóa khỏi "Thùng rác của người dùng cuối đã bị xóa".

Đó là rất nhiều việc tái chế! Sau khi hoàn thành, tôi đã có thể xóa loại nội dung.

+6

Cảm ơn bạn đã tiết kiệm cho tôi thêm 6 giờ thất vọng. – skaz

+1

Điều này sẽ được đánh dấu là câu trả lời !! – Nils

+0

Giải pháp này làm việc cho tôi. Đã cứu tôi một thời gian. Cảm ơn. – Ken

0


    using System; 
    using System.Collections.Generic; 
    using Microsoft.SharePoint; 

    namespace Test 
    { 
     class ConsoleApp 
     { 
      static void Main(string[] args) 
      { 
      using (SPSite siteCollection = new SPSite("http://localhost")) 
      { 
       using (SPWeb webSite = siteCollection.OpenWeb()) 
       { 
        // Get the obsolete content type. 
        SPContentType obsolete = webSite.ContentTypes["Test"]; 

        // We have a content type. 
        if (obsolete != null) 
        { 
         IList usages = SPContentTypeUsage.GetUsages(obsolete); 

         // It is in use. 
         if (usages.Count > 0) 
         { 
         Console.WriteLine("The content type is in use in the following locations:"); 
         foreach (SPContentTypeUsage usage in usages) 
          Console.WriteLine(usage.Url); 
         } 

         // The content type is not in use. 
         else 
         { 

         // Delete it. 
         Console.WriteLine("Deleting content type {0}...", obsolete.Name); 
         webSite.ContentTypes.Delete(obsolete.Id); 
         } 
        } 

        // No content type found. 
        else 
        { 
         Console.WriteLine("The content type does not exist in this site collection."); 
        } 
       } 
      } 
      Console.Write("\nPress ENTER to continue..."); 
      Console.ReadLine(); 
      } 
     } 
    } 

Tạo ứng dụng bảng điều khiển với mã trên và chạy dự án đó. Mã này sẽ cho bạn biết các thư viện trong đó các loại nội dung được đính kèm. Sau đó, chỉ cần truy cập thư viện đó và xóa các loại nội dung đính kèm. Sau đó, cuối cùng xóa loại nội dung từ Site Actions -> Site Settings -> Site Content Types hoặc bạn cũng có thể sử dụng đoạn mã trên để xóa loại nội dung.

Điều này làm việc cho tôi hy vọng nó cũng có thể làm việc cho bạn !!! Cảm ơn.

+0

Vì vậy, mọi người đều biết, mã (C#) ở trên chỉ là một "sao chép/dán" của một trong những tôi đã đề cập (và bao gồm URL cho) trong OP.:) – Shayne

5

này hình thức PowerShell script post này cũng làm việc cho tôi

$siteURL = "The Site url" 
$contentType = "Content type Name" 

$web = Get-SPWeb $siteURL 
$ct = $web.ContentTypes[$contentType] 

if ($ct) { 
$ctusage = [Microsoft.SharePoint.SPContentTypeUsage]::GetUsages($ct) 
     foreach ($ctuse in $ctusage) { 
     $list = $web.GetList($ctuse.Url) 
     $contentTypeCollection = $list.ContentTypes; 
     $contentTypeCollection.Delete($contentTypeCollection[$ContentType].Id); 
     Write-host "Deleted $contentType content type from $ctuse.Url" 
     } 
$ct.Delete() 
Write-host "Deleted $contentType from site." 

} else { Write-host "Nothing to delete." } 

$web.Dispose() 
+1

Điều này làm việc cho tôi khi tôi đã có một loại nội dung trang web mà sẽ không xóa ngay cả khi tôi nhìn thấy nó đã được làm trống trong tất cả các thùng rác ở mọi cấp độ. –

+0

Điều này làm việc cho tôi sau khi xóa tất cả các thùng rác và tôi vẫn không thể xóa nó khỏi giao diện người dùng –

+1

Tốt nhất, tôi đã quên CT được sử dụng trên một số trang con và mã xác định nó cho tôi. Chỉ cần thêm một chút: Thông báo bên trong for-each phải bao gồm $ ctuse.Url trong $() để hiển thị URL nơi CT đang được sử dụng: '$ ($ ctuse.Url)' – GBU

6

Bên cạnh những thùng rác có cũng trang gọi là "Quản lý các tập tin mà không có kiểm tra trong phiên bản" dưới "Quyền và Quản lý" trên tài liệu thư viện - các tệp trong đó cũng có thể ngăn việc xóa loại nội dung.

+0

Điều này đã giúp tôi !! –

Các vấn đề liên quan