如何用Microsoft Graph API写入SharePoint‘人员或组’字段并匹配用户ID?
这个问题我之前也碰到过,核心原因是SharePoint的SG_ResponsibleLookupId是站点级的用户/组ID,而Graph /users返回的是租户级的Azure AD全局ID,两者本身就不是同一个标识体系。下面给你几个实用的解决思路:
方法一:直接通过Graph API获取用户在目标SharePoint站点的ID
这是最直接的方式,调用Graph的站点用户接口,传入用户的Azure AD ID或用户主体名称(UPN),就能拿到对应的SharePoint站点内ID:
请求示例(用用户邮箱):
GET https://graph.microsoft.com/v1.0/sites/{你的站点ID}/users/john@example.com
或者用Azure AD ID:
GET https://graph.microsoft.com/v1.0/sites/{你的站点ID}/users/76a3b5b7-768b-4dde-ba13-6d471aa2c7fd
返回的响应里的id字段就是你需要的SG_ResponsibleLookupId值(比如示例中的12):
{ "id": "12", "displayName": "John Doe", "userPrincipalName": "john@example.com", "email": "john@example.com" }
方法二:创建列表项时跳过LookupId,直接关联用户
其实完全不用手动去查LookupId,Graph支持直接通过Azure AD用户信息绑定人员列,更省心:
方式A:使用@odata.bind关联用户
POST https://graph.microsoft.com/v1.0/sites/{站点ID}/lists/{列表ID}/items Content-Type: application/json { "fields": { "Title": "Test 3", "SG_Responsible@odata.bind": "https://graph.microsoft.com/v1.0/users('76a3b5b7-768b-4dde-ba13-6d471aa2c7fd')" } }
方式B:直接传入用户邮箱
POST https://graph.microsoft.com/v1.0/sites/{站点ID}/lists/{列表ID}/items Content-Type: application/json { "fields": { "Title": "Test 3", "SG_Responsible": { "Email": "john@example.com" } } }
这两种方式都会自动帮你关联到对应的SharePoint站点用户ID,不需要手动处理映射关系。
补充:组的处理逻辑
如果你的人员列允许选择组,逻辑和用户一样:
- 调用
GET /sites/{站点ID}/groups/{组的Azure AD ID}获取站点内组ID - 或者创建列表项时用
@odata.bind关联组:"SG_Responsible@odata.bind": "https://graph.microsoft.com/v1.0/groups('{组ID}')"
内容的提问来源于stack exchange,提问作者mplwork
相关产品推荐
相关产品推荐

