Получение имен полей listItem - (строго типизировано?) В клиентском API SharePoint 2010 - PullRequest
1 голос
/ 06 октября 2011

Я очень новичок в SharePoint, использующем 2010. Пытаюсь посмотреть, что мы можем с ним сделать, в частности со списками. И у меня такое чувство, что я упускаю что-то довольно очевидное, но не могу найти это .....

На сайте Sharepoint я создал список под названием Известные люди: добавлено несколько человек, Фрэнк Синатра и т. Д.

  • Фамилия: Синатра
  • Имя: Фрэнк
  • Адрес электронной почты: frank.sinatra@ratpack.com
  • Должность: певец
  • и т.д.

Итак, я пытался перенести эту информацию в простое консольное приложение C #, ссылаясь и пробуя множество примеров, которые я нашел. Но я зацикливаюсь на том, чтобы выяснить, к какому фактическому fieldNames (?) Я должен обратиться, так как он не выглядит строго типизированным. Но использование «адреса электронной почты» также не работает

Вот один пример, который я пробовал. (От: Как: получить элементы списка )

            string siteUrl = "http://servername/site/";
        var clientCtx = new ClientContext(siteUrl);
        Microsoft.SharePoint.Client.List oList = clientCtx.Web.Lists.GetByTitle("Famous People");

        var camlQuery = new CamlQuery {ViewXml = "<View><RowLimit>100</RowLimit></View>"};

        ListItemCollection collListItem = oList.GetItems(camlQuery);

        clientCtx.Load(collListItem,
             items => items.Include(
                item => item.Id,
                item => item.DisplayName,
                item => item.HasUniqueRoleAssignments));

        clientCtx.ExecuteQuery();

        foreach (ListItem oListItem in collListItem)
        {
            Console.WriteLine("ID: {0} \nDisplay name: {1} \nUnique role assignments: {2}",
                oListItem.Id, oListItem.DisplayName, oListItem.HasUniqueRoleAssignments);
        }

        Console.ReadLine();
        clientCtx.Dispose();

Что возвращает:

ID: 1
Display name: Clough
Unique role assignments: False
ID: 2
Display name: Sinatra
Unique role assignments: False
ID: 3
Display name: Simpson
Unique role assignments: False
ID: 4
Display name: Skywalker
Unique role assignments: False

Я испробовал каждый из методов по приведенной выше ссылке на примеры. Но оттуда я понятия не имею, как добраться до других свойств, таких как «Работа» или «Адрес электронной почты».
Или, например, если я имею дело со списком, который я не знаю, как мне узнать действительные имена полей из моего приложения через веб-сервис?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 07 октября 2011

Следует помнить, что каждый SPListItem имеет свой набор полей в зависимости от базового типа контента.Это также изменяется в зависимости от того, в каком списке находится элемент. Так вот почему нет строго типизированной индексации в полях ...

Однако добавление следующего кода должно помочь вам понять, чтонаходится внутри каждого элемента списка

 foreach(SPField field in oListItem.Fields)
 {
     Console.Write(field.Title + " (" + field.InternalName + "): ");
     Console.WriteLine(oListItem[field.Id].ToString());
 }

Свойство SPField.SchemaXml показывает полную информацию о конфигурации каждого поля.Наличие копии SharePointManager даст вам хорошее представление о том, как любой конкретный сайт объединяется.

Если вы можете использовать только объектную модель клиента, чтобы обнаружить эту

foreach(string fieldName in oListItem.FieldValues.Keys)
{
     Console.Write(fieldName);
     Console.WriteLine(oListItem.FieldValues[fieldName]);
}
0 голосов
/ 06 октября 2011

Вы можете получить доступ к другим свойствам через индексированное свойство в ListItem.

Вы должны добавить свойства как ViewFields к ViewXml:

var camlQuery = new CamlQuery 
{
  ViewXml = "<View><ViewFields><FieldRef Name='Last_x0020_Name'/></ViewFields><RowLimit>100</RowLimit></View>"
};

Обратите внимание на кодировку _x0020_ для пробелов.

0 голосов
/ 06 октября 2011

Если вы перейдете к настройкам списка, вы можете найти имя столбца, нажав на него.Это отправит вам ссылку, например: http://servername/_layouts/FldEdit.aspx?List=%7BEACD90E2%2DED64%2D42EE%2DB1FB%2D2631687C545F%7D&Field=Title
Имя поля - RHS поля = Название.Учитывая, что вы знаете имена столбцов, вы можете использовать следующий код:

cxt.Load(items,
   c => c.Include(
      item => item["ID"],
      item => item["Title"],
      item => item["AssignedTo"],
      item => item["Status"]));
   cxt.ExecuteQuery();
...