HOW TO: Programmatically modify values of people and groups column of type multi-value using Lists.asmx in SharePoint 2010
Published May 01 2019 03:37 PM 238 Views
Microsoft

First published on TECHNET on Mar 13, 2013

This blog post is a contribution from Bharat Rathod, an engineer with the SharePoint Developer Support team.

In this post, I’ll show you how to use UpdateListItems method of the Lists.asmx web service to modify a ListItem which has multi-value people and group column.  Most of us tend to fall into trouble while creating the batch element.

Here’s the detailed description of the sample code.

using System;


using System.Collections.Generic;


using System.Linq;


using System.Text;


using Microsoft.SharePoint;


using System.Xml;


using Microsoft.SharePoint.SoapServer;





namespace TestProject


{


class Program


{


static void Main(string[] args)


{


using (SPSite osite = new SPSite("http://sp/"))


{





using (SPWeb oweb = osite.OpenWeb())


{


SPList mylist = oweb.Lists["TestList"];


SPListItem item = mylist.GetItemById(1);





// Get the user ID of the User whose value needs to be added to the column


SPUser user1 = oweb.AllUsers["contoso\\user1"];


int Id1 = user1.ID;





ListService.Lists list = new ListService.Lists();


list.UseDefaultCredentials = true;





XmlDocument doc = new System.Xml.XmlDocument();


XmlElement batchElement = doc.CreateElement("Batch");


batchElement.SetAttribute("OnError", "Continue");


batchElement.SetAttribute("ListVersion", "1");


batchElement.SetAttribute("ViewName", "");





batchElement.InnerXml = "<Method ID='1' Cmd='Update'>" +


"<Field Name='ID'>1</Field>" +


"<Field Name='Title'>Item1</Field>" +


"<Field Name='manyusers'>;#1;#Contoso\\spadmin;#9;#contoso\\user1;#</Field>" +


"</Method>";








try


{


list.UpdateListItems(mylist.ID.ToString(), batchElement);


}


catch (SoapServerException ex)


{


Console.WriteLine(ex.Message);


}





}


}








}


}


}



One of the most important part of this code is creating the batch element.  In order to add users to a multi-value people and group field, we need to get the UserID from the SPWeb object.  In the code, I’ve used the following statements:





SPUser user1 = oweb.AllUsers["contoso\\user1"];


int Id1 = user1.ID;



This code finds out the user’s identifier (UserID) of whatever user you want to add to the multi-value field (in this case, it’s contoso\user1 ).





batchElement.InnerXml = "<Method ID='1' Cmd='Update'>" +


"<Field Name='ID'>1</Field>" +


"<Field Name='Title'>Item1</Field>" +


"<Field Name='manyusers'>;#1;#Contoso\\spadmin;#9;#contoso\\user1;#</Field>" +


"</Method>";



The above code snippet tries to add two users to the column named “manyusers”.  Use the ;# symbols before every entity and then end the string with ;# again.  One common mistake we tend to do is to miss out on the ;# towards the end of the string.



Try the above sample to get users added to a multi-value people and group field.



Hope this short blog post is of some help!

Version history
Last update:
‎Sep 01 2020 03:10 PM
Updated by: