2010-01-08 3 views
1

Извините, если это было задано в другом месте. Я посмотрел, но не могу найти окончательных ответов.Sharepoint: разница между Title, Name и DisplayName для папок библиотеки

Я пишу приложение для SharePoint 2010, которому необходимо создать папки в библиотеке документов; по одному для каждой «работы», которую приложение обрабатывает, как место для вывода задания. Но у меня проблемы с конфликтами имен папок. Каждое «задание» кодируется как xml-файл в другом списке SharePoint. Например, он может содержать XML-файл с именем «from docx to pdf.xml». Пока у меня есть приложение, создающее вложенные папки в выходном списке, используя имя файла задания минус расширение. Итак, папка под названием «от docx до pdf» в этом случае. Но через некоторое время приложение, возможно, придется перепрограммировать ту же самую работу. Я хочу иметь другую подпапку в том же списке, что и первый, с тем же именем, видимым пользователю в браузере ...

Можете ли вы сделать это в списках SharePoint? Кажется, что обычные SPListItems имеют свойства Name, DisplayName и Title. Очевидно, что один из них должен быть уникальным, поэтому SharePoint может однозначно идентифицировать этот элемент. Но что это? И что же относится к элементам SPFolder в списке? Я предполагаю, что здесь я хочу иметь что-то вроде дублированных имен отображения папок, но уникальных внутренних имен. Есть ли у вас какие-либо идеи о том, как это сделать? До сих пор мой дрянной метод был примерно таким:

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; 
    } 

Это, очевидно, не работает. Любые идеи о том, как изменить, иметь одно и то же видимое имя, но различать внутренние имена (возможно, с помощью Guids ...) ?: D Спасибо заранее.

+0

Фактически нет, Sharepoint не использует эти поля для уникальной идентификации элементов списка. Единственное, что должно быть уникальным, - это поле «Id», которое назначается элементом, создается, и вы не можете его изменить. –

ответ

3

Как и в обычных файловых системах, папки под одной и той же папкой должны быть уникальными. Таким образом, последний параметр метода Add() должен быть уникальным, поскольку он указывает имя папки.

Вы можете безопасно asssign дубликат ПТС после создания папки, используя этот кусок кода:

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

Теперь вы будете иметь папки с одинаковыми названиями, но разными именами. Тем не менее, когда вы пытаетесь просмотреть эти папки из списка проводника Windows или SharePoint по умолчанию, он покажет вам имя папки (которое является уникальным), а не названия (которые вы хотите). Поэтому вам нужно создать собственное представление и отобразить поле заголовка вместо имени папки.

+0

Отлично! Большое вам спасибо! MS обычно перегружает документацию по своим технологиям, но найти объяснение точки, которую вы выяснили, практически невозможно (по крайней мере, для SP2010). : D – user246091

+0

На самом деле это, похоже, не работает ... Но я думаю, что это потому, что SPFolders не имеют свойства Title, которое, как это делает SPListItem. В принципе, я не могу делать то, что хотел, если не создал подкласс SPFolder .. если это возможно. В любом случае, вопрос ответил. Приветствия. – user246091

+0

Если вы заметили из моего примера, фактически переменная newFolder является объектом SPListItem, а не объектом SPFolder, поэтому да, вы можете установить свойство Title. Кстати, вы можете создать свой собственный ContentType, который выводит тип содержимого папки. Но, к сожалению, вы не можете подклассифицировать SPFolder из API, поскольку у него нет публичных конструкторов. – denni

Смежные вопросы