Использование SPFile и SPFileCollection для обновления названий файлов в Sharepoint 2010
Привет всем. Сегодня хочу рассказать как можно легко создать событие по которому будет автоматически изменяться названия файлов в Вашей библиотеке документов.
Пример 1. Допустим Вы хотите сделать так, чтобы при создании элемента (документа) в Вашей библиотеке документов, элемент (файл) имел название в зависимости от того в какой он папке находится. Например, Есть иерархия папок – Папка1-Папка2-вложенные файлы. Так вот, если Вы создали документ, то он должен называться Папка1-Папка2-название документа.
Для решения этой задачи нам необходимо создать проект по шаблону EventReciever и выбрать в типе элемента библиотека документов, а в событиях отметить событие Создание элемента.
После генерации кода, Вам необходимо написать такой код:
public class EventReceiver1 : SPItemEventReceiver
{
/// <summary>
/// An item was added.
/// </summary>
public override void ItemAdded(SPItemEventProperties properties)
{
base.ItemAdded(properties);
SPFile file = properties.Web.GetFile(properties.ListItem.Url);
if (file.Item.ContentType.Name == "Документ")
{
file.Item["Имя"] = properties.AfterUrl.Replace("/", "-");
file.Item.Update();
}
}
}
В этом примере мы используем клас SPFile и его метод GetFile() для получения сведений о создаваемом документе. Также используем проверку на тип контента.
Далее нам необходимо как-то отслеживать изменения папок, чтобы автоматически менялись названия созданных документов. Это можно сделать с помощью отлавливания события изменений элементов.
Создаём событие и пишем такой код:
/// <summary>
/// An item was updated
/// </summary>
public override void ItemUpdated(SPItemEventProperties properties)
{
base.ItemUpdated(properties);
SPFile file = properties.Web.GetFile(properties.ListItem.Url);
if (file.Item.ContentType.Name == "Папка")
{
SPFileCollection fileCollection = properties.Web.GetFolder(properties.ListItem.Url).Files;
foreach (SPFile fileItem in fileCollection)
{
fileItem.Item["Имя"] = fileItem.Item.Name + properties.AfterUrl.Replace("/", "-");
file.Item.Update();
}
}
}
Здесь мы уже используем класс SPFileCollection и его метод GetFolder() для получения сведений о изменяемой папке документов. И после запускаем цикл на изменение всех документов в этой папке.
Видим, что всё очень просто. Есть ещё момент, если Вы хотите программно менять название папок, то Вам необходимо написать типа в таком виде:
SPFolder.Name = "NewFolderName";
SPFolder.MoveTo("brandspakningnewSPFolder.Name");