我正在尝试将数据从一个列表复制到其他列表(两个列表都在不同的站点上)以及查找列。但是,我收到查询字段的错误:
价值不在预期范围内
代码工作和数据被复制用于其他非查找字段。我尝试了一切可能的方法,包括增加列表视图查找阈值和所有可能的代码方式,但仍然在ExecuteQuery()
仍然存在错误。
以下是我的查找字段代码:
if (field is FieldLookup && field.InternalName == "Country")
{
var CountryLookup = (item.FieldValues["Country"] as FieldLookupValue).LookupValue.ToString();
var CountryLookupId = (item.FieldValues["Country"] as FieldLookupValue).LookupId.ToString();
FieldLookupValue flvRDS = new FieldLookupValue();
flvRDS.LookupId = int.Parse(CountryLookupId);
itemToCreate["Country"] = flvRDS;
itemToCreate.Update();
destContext.ExecuteQuery();
}
非常感谢帮助。
答案 0 :(得分:0)
我认为item
是您尝试在目标列表上创建的新ListItem。
但你实际上从来没有从field
读取任何价值!所以基本上,你正在尝试使用项目[“Country”]设置新的FieldLookup.LookupId。LookupId,此时逻辑上应为空。
这是我用来从值中检索查找字段ListItem的方法,随意修改它以满足您的需要,因为我不知道您想如何检索它(SPList是Microsoft.SharePoint的别名。 Client.List)。
private ListItem GetLookupItem(FieldLookup lookupField, string lookupValue)
{
string mappingField = lookupField.LookupField;
Microsoft.SharePoint.Client.List lookupList = Context.Web.Lists.GetById(new Guid(lookupField.LookupList));
Context.Load(lookupList);
Context.ExecuteQuery();
ListItemCollection libListItems = lookupList.GetItems(CamlQuery.CreateAllItemsQuery());
Context.Load(libListItems, items => items.Include(
itemlookup => itemlookup.Id,
itemlookup => itemlookup[mappingField]));
Context.ExecuteQuery();
foreach (ListItem mappedItem in libListItems)
{
object mappedField = mappedItem[mappingField];
if (mappedField != null && mappedField.ToString().Equals(lookupValue))
return mappedItem;
}
return null;
}
现在您已拥有相应的ListItem,您可以将item.LookupId
设置为其ID:
if (field is FieldLookup && field.InternalName == "Country")
{
FieldLookupValue flvRDS = new FieldLookupValue();
flvRDS.LookupId = GetLookupItem(field as FieldLookup, "France").Id; // here, dunno how you get your country's name
itemToCreate["Country"] = flvRDS;
itemToCreate.Update();
destContext.ExecuteQuery();
}
如果您想要一个更适合您特定问题的答案,请随意添加更多以前的代码。