2015-10-11 24 views
0

我試圖從僅包含特定字段的SharePoint列表中獲取列表項。 該列表包含其他列表的查找字段,我只需要這些LookupId。如何在JSOM中檢索Sharepoint中的查找ID

我知道兩種情況來縮小返回的字段。

第一個是CAML。在這種情況下,我可以使用LookupId =「TRUE」選項來抑制LookupValue,但服務器返回其他我不需要的系統字段(例如修改者,創建者等)。

第二個是在ClientContext.load方法中使用'Include'。在這種情況下,服務器不會發送系統字段,但我不知道如何指定(如果可能)只接收LookupId查找字段。 我嘗試了Include(project.id,projectId,project.lookupId,project.Inlude(id))中的幾個版本,但沒有一個能夠工作。

所以,我的問題是:如何檢索只有查找字段的LookupIds的SharePoint列表的指定字段?

回答

0

如何僅檢索指定的SharePoint列表的字段 LookupIds僅用於查找字段?

這個問題有點不清楚,但假設你想獲取lookup id,你可以按如下操作。

假設您已使用JSOM檢索​​並將其存儲到變量中,您的查找字段將由SP.LookupFieldValue對象表示。

您可以從檢索到的item對象中訪問它,如下所示。

var lookupFieldValue = item.get_item('FieldName'); 
var lookupId = lookupFieldValue.get_lookupId(); 
+1

要清楚,我從查找場只需要LookipId和不需要LookupValue(向服務器發送數據最小化)。 – h2o

3

你非常接近存檔所需的結果,需要兩種技術的順序組合來檢索查找值的ID部分,如下面所示:

var ctx = SP.ClientContext.get_current(); 
var list = ctx.get_web().get_lists().getByTitle(listTitle); 
var items = list.getItems(createLookupQuery('Project')); 
ctx.load(items,'Include(Project)'); 
ctx.executeQueryAsync(
    function(){ 
     if(items.get_count() > 0){ 
      var item = items.getItemAtIndex(0); 
      console.log(item.get_fieldValues()['Project'].get_lookupId()); 
     } 
    }, 
    function(sender,args) 
    { 
     console.log(args.get_message()); 
    }); 


function createLookupQuery(lookupFieldName){ 
     var qry = new SP.CamlQuery(); 
     qry.set_viewXml("<View><ViewFields><FieldRef Name='" + lookupFieldName + "' LookupId='TRUE' /></ViewFields></View>"); 
     return qry; 
} 
  • 在CAML查詢我們指定屬性LookupId='TRUE'檢索Id 查找字段值的一部分
  • 由於CAML查詢也包含系統字段值,因此我們使用 SP.ClientContext.load method返回特定字段的值 只有
+0

正如我所知,無法將加載方法中的Include字段選擇器與CAML查詢中的ViewField結合起來。但會嘗試... – h2o

+0

它支持結合兩種技術 –

+0

如果將字段放在ViewFields和Include中,我會得到「值不在預期範圍內」的錯誤。 – h2o

相關問題