我需要创建一个带有“人/人”字段的项目。
我能够填充如下所示的“标题”,“日期时间”,“文本字段”之类的字段,但是我根本无法填充“人”字段。
我尝试发送显示名称,用户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)
答案 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返回“查找”字段的值的方式一致。