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();
}
}
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();
}