我被要求在工作中编写一个应用程序,该应用程序从我们的 SharePoint 在线站点获取员工列表以进行最终自动更新。 我坚持的部分是检索员工列表的所有字段。
我认为我的查询只会带回我在 sharepoint 列表中看到的所有字段。但我承认,在这一点上,我对CAML还没有最好的理解。
因此,我开始遍历 Allitems 对象中的每个项目,为每行信息创建一个数据行,以便我可以有一个漂亮的小数据表来显示给用户。 当代码行运行以查找项时。("名字"(,我收到消息说它不在列表中,我可能需要显式查询它。与带空格的所有其他字段相同。 我的 AllItems 对象是恢复名称没有空格的所有列(即。部门,标题,位置,电子邮件(这对我来说很奇怪。
显然,我不太了解 SharePoint 以及用空格称呼字段的内容。
我还看到一些 C# 示例,其中包含查询对象的另一种方法:查询。视场 .我的查询对象没有此选项。另外,除了我正在使用的导入之外,有人可以推荐另一个在这里有益的 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会为此对我大喊大叫是完全有道理的。