Меня попросили написать приложение на работе, которое захватывает список сотрудников с нашего онлайн-сайта 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