2017-02-09 64 views
2

我試圖將數據從一個列表複製到另一個列表(這兩個列表位於不同的站點)以及查找列。但是,我得到一個錯誤的查詢字段爲:值不在預期範圍內 - SharePoint查找字段的例外

值不在預期範圍內

代碼的工作和數據被複制其他非查找字段。我嘗試了所有可能的方式,包括增加列表視圖查找閾值和所有可能的代碼方式,但仍然錯誤仍然存​​在於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

我認爲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; 
} 

現在,你有相應的列表項,你可以用它的ID設置你的item.LookupId

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

隨意,如果你想爲你的特定問題的答案更適合多增加一些以前的代碼。

+0

實際上,item是我閱讀的列表項中的現有數據,itemToCreate是我需要複製它的新項目。另外,我在CountryLookup&CountryLookupId中分別獲取國家名稱和ID。只是他們沒有被複制。 – Pratik

+0

嘗試檢索查找的項目的ID而不是LookupId,就像我在代碼中那樣。 – Kilazur

相關問題