2017-03-13 49 views
0

我已经在上述问题上看到了很多信息,但到目前为止,没有任何信息能够解答我正在寻找的问题。我试图检索具有大量查找字段的列表项。我已经成功地获得了一些查询价值,但没有其他人,我不明白为什么。另外,看起来'null'项目在返回的数据中不被接受?如果查找字段不包含值,则会引发错误?它是否正确?以下是我的代码。另一个问题(我的标题中提到的大问题)是,除了ID或标题之外,我试图插入某些内容的查找值会引发错误:未找到或初始化引用。在这种情况下,我的查找字段引用了作为单行文本返回的计算列。所以我的查询字段是Course1Date/DateRange,其中DateRange表示calc列的字段名。错误:“属性或字段尚未初始化,尚未请求或请求尚未执行,可能需要明确请求。”正在检索LookupValues,Javascript SharePoint 2013,无法正常工作

function getLookupValues(){ 
 
    var clientContext = SP.ClientContext.get_current(); 
 
    var list = clientContext.get_web().get_lists().getByTitle('Lookup'); 
 
    var caml = new SP.CamlQuery(); 
 
    caml.set_viewXml('<View><Query><Where><Geq>' + 
 
       '<FieldRef Name=\'ID\'/><Value Type=\'Number\'>82</Value>' + 
 
       '</Geq></Where></Query><RowLimit>10</RowLimit></View>'); 
 

 
    var returnedItems = list.getItems(caml); 
 
    clientContext.load(returnedItems); 
 
    clientContext.executeQueryAsync(success, failure); 
 
    } 
 
    function success(){ 
 
    var listiteminfo=''; 
 
    var enumerator = returnedItems.getEnumerator(); 
 
    while(enumerator.moveNext()) 
 
    { 
 
     var listItem = enumerator.get_current(); 
 
     if(listItem.get_item('Course1')) { 
 
     var course1 = listItem.get_item('Course1').get_lookupValue(); 
 
     } 
 
     if(listItem.get_item('Course2')) { 
 
     var course2 = listItem.get_item('Course2').get_lookupValue(); 
 
     } 
 
     if(listItem.get_item('Course1Date')) { 
 
     var course1Date = listItem.get_item('Course1Date').get_lookupValue(); 
 
     } //throws error for this lookup field 
 

 
    listiteminfo += '\nCourse1: '+course1+'\nCourse2: '+course2+'\nCourse1Date: '+course1Date; 
 

 
    } 
 
    alert(listiteminfo); 
 
      } 
 
    function failure(){ 
 
    alert("Failed"); 
 
    }

回答

0

你必须初始化字段,以获取查找值。必须在上下文中加载ListItem。如果查找字段中有空值,get.lookupValue()将引发异常。因此,在获取查找值之前,请检查字段值是否为空。请在下面尝试我的解决方法,并让我知道它是否有效。

function getLookupValues() { 
     var clientContext = SP.ClientContext.get_current(); 
     var list = clientContext.get_web().get_lists().getByTitle('Lookup'); 
     targetListItem = list.getItemById(82); 
     clientContext.load(targetListItem, 'Title'); 
     clientContext.load(targetListItem, 'Course1'); 
     clientContext.load(targetListItem, 'Course1Date'); 
     clientContext.load(targetListItem, 'Course2'); 
     clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed)); 
    } 
    function onQuerySucceeded() { 
     var resultData = ""; 
     resultData += targetListItem.get_item('Title'); 
     if (targetListItem.get_item('Course1') != null) 
      resultData += targetListItem.get_item('Course1').get_lookupValue(); 
     if (targetListItem.get_item('Course1Date') != null) 
      resultData += targetListItem.get_item('Course1Date').get_lookupValue(); 
     if (targetListItem.get_item('Course2') != null) 
      resultData += targetListItem.get_item('Course2').get_lookupValue(); 
     alert(resultData); 
    } 
    function onQueryFailed(sender, args) { 
     alert('Request failed. \nError: ' + args.get_message() + '\nStackTrace: ' + args.get_stackTrace()); 
    } 
+0

你好,纳文,谢谢你的回应。有没有办法拉动查询中的所有查找字段值,减去那些包含空值的查询字段值? – JackSki

+0

我应该可能会将我的查询更改为大于或等于82.代码更新为“Geq”82 – JackSki

+0

上面的测试但它不起作用。它只适用于做1件而不是几件。 – JackSki