2010-09-24 86 views
0

我目前遇到了以编程方式从Sharepoint列表中删除内容类型的问题。我想要做的是我想安装一个更新版本的自定义内容类型(它有额外的字段),所以我选择删除原来的内容并重新添加最新版本。下面是代码:无法以编程方式从Sharepoint列表中删除内容类型

bool requireUpdate = false 
SPContentType tempCtId = existingWeb.AvailableContentTypes["Item"]; 
List<SPListITem> itemsWithTEmpCt = new List<SPListItem>(); 

foreach (SPListItem item in listToUpdate.Items) 
{ 
    if (item.ContentType.Name.Equals(ctToUpdate)) 
    { 
     item["Content Type"] = "Item"; 
     itemsWithTempCt.Add(item); 
     requireUpdate = true; 
    } 
} 

if (requireUpdate) 
{ 
    foreach (SPListItem itemWithTempCt in itemsWithTempCt) 
    { 
     itemWithTEmpCt.File.CheckOut(); 
     itemWithTempCt.Update(); 
     itemWithTEmpCt.File.CheckIn("converted ct"); 
    } 
} 

// reset vars 
requireUpdate = false; 
itemsWithTempCt = new List<SPListItem>(); 

// changing the folder's ct, if any 
foreach (SPListItem folder in listToUpdate.Folders) 
{ 
    if (folder.ContentType.Name.Equals(ctToUpdate)) 
    { 
     folder["Content Type"] = "Item"; 
     itemsWithTempCt.Add(folder); 
     requireUpdate = true; 
    } 
} 

if (requireUpdate) 
{ 
    foreach (SPListItem itemWithTempCt in itemsWithTempCt) 
    { 
     itemWithTempCt.Update(); 
    } 
} 

listToUpdate.ContentTypes[ctToUpdate].Delete(); //<--- exception here 
SPContentType contentTypeToSet = web.AvailableContentTypes[ctToUpdate]; 
listToUpdate.ContentTypes.Delete(tempCtId.Id); 
listToUpdate.ContentTypes.Add(contentTypeToSet); 
//.... 

我选择加入一个项目的内容类型,因为那里是列表(因此我不能删除它)只有1种内容类型。实际情况是,在它说:“这里的例外”的路线,抛出了一个异常:

Content Type is still in use. 

一些google搜索后,我已经尝试了许多不同的情况,但他们没有到目前为止的工作:

- 版本== 1.0的文件夹没有获得更新的内容类型...因此内容类型仍然在使用(非常公平)。

- 所有文档和文件夹都将其内容类型设置为“Item”,但仍抱怨内容类型仍在使用中。回收站中没有任何东西,没有次要版本的文件(文档库不允许它),没有权限问题。

- 项目在工作流程中,但它们已完成。

该列表位于站点级别,例如, web.ParentWeb将为您提供列表。我完全没有想法仍然可以使用内容类型。有没有人有任何想法/或之前遇到过这样的问题?

谢谢。

回答

1

是的,我们之前已经看到,这是由于草稿项目是由其他人创建的,并且从未签入过,因此您无法看到它们。在文档库设置下有一个工具,它允许您获取没有签入版本的签出文件的所有权。

+0

我已经看过结帐文件放在你的建议有基于它的项目的内容类型,找不到任何文件存在。 – BeraCim 2010-09-24 11:33:17

0

我不认为你可以删除

相关问题