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