如何将用户生日设置为Null、空值或默认值?
看起来你遇到的是SharePoint用户配置文件中生日字段的特殊限制问题——这个字段本质是不可空的DateTime类型,直接设null或者尝试删除都会触发错误,而Delve里显示的0001-01-01T00:00:00Z其实是系统默认的最小日期,但直接通过PATCH请求设置这个值会因为格式或校验问题报错。
下面是经过验证的解决步骤:
使用SharePoint User Profile REST API的正确PATCH格式
你需要发送一个PATCH请求到用户配置文件端点,同时指定字段的IsUserOverride属性为false,这样会重置该字段为未设置状态,而不是强制设置某个值。请求示例如下:PATCH https://your-sharepoint-site/_api/SP.UserProfiles.PeopleManager/GetPropertiesFor(accountName=@v)/UserProfileProperties Content-Type: application/json { "@v": "'i:0#.f|membership|user@domain.com'", "UserProfileProperties": [ { "Key": "SPS-Birthday", "Value": "", "IsUserOverride": false } ] }这里的关键是将
Value设为空字符串,并把IsUserOverride设为false,这会告诉系统取消用户对该字段的自定义设置,恢复到未填写的状态。验证结果
执行完这个请求后,再查看用户的配置文件,生日字段应该会显示为空,而不是0001-01-01。你也可以通过GET请求/_api/SP.UserProfiles.PeopleManager/GetPropertiesFor(accountName=@v)来确认字段值是否已被重置。为什么之前的方法不行?
- 直接设
null:因为该字段在SharePoint用户配置元数据中被标记为不可空,所以API会拒绝这种请求。 - 设置
0001-01-01T00:00:00Z:这个日期超出了SharePoint用户配置文件允许的DateTime范围(通常是1900年之后的日期),所以触发了未知错误。 - 使用DELETE请求:用户配置文件字段不支持单独DELETE操作,必须通过PATCH来修改属性。
- 直接设
如果你使用的是Microsoft Graph API,也可以尝试以下方法:
发送PATCH请求到用户端点,将birthday设为null,同时确保请求头包含Content-Type: application/json,JSON体如下:
{ "birthday": null }
不过需要注意,某些租户可能因为配置限制,导致birthday字段无法设为null,这时还是需要回到SharePoint用户配置文件API的方法。
内容的提问来源于stack exchange,提问作者trenoncourt

