Не удается получить 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 будут отправлены с сервера и доступны клиенту.

Другие вопросы по тегам