2017-09-05 89 views
0

我有一个名为“Books”的列表,其中包含类型为文本的列'Name','AuthorName','ISBN'。现在我有另一个名为“BillTokenStore”的列表,我想在“BillTokenStore”中添加查找列'AuthorName'。以下是我所做的。将查找列添加到使用CSOM的列表中

using (ClientContext context = new ClientContext(webFullUrl: siteUrl)) 
      { 
       context.Credentials = new SharePointOnlineCredentials(userName, GetPassWord()); 

       Web web = context.Web; 

       ListCollection listCollection = web.Lists; 
       List list = listCollection.GetByTitle("BillTokenStore"); 


       string schemaLookupField = @"<Field Type='Lookup' Name='InStock' StaticName='InStock' DisplayName='InStock' List = 'Books' ShowField = 'Title' /> "; 
       Field lookupField = list.Fields.AddFieldAsXml(schemaLookupField, true, AddFieldOptions.DefaultValue); 

       context.ExecuteQuery();    
      } 

当我运行此代码时,出现错误“价值未落入预期范围内的sharepoint 2013”​​。这里有什么问题?提前致谢。

注意:我能够通过完全的UI实现相同的功能。我也能够添加其他类型的字段,如选择,布尔和全部代码。

回答

1

您需要显式加载列表和该列表的字段。

另外,我们需要传递查找列表的GUID。

请尝试以下修改后的代码:

using (ClientContext context = new ClientContext(webFullUrl: siteUrl)) 
{ 
    context.Credentials = new SharePointOnlineCredentials(userName, GetPassWord()); 

    Web web = context.Web; 

    List booksList = context.Web.Lists.GetByTitle("Books"); 

    List list = context.Web.Lists.GetByTitle("BillTokenStore"); 

    context.Load(list, l => l.Fields); 
    context.Load(booksList, b => b.Id); 
    context.ExecuteQuery(); 

    string schemaLookupField = @"<Field Type='Lookup' Name='InStock' StaticName='InStock' DisplayName='InStock' List='"+ booksList.Id +"' ShowField = 'Title' />"; 
    Field lookupField = list.Fields.AddFieldAsXml(schemaLookupField, true, AddFieldOptions.DefaultValue); 
    lookupField.Update(); 

    context.Load(lookupField); 
    context.ExecuteQuery();  
} 
+0

由于高塔姆。提供指导后,它的工作。 – Parashuram