使用超链接字段创建或更新 SharePoint 列表项

问题描述 投票:0回答:2

我无法使用 Microsoft Graph 创建或更新包含超链接字段的 SharePoint Online

listitem
。如果我从 API 调用正文中删除超链接字段,我可以在同一列表中创建或更新项目。

为了更新,我将向以下地址发送 PATCH 请求:

/v1.0/sites/<site>/list/<listid>/items/<item>/fields

具有以下标题:

"Authorization" : "Bearer <token>"
"accept" :"application/json;odata.metadata=full;odata.streaming=true"

这是正文:

{
    "myUrl": {
        "Description": "http://www.google.com",
        "Url": "http://www.google.com"
    }
}

我将收到以下错误消息作为响应:

{
    "error": {
        "code": "invalidRequest",
        "message": "The request is malformed or incorrect.",
        "innerError": {
            "request-id": "cfe30f57-31ba-4341-89e9-2c1bd4e15539",
            "date": "2017-11-10T21:55:30"
        }
    }
}

值得注意的是,只要 json 正文中没有超链接字段,我就可以使用确切的标头和目标 URL 更新列表项中的其他字段。

我发送的格式与我执行

GET
时收到的 URL 字段的格式完全相同。有谁知道将 URL 字段发送回 SharePoint 的适当格式吗?

更新 1/8/2018

我于 2017 年 11 月 11 日在 Microsoft 的 Graph Github 上发布了同样的问题,但他们尚未提供答案。我非正式地听说,目前不支持对具有嵌套结构(例如超链接、用户、分类法)的列表项进行 REST 操作。以下是该问题的链接,以防他们稍后回答:https://github.com/microsoftgraph/microsoft-graph-docs/issues/1965

我确实有一个针对我正在使用的超链接字段的解决方法。我更改了 SharePoint 列表上的列,该列以前是指向“单行文本”字段的超链接。当在单行文本字段中输入超链接时,当您在浏览器中查看事件时,它会显示为带下划线的可单击链接。如果您有一个又长又难看的 URL(如超链接字段类型),则无法使用替代文本,但它可以工作!

microsoft-graph-api sharepoint-online
2个回答
0
投票

您可以使用 Sharepoint REST API 创建或更新 URL:

首先,通过 GET 请求检索文件的所有属性

<yourSharepointUrl>/sites/<site>/_api/web/GetFileByServerRelativePath(decodedurl='<filepath>')/ListItemAllFields

确保包含您的令牌以进行身份验证。还要添加以下两个标题:

Content-Type: application/json;odata=verbose
Accept: application/json;odata=verbose

记下 JSON 响应中

d.__metadata.etag
中 etag 字段的值。

然后,您可以使用 POST 请求更新该 URL 到同一 URL。

除了身份验证标头之外,还包括以下标头:

Content-Type: application/json;odata=verbose
X-HTTP-Method: MERGE
If-Match: <etag>

将 etag 标签替换为上一个请求中的值。请务必保留引号!

请求正文应如下所示:

{
    "__metadata": {
      "type": "SP.Data.Shared_x0020_DocumentsItem"
    },
    "myUrl": {
      "__metadata": {
        "type": "SP.FieldUrlValue"
      },
      "Description": "Link",
      "Url": "https://www.example.com"
    }
}

-1
投票

看起来身体的值是相反的。您的 URL 位于“描述”字段中,并且“描述”位于 URL 字段中。尝试:

{
    "myUrl": {
        "Description": "google",
        "Url": "http://www.google.com"
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.