Извлечение всех элементов из списка SharePoint и помещение каждого поля в объект - PullRequest
0 голосов
/ 17 января 2020

Я пытаюсь получить все элементы списка с сайта SharePoint. Поля называются «Заголовок уровня обзора», «Идентификаторы рецензента» и «Приоритет уровня обзора». Я пытаюсь раздельно получить информацию из всех трех полей, поместить их в созданный мной объект, а затем вернуть список со всеми объектами, которые я создал для каждого элемента SharePoint.

Я много исследовал, как получить доступ к этой информации с сайта SharePoint, но не могу заставить ее работать. Вот что я создал до сих пор:

public List<OperationsReviewLevel> Get()
        {
            var operationsReviewLevels = new List<OperationsReviewLevel>();

            ClientContext context = new ClientContext(ConfigurationManager.AppSettings["SharePointEngineeringChangeRequest"]);
            var SPList = context.Web.Lists.GetByTitle("Review Levels");

            CamlQuery query = new CamlQuery();
            ListItemCollection entries = SPList.GetItems(query);

            context.Load(entries);
            context.ExecuteQuery();

            foreach(ListItem currentEntry in entries)
            {
                operationsReviewLevels.Add(new OperationsReviewLevel(currentEntry["Review Level Title"].ToString(), currentEntry["Reviewer IDs"].ToString(), (int)currentEntry["Review Level Priority"]));
            }

            return operationsReviewLevels;

        }

Всякий раз, когда я пробую этот код, я получаю сообщение об ошибке:

Microsoft.SharePoint.Client.PropertyOrFieldNotInitializedException: свойство или поле не было инициализировано. Он не был запрошен или запрос не был выполнен. Это может потребоваться в явном виде.

Я не могу найти какие-либо решения этой ошибки (в моем сценарии) онлайн, и мне было интересно, если кто-нибудь может увидеть, что я делаю неправильно в этом сценарии.

Спасибо всем!

Ответы [ 2 ]

1 голос
/ 20 января 2020

Прочитав комментарий Алессандры Амоссо по моему вопросу, я закончил отладку entries. Потребовалось много копаться в отладчике, но я смог найти то, что имена полей были получены. Отладка вашего ListItemCollection, если вы go в Данные, затем в любой записи там, а затем в FieldValues, вы можете увидеть, какое значение каждого поля должно быть получено как.

enter image description here

В моем случае все пробелы были заменены на _x0020_, а приоритет слова был сокращен до priorit из-за длины имени поля.

С этим я смог изменить foreach l oop на:

foreach (ListItem currentEntry in entries)
{
   operationsReviewLevels.Add(new OperationsReviewLevel(currentEntry["Review_x0020_Level_x0020_Title"].ToString(), currentEntry["Reviewer_x0020_IDs"].ToString(), Convert.ToInt32(currentEntry["Review_x0020_Level_x0020_Priorit"].ToString())));
}

И теперь он работает правильно.

Надеюсь, это поможет кому-нибудь в будущем!

0 голосов
/ 20 января 2020

Предположим, что вы используете SharePoint в сети, SharePoint Online будет удалять специальные символы поля в качестве статического имени при создании полей, например: Review Level Title будет ReviewLevelTitle.

Вот мой тестовый код.

foreach (ListItem currentEntry in entries)
                {
                    Console.WriteLine(currentEntry["ReviewLevelTitle"].ToString()+'-'+ currentEntry["ReviewerIDs"].ToString()+'-'+ currentEntry["ReviewLevelPriority"]);
                    //operationsReviewLevels.Add(new OperationsReviewLevel(currentEntry["Review Level Title"].ToString(), currentEntry["Reviewer IDs"].ToString(), (int)currentEntry["Review Level Priority"]));
                }

Если вы не используете SharePoint в Интернете, убедитесь, что поля также совпадают.

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