我目前遇到了以编程方式从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将为您提供列表。我完全没有想法仍然可以使用内容类型。有没有人有任何想法/或之前遇到过这样的问题?
谢谢。
我已经看过结帐文件放在你的建议有基于它的项目的内容类型,找不到任何文件存在。 – BeraCim 2010-09-24 11:33:17