我正在尝试通过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中执行此类操作的正确方法。
答案 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