2010-09-24 4 views
0

Je rencontre actuellement des problèmes pour supprimer un type de contenu d'une liste Sharepoint par programmation. Ce que je voulais faire, c'est que je veux installer une version plus récente d'un type de contenu personnalisé (il a des champs supplémentaires), j'ai donc choisi de supprimer l'original et de rajouter le dernier. Voici le code:Impossible de supprimer le type de contenu d'une liste Sharepoint par programme

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); 
//.... 

moi avons décidé d'ajouter un type de contenu de l'article, car il n'y avait que 1 type de contenu sur cette liste (je ne peux donc pas le supprimer). Ce qui est arrivé est que la ligne où il est dit « exception ici », une exception a été levée:

Content Type is still in use. 

Après quelques googler, j'ai essayé beaucoup de scénarios différents, mais aucun d'entre eux a travaillé jusqu'à présent:

-les dossiers qui ont la version == 1.0 n'ont pas mis à jour leur type de contenu ... donc le type de contenu est toujours utilisé (assez juste).

-Tous les documents et dossiers ont leur type de contenu défini sur "Élément", mais le type de contenu est toujours en cours d'utilisation. Rien dans la corbeille, pas de version mineure des fichiers (la doc lib ne le permet pas), pas de problèmes d'autorisation.

-les éléments sont dans un flux de travail, bien qu'ils aient été terminés.

La liste est située au niveau du site, par ex. web.ParentWeb vous obtiendra la liste. Je n'ai absolument aucune idée de ce qui peut encore être utilisé avec le type de contenu. Est-ce que quelqu'un a des idées/ou a rencontré un tel problème avant?

Merci.

Répondre

1

Oui, nous l'avons déjà vu, c'était dû au fait que des objets étaient en train d'être créés par d'autres et ne sont jamais archivés, donc vous ne pouvez pas les voir. Il existe un outil sous les paramètres doc lib qui vous permet de prendre en charge les fichiers extraits qui n'ont pas de version archivée.

+0

J'ai regardé les fichiers que vous placez votre commande suggérez, et n'a pas pu trouver les fichiers. – BeraCim

0

Je ne pense pas que vous pouvez supprimer un type de contenu qui a un élément basé sur ce

Questions connexes