Получение DefaultView через клиентскую объектную модель

Я хочу загрузить поля представления по умолчанию для Sharepoint list через клиентскую объектную модель (я использую Silverlight). Вот некоторые важные вещи, которые я нашел (здесь на msdn):

  • класс List имеет свойство DefaultViewUrl [типа string]
  • класс List имеет метод GetView(Guid)
  • класс List имеет свойство Views [типа ViewCollection]
  • класс ViewCollection имеет метод GetById(Guid)
  • класс ViewCollection имеет метод GetByTitle(string)
  • класс View имеет свойство DefaultView [типа bool]

Это все, что мне удалось найти. Как видите, прямого способа получить DefaultView не существует (отсутствует свойство DefaultViewId в List или GetByUrl(string) в методе ViewCollection).

Мне кажется, что единственное решение - перебрать коллекцию List.Views и проверить свойство DefaultView на каждом View. Что вроде ... ну, неэффективно ...

Я что-то пропустил? Кто-нибудь видит какое-то прямое чувство? Спасибо за идеи.


person jumbo    schedule 08.08.2011    source источник
comment
Что вы ищете? Имя представления по умолчанию, чтобы вы могли его отобразить? Я считаю, что по умолчанию он будет извлекать поля для представления по умолчанию, как определено пользователем.   -  person Philipp Schmid    schedule 09.08.2011
comment
AFAIK List.Fields содержит все поля. Класс View имеет свойство ViewFields, которое должно содержать только подмножество всех полей.   -  person jumbo    schedule 09.08.2011


Ответы (2)


Попробуйте LoadQuery с помощью оператора LINQ

Например:

private IEnumerable<View> viewQuery = null;
public void LoadDefaultView()
{
    using (ClientContext ctx = ClientContext.Current)
    {
        list = ctx.Web.Lists.GetByTitle("YourList");

        viewQuery = ctx.LoadQuery(list.Views
                   .Include(v => v.Title) // include more lamda statements here to populate View Properties
                   .Where(v => v.DefaultView == true));

        ctx.ExecuteQueryAsync(LoadDefaultViewSuccess, LoadDefaultViewFailure);
    }
}
private void LoadDefaultViewSuccess(object sender, ClientRequestSucceededEventArgs args)
{
    // should only be one View in views
    View defaultView = viewQuery.FirstOrDefault();

    // use default.Title here
}
private void LoadDefaultViewFailure(object sender, ClientRequestFailedEventArgs args)
{
    // handle failure here
}

Статья MSDN SharePoint 2010 Silverlight COM здесь http://msdn.microsoft.com/en-us/library/ee538971.aspx

person Phill Garrett    schedule 12.04.2012