Skip to content

Update multi-value lookup column values in SharePoint 2010 using managed CSOM

October 11, 2013

I received a task that needs to update multi-value lookup column value in SharerePoint 2010 using C#.  While it is easy to set columns of simple data types, with lookup column it is a bit more complicated.  Searching Web gives me following link which is helpful. However, that only works with single value column.   After a bit trial and error, I worked out following code that is functioning.

public void UpdateLookup(string siteUrl, int id, string lookupColumnName,
List multiLookupValues, string listName, string lookupListName)
{
	using (ClientContext ctx = new ClientContext(siteUrl))
	{
		ctx.Credentials = new NetworkCredential(_username, _password, _domain);
		var list = ctx.Web.Lists.GetByTitle(listName);
		var item = list.GetItemById(id);
		var lookUpList = ctx.Web.Lists.GetByTitle(lookupListName);
		CamlQuery query = new CamlQuery();
		query.ViewXml = CreateCaml(multiLookupValues);
		var items = lookUpList.GetItems(query);
		ctx.Load(item, i => i[lookupColumnName]);
		ctx.Load(items);
		ctx.ExecuteQuery();
		var lookupValues = new ArrayList();
		FieldLookupValue[] values = item[lookupColumnName] as FieldLookupValue[];
		foreach (ListItem listItem in items)
		{
			var lookupValue = new FieldLookupValue { LookupId = listItem.Id };
			lookupValues.Add(lookupValue);
		}
		item.ParseAndSetFieldValue(lookupColumnName, null);
		item.Update();
		item[lookupColumnName] = lookupValues.ToArray();
		item.Update();
		ctx.ExecuteQuery();
	}
}
private string CreateCaml(List multiLookupValues)
{
	if (multiLookupValues.Count == 1)
	{
		return string.Format(@"

				{0}

          ", multiLookupValues[0]);
	}
	StringBuilder sb = new StringBuilder();
	sb.Append(@"

							");

	foreach (string multiLookupValue in multiLookupValues)
	{
		sb.Append(string.Format(@"

	             {0}
                  ", multiLookupValue));
	}
	sb.Append(@"

                 ");
	return sb.ToString();
}

Advertisements

From → SharePoint 2010

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: