2017-02-09 25 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から値を読み取ったことはありません。したがって、基本的には、新しいFieldLookup.LookupIdをアイテム["Country"]で設定しようとしています.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を持っていることを、あなたはその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

コードで行ったように、LookupIdの代わりにルックアップ項目のIDを取得してみてください。 – Kilazur

関連する問題