Возможно ли изменение SharePoint SPFile для существующего элемента? - PullRequest
4 голосов
/ 04 февраля 2011

Я в этом сообразительность.У меня есть пользовательский интерфейс, который создает и редактирует документы, хранящиеся в библиотеке документов SharePoint.Прикол в том, что мне нужно, чтобы пользователь мог обновлять документ без проблем, просто используйте SPFile.SaveBinary() верно?

Это определенно обновляет содержимое файла, но каким-то образом сохраняется старое имя файла и старое расширение, это проблема.Удаление и повторное добавление элемента списка также не является решением, потому что на идентификатор элемента ссылаются в URL.

Мой вопрос: как я могу обновить метаданные расширения и имени файла элемента SPFile?

Пока все мои попытки использования библиотеки объектов не увенчались успехом, я пытался обновить поля нижени один не был успешным.Похоже, должен быть более простой способ сделать это.

SPFile file = item.File;
file.Item[SPBuiltInFieldId.FileLeafRef] = resolvedFileName;
file.Item[SPBuiltInFieldId.FileRef] = "/File/" + resolvedFileName;
file.Item[SPBuiltInFieldId.BaseName] = System.IO.Path.GetFileNameWithoutExtension(resolvedFileName);
file.Item["Name"] = System.IO.Path.GetFileNameWithoutExtension(resolvedFileName);
file.SaveBinary(conduitFile);
file.Update();

[EDIT] - Вот мое рабочее решение.

SPFile file = item.File;
string resolvedFileName = item.ID.ToString() + "-" + conduitFileName;
item["Title"] = resolvedFileName;
file.SaveBinary(conduitFile);
file.MoveTo(item.ParentList.RootFolder.Url + "/" + resolvedFileName, true);
file.Item["Name"] = resolvedFileName;
file.Update();

Ответы [ 2 ]

4 голосов
/ 04 февраля 2011

После сохранения файла в библиотеке используйте метод MoveTo и передайте измененное имя файла в параметре newUrl.

Метод SPFile.MoveTo (строка)
Быстро и просто: переименование загруженного файла с использованием объектной модели SharePoint с помощью приемника событий

3 голосов
/ 18 октября 2011

Другой способ, более простой, чем использование MoveTo, - это использование свойства BaseName объекта SPListItem. Вы бы установили это, запустив

item["BaseName"] = resolvedFileName; //Whatever you want the new file name to be 
item.Update();

Это проще, чем MoveTo, потому что вам не нужно беспокоиться об иерархии папок и не нужно беспокоиться о расширении файла.

По какой-то причине это свойство не указано в документации MSDN , но, похоже, работает без проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...