在“人员”的SP列表oDat.Type中创建项目

时间:2019-07-19 11:26:19

标签: c# microsoft-graph

我需要创建一个带有“人/人”字段的项目。

我能够填充如下所示的“标题”,“日期时间”,“文本字段”之类的字段,但是我根本无法填充“人”字段。

我尝试发送显示名称,用户ID和UPN。

var fieldValueSet = new FieldValueSet();
fieldValueSet.AdditionalData = new Dictionary<string, object>();
fieldValueSet.AdditionalData.Add("Title@odata.type", "Edm.String");
fieldValueSet.AdditionalData.Add("Title", task.Title);
fieldValueSet.AdditionalData.Add("Plan@odata.type", "Edm.String");
fieldValueSet.AdditionalData.Add("Plan", plan.Title);
fieldValueSet.AdditionalData.Add("Assigned@odata.type", "Edm.String");
fieldValueSet.AdditionalData.Add("Assigned", assignee.UserPrincipalName);
fieldValueSet.AdditionalData.Add("DueDate@odata.type", "Edm.String");
fieldValueSet.AdditionalData.Add("DueDate", task.DueDateTime);

var listItem = new ListItem
{
   Fields = fieldValueSet
};

await graphServiceClient.Sites["SPURL:/sites/ITOddeleni:"].Lists["ListName"].Items
                                    .Request()
                                    .AddAsync(listItem)

1 个答案:

答案 0 :(得分:1)

您的用户主体名称看起来像电子邮件吗? (例如some.person@yourtenant.onmicrosoft.com)。如果是这种情况,那么您可能应该尝试将其转换为声明所有权的版本:i:0#.f|membership|some.dude@yourtenant.onmicrosoft.com

如果您的应用中具有经过身份验证的ClientContext,则可以通过调用SharePoint utility来解析用户名:
Utility.ResolvePrincipal(context, context.Web, userEmail, PrincipalType.User, PrincipalSource.All, null, true); 如果没有上下文,则可以尝试组合字符串(虽然不那么健壮,但应该也可以)。

This answer建议您尝试设置字段的LookupId值(与使用SharePoint的REST api设置用户值的方式类似):

var assigneeLookupId = // Get the assignee's user id on the site (wssid)
fieldValueSet.AdditionalData.Add("AssignedLookupId@odata.type", "Edm.Int32");
fieldValueSet.AdditionalData.Add("AssignedLookupId", assigneeLookupId);

以下架构将允许您插入多个人员值: 解 在评论帮助下,我得到了这个有效的答案

{
    "AssignedLookupId@odata.type" : "Collection(Edm.Int32)"
    "AssignedLookupId": [1,2,3]
}

此方法与MS Graph返回“查找”字段的值的方式一致。