Sharepoint 如何在MS Graph中检索DriveItems的自定义列

Sharepoint 如何在MS Graph中检索DriveItems的自定义列,sharepoint,microsoft-graph-api,onedrive,Sharepoint,Microsoft Graph Api,Onedrive,我正在尝试使用Graph API检索Sharepoint文档库中的文件层次结构。由于文档库存储在“驱动器”中(技术上称之为OneDrive正确吗?),因此我使用/drives端点获取文件列表,如下所示: https://graph.microsoft.com/beta/drives/{driveid}/root/children 我想从通过Sharepoint查看这些项目时存在的一些自定义列中获取信息。使用?expand=fields不起作用,因为fields仅存在于/sites端点的list

我正在尝试使用Graph API检索Sharepoint文档库中的文件层次结构。由于文档库存储在“驱动器”中(技术上称之为OneDrive正确吗?),因此我使用
/drives
端点获取文件列表,如下所示:

https://graph.microsoft.com/beta/drives/{driveid}/root/children
我想从通过Sharepoint查看这些项目时存在的一些自定义列中获取信息。使用
?expand=fields
不起作用,因为
fields
仅存在于
/sites
端点的listItem对象中,而不存在于
/drives
端点的
driveItem
对象中。如果我尝试从单个driveItem获取listItem(将图形从OneDrive遍历到Sharepoint),然后展开字段,如

https://graph.microsoft.com/beta/drives/{driveid}/items/{driveItemId}/listItem?expand=fields
这会检索内置列(Author、DocIcon和其他一些),但似乎不会检索自定义列。 我还尝试从
/sites
端点获取文件列表,使用
?expand=fields
将获取自定义列,但它获取每个子文件夹中的每个文件,而不是当前文件夹路径。但我觉得这值得提出自己的问题


是否可以从driveItems检索自定义列信息

我做了一些测试。应该做的是:

https://graph.microsoft.com/beta/drives/{driveid}/root/children?$select=id,MyCustomColumnName

然而,当我这样做时,它只是返回id字段。在我看来,这是图形中的一个缺陷,因为这种类型的查询在SharePoint REST api中也可以工作

如果这有帮助,您可以通过使用SharePoint REST api来实现这一点。您的端点查询类似于:

https://{yoursite}.sharepoint.com/sites/{sitename}/_-api/web/lists/({DocumentLibraryID}')/items?$select=id,MyCustomColumnName


还有其他方法可以执行相同的查询。

尝试列表端点,然后展开driveItem和fields。现在您既有自定义列字段,也有驱动器项字段

/beta/sites/[site-id]/lists/[list-id]/items?expand=driveitem,fields&filter=(fields/customColumn eq 'someValue') /beta/sites/[site id]/lists/[list id]/items?expand=driveitem,fields&filter=(fields/customColumn eq'someValue')
我花了很多时间研究不同的语法可能性,最终能够使用这种查询格式获得自定义库属性。这是唯一一个为文档库生成自定义/用户定义字段的文档库

缩短结果:

{
"@odata.context": "...",
"value": [
        {
        "@microsoft.graph.downloadUrl": "...",
        "listItem@odata.context": "...",
        "listItem": {
            "@odata.etag": "...",
            "fields@odata.context": "...",
            "fields": {
                "@odata.etag": "...",
                "Title": "...",
                "Other_Custom_Property": "..."
                }
            }
        }
    ]
}

对于您的自定义列,
field.Hidden
field.showindplayform
的值是什么?对于Sharepoint Online来说,这是相当新的,我不确定如何使用基于web的前端检查这些值。使用Graph Explorer,我可以看到Hidden=false,但没有showindPlayForm值。另外,index=false、ReadOnly=false和Required=false,如果这些都有帮助的话。它确实感觉像一个bug。希望MSFT的人能加入进来,提供一些更官方的东西。也许它还没有实现,并且将出现在Graph API的未来版本中。我想我会一直使用SharePoint API,直到听到其他消息。在尝试停留在图形API上时,我最终查询了驱动器API,以同时选择文件
/Drives/{driveId}/root/children?select=SharePointId,name
,然后在站点API
/Sites/root/Sites/{sitePath}/列表上使用该SharePoint列表项ID/{listId}/items/{listItemId}?expand=fields&select=fields
Yes,这确实可以检索自定义列,但不幸的是,它检索文档库中的所有项目,而不仅仅是指定文件夹中的项目。对于包含许多嵌套子文件夹的大型文档库,如果能够仅检索所需的su,将节省大量带宽没有强制递归的bfolder。