Запрос CAML не извлекает все поля с использованием vb. net VS2019 и Sharepoint онлайн - PullRequest
0 голосов
/ 18 июня 2020

Меня попросили написать приложение на работе, которое захватывает список сотрудников с нашего онлайн-сайта Sharepoint для возможного автоматического обновления. Часть, на которой я застрял, - это получение всех полей моего списка сотрудников.

Я думаю, что мой запрос просто вернет все поля, которые я вижу в моем списке sharepoint. Но я признаю, что на данный момент у меня нет лучшего понимания CAML.

Итак, я начинаю l oop через каждый элемент в моем объекте Allitems, чтобы создать строку данных для каждой строки информации, чтобы у меня была небольшая симпатичная таблица данных для отображения пользователю. Когда строка кода запускается для поиска элемента («Имя»), я получаю сообщение о том, что его нет в списке и что мне может потребоваться явный запрос. То же самое со всеми другими полями с пробелом. Объект My AllItems возвращает все столбцы с именами, у которых нет пробела (ie. Отдел, Заголовок, Местоположение, Электронная почта), что для меня странно.

По-видимому, я недостаточно понимаю Sharepoint и как поля называются с пробелом.

Я также вижу несколько C# примеров с другим методом для объекта запроса: query.ViewFields. У меня нет этой опции для моего объекта запроса. Кроме того, может ли кто-нибудь порекомендовать другой импорт Sharepoint, который был бы здесь полезен, помимо тех, которые я использую?

Любая помощь и совет будут очень благодарны. Приветствуется даже совершенно другой способ получения этих данных.

Кроме того, я оставил только 4 поля datarow в приведенном ниже коде, так как он не работает в поле «Имя», чтобы сохранить код незагроможденным. Поскольку это будет та же причина для всех других полей, которые не возвращаются в моем запросе.

Chris

Imports Microsoft.SharePoint
Imports Microsoft.SharePoint.Client

      Try


            Dim cred = New SharePointOnlineCredentials(txtUserName.Text, secureString)
            Dim ctx = New Microsoft.SharePoint.Client.ClientContext(siteUrl)
            ctx.Credentials = cred
            Dim web As Web = ctx.Web
            Dim list As List = web.Lists.GetByTitle(siteList)
            ctx.Load(list)
            ctx.ExecuteQuery()

            Dim query As CamlQuery = CamlQuery.CreateAllItemsQuery()

            query.ViewXml = "<View Scope='RecursiveAll'><Query><ViewFields><FieldRef Name='First Name'/><FieldRef Name='Last Name'/><FieldRef Name='Office Phone'/><FieldRef Name='Email'/><FieldRef Name='Cell Phone'/><FieldRef Name='Department'/><FieldRef Name='Location'/></ViewFields></Query></View>"


            Dim AllItems As ListItemCollection = list.GetItems(query)
            ctx.Load(AllItems)
            ctx.ExecuteQuery()

            If AllItems.Count > 0 Then
                Dim dt As New DataTable
                Dim dRow As DataRow

                Dim dcID As New DataColumn("Id")
                dcID.DataType = Type.GetType("System.String")

                Dim dcFName As New DataColumn("First Name")
                dcFName.DataType = Type.GetType("System.String")

                Dim dcLName As New DataColumn("Last Name")
                dcLName.DataType = Type.GetType("System.String")

                Dim dcTitle As New DataColumn("Title")
                dcTitle.DataType = Type.GetType("System.String")


                dt.Columns.Add(dcID)
                dt.Columns.Add(dcFName)
                dt.Columns.Add(dcLName)
                dt.Columns.Add(dcTitle)

                For Each item As ListItem In AllItems

                    dRow = dt.NewRow()

                    dRow("Id") = item.Id
                    dRow("First Name") = item("First Name")
                    dRow("Last Name") = item("Last Name")
                    dRow("Title") = item("Title")

                    dt.Rows.Add(dRow)

                Next

                DGVList.DataSource = dt

            End If





        Catch ex As Exception
            Console.WriteLine(ex.Message)
        End Try

1 Ответ

0 голосов
/ 18 июня 2020

Хорошо, похоже, что CAML был правильным. Я просто не знал внутренних имен на сайте Sharepoint. Как только я получил список имен внутренних полей (а не отображаемых, как я наивно думал), я больше не сталкивался с какими-либо ошибками. Ответ был не так уж сложен, когда я понял, что запрашиваю поля, которых не существует. Совершенно очевидно, что Visual Studio будет кричать на меня из-за этого.

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