【问题标题】:Microsoft Graph API not returning custom column from listMicrosoft Graph API 未从列表中返回自定义列
【发布时间】:2021-01-13 09:23:28
【问题描述】:

在 VB.Net 中工作,使用 Microsoft.Graph api 与 sharepoint 通信。

我在共享点网站上有一个列表。

让我们说:

列表名称:ListTestName

列:ListColumnTest1、ListColumnTest2、ListColumnTest3

Dim queryFields As List(Of QueryOption) = New List(Of QueryOption) From {New QueryOption("$expand", "fields")}
Dim items As IListItemsCollectionPage = Await GraphClient.Sites(sharepointSessionId).Lists("ListTestName").Items.Request(queryFields).GetAsync()

这是我必须获取列表并尝试获取所有字段(列)的代码,但是当我查看“项目”变量中的字段时,我没有看到我添加到的任何字段名单。我只看到“title”或“Id”等共享点字段

我真的不明白为什么这不起作用。

即使我通过图形浏览器网站 (https://developer.microsoft.com/en-us/graph/graph-explorer) 使用:

GET https://graph.microsoft.com/v1.0/sites/<SiteId's>/lists/ListTestName/items?expand=fields

我没有看到我的自定义列但是,如果我尝试直接过滤到这样的列之一:

GET https://graph.microsoft.com/v1.0/sites/<SiteId's>/lists/ListTestName/items?expand=fields(select=ListColumnTest1)

这似乎返回了我的自定义字段。

因此我尝试添加到查询字段 {New QueryOption("$expand", "fields(select=ListColumnTest1")} 这只是在我调用请求时崩溃了。

编辑:我问了这个问题有点错误,并将发布第二个更符合我需要的问题。但是,下面的问题被标记为正确,因为他们的解决方案是我所问的正确解决方案。 :)

【问题讨论】:

    标签: vb.net sharepoint microsoft-graph-api


    【解决方案1】:

    你试过这个端点吗?

    GET https://graph.microsoft.com/v1.0/sites/{site-id}/lists/{list-id}?expand=columns,items(expand=fields)
    

    我可以使用此端点获取自定义列。

    更新:

    IListColumnsCollectionPage columns = graphClient.Sites["b57886ef-vvvv-4d56-ad29-27266638ac3b,b62d1450-vvvv-vvvv-84a3-f6600fd6cc14"].Lists["538191ae-7802-43b5-90ec-c566b4c954b3"].Columns.Request().GetAsync().Result;
    

    【讨论】:

    • 我正在 Microsoft Graph Explorer 中尝试您的端点,但我无法获得它的代码 sn-p。我猜代码 sn-p api 不起作用。有时将像您这样的查询重写为 c# 代码很复杂,Graph Explorer 中的代码片段工具非常有用。
    • 查看我的更新,我对VB不熟悉,所以我用c#写的。
    • 感谢 Amos_MSFT。这确实为我提供了列列表!但是,现在您知道如何获取列/列表中的项目了吗?所以一个列表(ListTestName),在这个列表中有3个条目。我需要获取该列表中项目的 ID,并且当它等于某个值时,我需要在 ListColumnTest1 列上进行匹配。 .另请注意,我将所有代码从 VB 转换为 C#
    • 另外,在 GET 调用中。我确实看到了所有列(包括我的列)和列表中的项目。但是在项目的字段部分中,我的列都没有。
    【解决方案2】:

    我会避免创建 QueryOption。尝试使用 Expand 和 Select 方法。

    示例(C#...抱歉,我不熟悉 VB,但我希望你重写它会很容易):

    await GraphClient.client.Sites[sharepointSessionId].Lists["ListTestName"].Items.Request()
                .Expand(x => new
                        {
                            ListColumnTest1 = x.Fields.AdditionalData["ListColumnTest1"],
                            ListColumnTest2 = x.Fields.AdditionalData["ListColumnTest2"]
                        })
                .Select(x => new
                        {
                            ListColumnTest1 = x.Fields.AdditionalData["ListColumnTest1"],
                            ListColumnTest2 = x.Fields.AdditionalData["ListColumnTest2"]
                        })
                .GetAsync();
    

    【讨论】:

    • 嗨,不幸的是,这给了我一个例外。 “System.ArgumentException:'lambda 表达式中的匿名类型只能使用 ListItem 类型的直接成员初始化”我尝试使用我的自定义列之一以及“标题”。任何想法为什么会这样?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多