2010-01-08 10 views
1

Désolé, cela a été demandé ailleurs. J'ai regardé mais je ne trouve pas de réponses définitives. Je suis en train d'écrire une application pour SharePoint 2010 qui doit créer des dossiers dans une bibliothèque de documents; un pour chaque «travail» que l'application traite, comme un endroit pour mettre la sortie du travail. Mais, j'ai des problèmes avec les collisions de nom de dossier. Chaque "travail" est codé en tant que fichier xml dans une autre liste SharePoint. Par exemple, il peut contenir un fichier xml appelé "de docx à pdf.xml". Jusqu'à présent, j'ai l'application créant des sous-dossiers dans la liste de sortie en utilisant le nom du fichier de travail moins l'extension. Donc, un dossier appelé "de docx à pdf" dans ce cas. Mais, un peu plus tard, l'application pourrait devoir retraiter exactement le même travail. Je veux être en mesure d'avoir un autre sous-dossier dans la même liste que le premier, avec le même nom visible à l'utilisateur dans un navigateur ...Sharepoint: différence entre Title, Name et DisplayName pour les dossiers de la bibliothèque

Pouvez-vous faire cela dans les listes SharePoint? Il semble que les SPListItems ordinaires ont des propriétés Name, DisplayName et Title. Évidemment, l'un d'eux doit être unique, de sorte que SharePoint puisse identifier de façon unique cet élément. Mais lequel est-ce? Et est-ce la même chose s'applique aux éléments SPFolder dans une liste? Je suppose que je veux avoir quelque chose comme des noms d'affichage de dossiers en double, mais des noms internes uniques. Avez-vous des idées sur la façon de le faire? Jusqu'à présent, ma méthode merdique va quelque chose comme ceci:

private SPFolder CreateSubFolder(SPList list, string visibleFolderName) 
    {   
     // create a new folder under the root folder 
     SPListItem newFolder = list.AddItem("", SPFileSystemObjectType.Folder, visibleFolderName);    
     newFolder.Update();    
     return newFolder.Folder; 
    } 

Cela ne fonctionne évidemment pas. Toutes les idées sur la façon de modifier pour avoir le même nom visible, mais diff noms internes (peut-être en utilisant Guids ...) ?: D Merci d'avance.

+0

En fait non, Sharepoint n'utilise pas ces champs pour identifier de façon unique les éléments de la liste. La seule chose qui doit être unique est le champ "Id", qui est assigné avec l'article est créé, et vous ne pouvez pas le changer. –

Répondre

3

Comme dans les systèmes de fichiers ordinaires, les dossiers situés dans le même sous-dossier doivent être uniques. Ainsi, le dernier paramètre de la méthode Add() doit être unique, car il indique le nom du dossier.

Vous pouvez en toute sécurité asssign un titre en double après avoir créé le dossier, en utilisant ce morceau de code:

SPListItem newFolder = list.Items.Add("", SPFileSystemObjectType.Folder, uniqueFolderName); 
newFolder["Title"] = "New Folder"; // Can be duplicated 
newFolder.Update(); 

Maintenant, vous aurez des dossiers avec des mêmes titres, mais des noms différents. Cependant, lorsque vous essayez de parcourir ces dossiers à partir de l'Explorateur Windows ou de la liste par défaut de SharePoint, le nom du dossier (qui est unique) s'affiche, et non les titres (que vous voulez). Vous devez donc créer une vue personnalisée et afficher le champ de titre au lieu du nom de dossier.

+0

Excellent! Merci beaucoup! MS surpasse normalement la documentation pour ses technologies, mais trouver une explication du point que vous avez élucidé est presque impossible (au moins pour SP2010). : D – user246091

+0

En fait, cela ne semble pas fonctionner ... Mais je pense que c'est parce que SPFolders n'a pas de propriété Title, où SPListItem le fait. Fondamentalement, je ne peux pas faire ce que je voulais sauf si j'ai créé une sous-classe de SPFolder .. si c'est même possible. De toute façon, question répondue. À votre santé. – user246091

+0

Si vous avez remarqué à partir de mon exemple, en réalité la variable newFolder est un objet SPListItem, pas un objet SPFolder, donc oui, vous pouvez définir la propriété Title. Par ailleurs, vous pouvez créer votre propre ContentType qui dérive le type de contenu du dossier. Mais malheureusement, vous ne pouvez pas sous-classer SPFolder de l'API car il n'a pas de constructeur public. – denni