Невозможно удалить тип контента из списка Sharepoint программно - PullRequest
0 голосов
/ 24 сентября 2010

У меня сейчас проблемы с удалением типа контента из списка 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);
//....

Я решил добавить тип контента Item, потому что в этом списке был только 1 тип контента (поэтому я не могу удалить его). Случилось так, что в строке, где написано «исключение здесь», было сгенерировано исключение:

Content Type is still in use.

После некоторого поиска в Google, я попробовал много разных сценариев, но ни один из них не работал до сих пор:

- папки с версией == 1.0 не обновили свой тип контента ... следовательно, тип контента все еще используется (достаточно справедливо).

- для всех документов и папок для типов содержимого установлено значение «Элемент», но он по-прежнему жалуется, что тип содержимого все еще используется. Ничего в корзине, нет минорной версии файлов (doc lib не позволяет), нет проблем с правами доступа.

- элементы находятся в рабочем процессе, хотя они были завершены.

Список находится на уровне сайта, например web.ParentWeb получит вам список. У меня нет абсолютно никаких идей, что еще можно использовать тип контента. У кого-нибудь есть идеи / или сталкивались с такой проблемой раньше?

Спасибо.

Ответы [ 2 ]

1 голос
/ 24 сентября 2010

да, мы видели это раньше, это было связано с тем, что черновые элементы создавались другими и никогда не регистрировались, поэтому вы не можете их видеть. В настройках doc lib есть инструмент, который позволяет вам взять на себя ответственность за извлеченные файлы, которые не имеют зарегистрированной версии.

0 голосов
/ 26 сентября 2010

Не думаю, что вы можете удалить тип контента, в котором есть элемент на его основе

...