Не удается получить URL библиотеки документов в клиентской объектной модели
Я использую Sharepoint 2010.
Создана библиотека документов портала Sharepoint.
Я понимаю, что рекомендуется, чтобы URL библиотеки не содержал пробелов. Поэтому изначально он создан как PPCompanies. А затем, чтобы имя библиотеки было более удобным для пользователя, оно переименовывается в SC Documents через настройки библиотеки. URL не меняется, это все-таки PPCompanies.
Я обнаружил, что в моей объектной модели клиента я должен получить доступ к библиотеке, используя новый заголовок "PP Documents" с пробелом. Однако мне нужен URL, чтобы я мог разместить гиперссылку на документ, который я сохранил в библиотеке. Как мне это сделать? Я ожидал бы, что это будет свойством объекта Sharepoint.Client.List, но, похоже, не будет такого свойства, которое устанавливается при его создании.
Это код, который сохраняет документ в "PP Companies". Значение "PP Companies" находится в этом. DocumentLibrary;
public void Save(byte[] file, string url)
{
using (var context = newClientContext(this.SharepointServer))
{
context.Credentials = newNetworkCredential(this.UserName, this.Password, this.Domain);
var list = context.Web.Lists.GetByTitle(this.DocumentLibrary);
var fileCreationInformation = newFileCreationInformation
{
Content = file,
Overwrite = true,
Url = url
};
var uploadFile = list.RootFolder.Files.Add(fileCreationInformation);
uploadFile.ListItemAllFields.Update();
context.ExecuteQuery();
if (this.Metadata.Count > 0)
{
this.SaveMetadata(uploadFile, context);
}
}
}
private void SaveMetadata(File uploadFile, ClientContext context)
{
var item = uploadFile.ListItemAllFields;
foreach (var row inthis.Metadata)
{
item[row.Key] = row.Value;
}
item.Update();
context.ExecuteQuery();
}
Так что этот код работает. Но я не могу использовать "PP Companies", чтобы получить URL нужной мне гиперссылки после ее выполнения.
Я обнаружил, что context.Url - это просто URL-адрес корневой папки.
List.RootFolder.ServerRelativeUrl не установлен.
1 ответ
Когда вы используете клиентский контекст при работе с SharePoint, вам нужно использовать метод context.Load перед чтением объектов и их свойств.
В вашем случае добавьте context.Load(list.RootFolder);
непосредственно перед вызовом метода ExecuteQuery. Затем объект списка и свойство RootFolder будут отправлены с сервера и доступны клиенту.