无法通过Microsoft Graph Explorer更新Sharepoint托管的元数据字段

时间:2019-03-06 22:50:37

标签: microsoft-graph

我正在尝试通过Graph Explorer https://developer.microsoft.com/en-us/graph/graph-explorer(或REST API调用)更新与列表项关联的字段。对于一个字段,其值可以是术语集中的一项(托管元数据)。访问https://XXX.sharepoint.com/Lists/TaxonomyHiddenList/AllItems.aspx时,我可以看到术语集中的每个元素并获得每个termguid。

我正在尝试使用https://graph.microsoft.com/beta/sites/XXX.sharepoint.com,FOO,BAR/drive/root/children/Test%20Document.txt/listItem/fields(或https://graph.microsoft.com/v1.0/sites/XXX.sharepoint.com,FOO,BAR/drive/list/items/1/fields)之类的URL进行PATCH请求,以识别与特定项目相关的字段

要更新CakeType字段,我将请求正文设置为以下内容:

{
    "CakeType": {
        "Label": "Apple",
        "TermGuid": "3a3ad73f-94ca-4d1e-a25c-XXXX",
        "WssId": -1
    }
}

然后,当我按下“运行查询”按钮时,我收到一个InvalidClientQueryException消息,消息为“找到了没有类型名称的值,并且没有预期的类型。指定模型时,有效负载中的每个值都必须有一个可以在有效负载中指定的类型,可以由调用者显式指定,也可以从父值隐式推断出来。”

因此,我一直在尝试找出要指定的数据类型以及如何使用...在各种在线示例中,我看到添加了一个名为__metadata的字段,其他添加了@ odata.type的字段,例如CakeType @ odata。在这里输入案例。我尝试为整个结构将这些行添加到CakeType JSON内和外部。都不起作用...

{
    "CakeType": {
        "__metadata" : {"type" : "SP.Taxonomy.TaxonomyFieldValue" },
        "Label": "Apple",
        "TermGuid": "3a3ad73f-94ca-4d1e-a25c-XXXX",
        "WssId": -1
    }
}

{
    "__metadata" : {"type" : "SP.Taxonomy.TaxonomyFieldValue" },
    "CakeType": {
        "Label": "Apple",
        "TermGuid": "3a3ad73f-94ca-4d1e-a25c-XXXX",
        "WssId": -1
    }
}

我还尝试过以我认为在某处看到的类型使用字段名称...

"__metadata" : {"type" : "SP.Data.CakeType" },

并尝试

"CakeType@odata.type" : "SP.Taxonomy.TaxonomyFieldValue" ,
"CakeType@odata.type" : "SP.Data.CakeType",
"@odata.type" : "SP.Taxonomy.TaxonomyFieldValue" ,

给出唯一错误消息的唯一原因是,我刚打开{或在CakeType中没有CakeType部分的情况下,立即输入了“ CakeType@odata.type”:“ SP.Taxonomy.TaxonomyFieldValue”。

{
    "CakeType@odata.type" : "SP.Taxonomy.TaxonomyFieldValue" ,
    "CakeType": {
        "Label": "Apple",
        "TermGuid": "3a3ad73f-94ca-4d1e-a25c-XXXX",
        "WssId": -1
    }
}

{
    "CakeType": {
        "@odata.type" : "SP.Taxonomy.TaxonomyFieldValue" ,
        "Label": "Apple",
        "TermGuid": "3a3ad73f-94ca-4d1e-a25c-XXXXX",
        "WssId": -1
    }
}

每个人都给出了错误“模型无法解析名为'SP.Taxonomy.TaxonomyFieldValue'的类型。当模型可用时,每个类型名称都必须解析为有效类型。”

这使我认为我的字段名称正确,但类型错误...

那么...我应该给类型命名什么以便可以更新托管元数据字段?或...如果上述结构相去甚远,JSON必须是什么...或者如何严格使用Graph API更新字段。

谢谢。

我认为查看架构扩展可能会有所帮助(GET https://graph.microsoft.com/v1.0/schemaExtensions),但这没有...

最终,我正在尝试使用com.microsoft.graph中的类从Java更新托管元数据字段。因此,如果我可以使用Graph Explorer找到正确的内容,则可以转到Java。我已经看到了其他语言中的一些此类示例,但无法找出在Java中执行此类操作的正确方法。

2 个答案:

答案 0 :(得分:3)

这是我终于能够做到这一点的方式。 首先,您需要隐藏字段的ID,它是与您的字段 CakeType 对应的displayName,该字段的名称应为 CakeType_0
我使用此REST调用来找到ID:

result = [] calc = 0 b = 0 for x in l: value = x[7] find = False for y in result: if y[7] == value: find = True calc = calc + int(x[5]) result[b-1][5] = calc if not find: calc = int(x[5]) b+=1 result.append(x) print(result)

这将返回您的所有字段,并且您想要一个带有_0后缀的字段:

https://graph.microsoft.com/v1.0/sites/{sitid}/lists/{listid}/items?expand=hidden

..."displayName": "Cake_0",...

您需要使用此名称 ID来更新字段。

因此,您对商品的PATCH调用如下:

"name": "d39a5181f12f41a483acb1a4e47477b1"...

然后,有效负载语法如下:

https://graph.microsoft.com/v1.0/sites/{sitid}/lists/{listid}/items/{itemid}

因此它看起来像这样(假设苹果是第四个标签,尽管我认为-1也可以在其中工作):

{"{FieldID}":"{TermNumber};#{Term}|{TermGuid}"}

对于多个标签,在同一引号字符串内用;#分隔它们

答案 1 :(得分:0)

我遇到了同样的问题,发现了这个问题:https://microsoftgraph.uservoice.com/forums/920506-microsoft-graph-feature-requests/suggestions/33421180-support-for-setting-sharepoint-managed-metadata-t

功能请求:

  

支持通过Graph API在项目上设置SharePoint托管元数据(分类)列值和其他复杂列类型

响应:

  

感谢您的反馈!这项工作尚未完成,目前尚未安排。一旦开发工作开始,此功能将在此处更新。 -EY