2017-03-13 78 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