Marek Kyzivát
Marek Kyzivát

Reputation: 343

Creating Item in SP List oDat.Type for People attribute

I need to create an item with Person/People field.

I am able to populate fields like Title, DateTime, TextField as seen below, but I am not able to populate Person field at all.

I have tried sending Display Name, User ID and UPN.

var fieldValueSet = new FieldValueSet();
fieldValueSet.AdditionalData = new Dictionary<string, object>();
fieldValueSet.AdditionalData.Add("[email protected]", "Edm.String");
fieldValueSet.AdditionalData.Add("Title", task.Title);
fieldValueSet.AdditionalData.Add("[email protected]", "Edm.String");
fieldValueSet.AdditionalData.Add("Plan", plan.Title);
fieldValueSet.AdditionalData.Add("[email protected]", "Edm.String");
fieldValueSet.AdditionalData.Add("Assigned", assignee.UserPrincipalName);
fieldValueSet.AdditionalData.Add("[email protected]", "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)

Upvotes: 3

Views: 276

Answers (1)

MarengoHue
MarengoHue

Reputation: 1825

Does your user principal name look like an email? (e.g. [email protected]). If that is the case then you should probably try to convert it to a sharepoint-claim version: i:0#.f|membership|[email protected].

If you have an authenticated ClientContext in your app, then you could resolve the username by calling the SharePoint utility:
Utility.ResolvePrincipal(context, context.Web, userEmail, PrincipalType.User, PrincipalSource.All, null, true); If you don't have a context then you can try and combine strings (not as robust, but should work as well).

This answer suggests that you should try and set the LookupId value for the field (sorta the same way you set user values using the SharePoint's REST api):

var assigneeLookupId = // Get the assignee's user id on the site (wssid)
fieldValueSet.AdditionalData.Add("[email protected]", "Edm.Int32");
fieldValueSet.AdditionalData.Add("AssignedLookupId", assigneeLookupId);

The following schema would allow you to insert multiple person values: SOLUTION After help from comments i got this answer which worked

{
    "[email protected]" : "Collection(Edm.Int32)"
    "AssignedLookupId": [1,2,3]
}

This approach is in line with the way MS Graph returns values for Lookup fields.

Upvotes: 2

Related Questions