vb.net - CAML 查询未使用 vb.net VS2019 和 Sharepoint 在线检索所有字段
问题描述
我被要求在工作中编写一个应用程序,该应用程序从我们的 Sharepoint 在线网站获取员工列表,以便最终自动更新。我坚持的部分是检索我的员工列表的所有字段。
我认为我的查询只会带回我在共享点列表中看到的所有字段。但我承认,在这一点上我对 CAML 没有最好的理解。
因此,我开始遍历我的 Allitems 对象中的每个项目,为每行信息创建一个数据行,这样我就可以有一个漂亮的小数据表来显示给用户。当代码行运行以查找 item.("First Name") 时,我收到一条消息,指出它不在列表中,我可能需要显式查询它。与所有其他带空格的字段相同。我的 AllItems 对象正在带回名称中没有空格的所有列(即部门、标题、位置、电子邮件),这对我来说很奇怪。
显然,我对 Sharepoint 的理解不够,以及这些字段用空格称为什么。
我还看到了一些 C# 示例以及查询对象的另一种方法:query.ViewFields。我的查询对象没有此选项。另外,除了我正在使用的那些之外,有人可以推荐另一个在这里有益的 Sharepoint 进口吗?
任何帮助和建议将不胜感激。即使是获取这些数据的完全不同的方式也会受到赞赏。
此外,我在下面的代码中只留下了 4 个数据行字段,因为它未能在“名字”上保持代码整洁。因为这与我的查询中没有返回的所有其他字段的原因相同。
克里斯
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
解决方案
好的,看来 CAML 是正确的。我只是不知道 Sharepoint 网站上的内部名称。一旦我获得了内部字段名称的列表(不是我天真地认为的显示名称),我就不再遇到任何错误。一旦我意识到我正在查询不存在的字段,答案就不那么难了。Visual Studio 会为此对我大喊大叫,这是完全有道理的。
推荐阅读
- javascript - 有没有办法用javascript调用firebase API中的函数?
- c# - 使用自定义对象创建嵌套的 ObservableCollections
- c# - 如何从json数组中提取数据并将其放入数据gridview c#
- rest - 金融科技/银行应用程序上可能的 API 授权技术
- android - 在主线程上运行 coroutine 或 rx observable 完成了什么
- docker - Docker 使用项目路径运行
- vba - 通过 VBA 添加宏动作会重置动画时间轴
- php - 无法安装干预/图像库
- android - 如何将我自己的画布设置为 PdfDocument.Page
- json - 如何使用 python 将 Mongodb Extended json 转换为 json 格式,比如好的 json?