【问题标题】:Access Denied Error (read only) on setting contentTypeID via Graph通过 Graph 设置 contentTypeID 时访问被拒绝错误(只读)
【发布时间】:2019-01-30 19:20:56
【问题描述】:

我们正在使用 The Graph api 来设置 SharePoint 文档的内容类型。从 8 月 23 日开始,在不更改任何代码的情况下,我们将收到拒绝访问错误。

我们正在对地址“https://graph.microsoft.com/v1.0/sites/[companyName].sharepoint.com,[siteCollectionID],[siteId]/lists/[listId]/items/[itemId]/fields”执行“PATCH” 使用请求数据 "{"ContentTypeId": "0x[ContentTypeID]"}"

在一个 SharePoint Online 环境中,这仍然有效,但在另一个 SharePoint Online 环境中,我们收到以下错误: 代码:“拒绝访问” 消息:“字段 'ContentTypeId' 是只读的”

因为这种情况在没有任何代码更改的情况下发生,我们想知道 Microsoft 是否更改了 SharePoint Online 更新中的某些内容,或者失败的 SharePoint 环境中是否存在任何可能导致此异常的设置??

感谢您的任何帮助或建议

更新

不幸的是,周末情况变得更糟了。 我们的情况更新:我们有 2 个我们自己管理的 SharePoint Online 环境和 1 个我们无法控制的 SP Online。周五,我的环境中的 1 个仍然正常工作,而 2 个开始出现故障。现在在星期一,所有 3 个环境都失败了。我 100% 确定我们没有更改代码,对于 2 个 SP 环境,我 100% 确定我们没有更改任何设置。

我正在尝试通过使用 Office 路线图 (https://products.office.com/nl-NL/business/office-365-roadmap?filters=%26freeformsearch=SharePoint) 来查看 SharePoint Online 的更新,或者我可以使用任何其他有用的地方吗?

【问题讨论】:

    标签: sharepoint microsoft-graph-api sharepoint-online


    【解决方案1】:

    经过一番挖掘,我没有看到任何来自 Microsoft 的官方帖子说明与 Sharepoint 在线相关的任何更新。但这可能只是延迟或他们忘记的事情。

    来自您的错误代码。 “accessDenied”消息:“字段‘ContentTypeId’是只读的”。似乎权限已更改。

    我建议您检查定义站点列的 Field 元素。 或者比较您的两个 SharePoint 在线环境,以查看权限是否按预期更改。

    ReadOnly="TRUE" | "FALSE"
    ReadOnlyEnforced="TRUE" | "FALSE"
    

    也许网站管理员正在考虑锁定该列,但忘记将其解除。有时,在创建新网站栏时,SharePoint 管理员会将其设置为只读或强制只读,以防止用户编辑存储在该字段中的数据。这可以通过 PowerShell 或 CSOM 完成。

    这里有一些references 和字段property

    【讨论】:

    • 感谢@NaaHCat 的帮助。不幸的是,在没有改变任何东西(享受周末)的情况下,其他 SP Online 环境也开始在周末失败。 (请参阅我对问题的更新)
    【解决方案2】:

    我认为 Graph 推出了一些更改。在 Postman 中测试了调用,我可以确认 Graph 调用从 8 月 23 日开始在多个环境中停止工作。据我所知,它与 SharePoint 环境中的任何设置无关。

    作为一种解决方法,似乎仍然可以使用 SharePoint REST Api 更改内容类型。

    PATCH {siteurl}/_api/web/lists(guid'{libraryId}')/items({id})
    If-Match: {eTag}
    X-HTTP-Method: Merge
    
    {"ContentTypeId": "0x0101009E44B70FDF6D5D418E3B608C7DB4E8DB0100F24E9188A7EE514197DF449302E7D11C"}
    

    对于曾经与 Graph 一起工作的东西不得不回退到 SharePoint API 有点烦人。

    【讨论】:

      【解决方案3】:

      要使用图形 API 更改列表项的内容类型,您实际上需要修改项本身的 ContentType 方面,而不是 ContentType 或 ContentTypeID 字段。这是一个例子:

      PATCH 
      
      https://graph.microsoft.com/v1.0/sites/YOURTENANT.sharepoint.com:/sites/SITENAME:/lists/LISTNAME/items/1/
      
      {
          "contentType": { "id": "0x0100D3426610C727AC42B5238A1FA52864F6" }
      }
      

      在这种情况下,这是我的基本项目类型的 ID。我不确定为什么修补 ContentTypeId 字段会起作用,因为它似乎不是我们底层代码中的可寻址字段。我将继续挖掘以查看最近是否进行了更改,但据我所知,它以前确实不应该工作,因为 ContentType 是一种复杂的类型,包括名称和 Id 因此修补该字段直接不正确。

      【讨论】:

      • 太棒了@Jeremy - 是的,看起来就是这样!我们已经使用该呼叫至少 16 个月了;-) 所以我很惊讶听到它不应该起作用。你拯救了我的一天!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-12
      • 2012-10-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多