首页 > 解决方案 > 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

标签: vb.netvisual-studio-2019sharepoint-onlinecaml

解决方案


好的,看来 CAML 是正确的。我只是不知道 Sharepoint 网站上的内部名称。一旦我获得了内部字段名称的列表(不是我天真地认为的显示名称),我就不再遇到任何错误。一旦我意识到我正在查询不存在的字段,答案就不那么难了。Visual Studio 会为此对我大喊大叫,这是完全有道理的。


推荐阅读