2015-09-23 3 views
0

SHAREPOINT 2010 пользователейНужна помощь в получении значения LookupList с помощью CSOM с CAML Query

У меня есть список SharePoint, полный элементы, и один из поля тема. Я хотел бы иметь возможность вернуть эти значения. Если я использую фактическое поле Title, я получу [Object Object] в отличие от значения объекта. Мне интересно, если это проблема с условиями, которые я использую, поскольку они настолько похожи на .Net.

В любом случае, вот что я до сих пор.

<!DOCTYPE html> 

<%@ Page language="C#" %> 

<%@ Register Tagprefix="SharePoint" 

    Namespace="Microsoft.SharePoint.WebControls" 

    Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> 

<%@ Import Namespace="Microsoft.SharePoint" %> 

<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"> 

<head> 

<meta name="WebPartPageExpansion" content="full" /> 

    <!-- the following 5 js files are required to use CSOM --> 

    <script type="text/javascript" src="/_layouts/1033/init.js"></script> 

    <script type="text/javascript" src="/_layouts/MicrosoftAjax.js"></script> 

    <script type="text/javascript" src="/_layouts/sp.core.js"></script> 

    <script type="text/javascript" src="/_layouts/sp.runtime.js"></script> 

    <script type="text/javascript" src="/_layouts/sp.js"></script> 

<script type="text/javascript" src="//code.jquery.com/jquery-1.11.3.min.js"></script> 

<SharePoint:FormDigest ID="FormDigest1" runat="server"></SharePoint:FormDigest> 



    <script type="text/ecmascript"> 







    window.onload = function OnLoad() { 





SP.SOD.executeFunc('sp.js','SP.ClientContext',retrieveListItems()); 



var oList; 



function retrieveListItems() { 



var Url = '/Policies'; 



    var clientContext = new SP.ClientContext(Url);  //.(Url); //SP.ClientContext.get_current(); 



    var oList = clientContext.get_web().get_lists().getByTitle('HRPolicies'); 
var oListTags = clientContext.get_web().get_lists().getByTitle('TopicsSF'); 

//var field = oList.get_fields().getByInternalNameOrTitle("HRTopics");  
//var lookupField = clientContext.CastTo<FieldLookup>(field); 

//var childIdField = oList["HRTopics"] as FieldLookupValue[]; 

//if (childIdField != null) 
//{ 
// foreach(var lookupValue in childIdField) 
    // { 
    //  var childId_Value = lookupValue.LookupValue; 
    //  var childId_Id = lookupValue.LookupId; 
    // } 
//} 

//end if no working, try field itself as getllokup as 

    var camlQuery = new SP.CamlQuery(); 

    camlQuery.set_viewXml(multiLookupValues); 

    // this.collListItem = oList.getItems(camlQuery); 

    var PertinentItems = oList.getItems(camlQuery); 

clientContext.Load(item, i => i["HRTopics"]); 
     clientContext.Load(items); 
     clientContext.ExecuteQuery(); 
     var lookupValues = new ArrayList(); 
     FieldLookupValue[] values = item["HRTopics"] as FieldLookupValue[]; 
     foreach (ListItem listItem in items) 
     { 
      var lookupValue = new FieldLookupValue { LookupId = listItem.Id }; 
      lookupValues.label; 
     } 
     item.ParseAndSetFieldValue(lookupColumnName, null); 
     item["HRTopics"] = lookupValues.ToArray(); 
     ctx.ExecuteQuery(); 

// var lookupListId = new Guid(lookupField.LookupList); 
    // var lookupList = clientContext.Web.Lists.GetById(lookupListId); 
// 
    // clientContext.load(collListItem,lookupField); 

    // works alert("birds"); 



    // clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));   

    clientContext.executeQueryAsync(onQuerySucceeded, onQueryFailed);   
// 




//} 



function onQuerySucceeded(sender, args) { 



    var listItemInfo = ''; 



    var listItemEnumerator = collListItem.getEnumerator(); 



    while (listItemEnumerator.moveNext()) { 

     var oListItem = listItemEnumerator.get_current(); 

     listItemInfo += '\nID: ' + oListItem.get_id() + 

      '\nTitle: ' + oListItem.get_item('Title') + 
'\nHRTopics: ' + oListItem.get_item('HRTopics') 
    } 





    document.getElementById('realData').innerHTML = listItemInfo.toString(); 



} 



function onQueryFailed(sender, args) { 



    alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace()); 

} 

} 





    </script> 





<!--[if gte mso 9]> 

<SharePoint:CTFieldRefs runat=server Prefix="mso:" FieldList="FileLeafRef,WikiField,_dlc_DocId,_dlc_DocIdUrl,_dlc_DocIdPersistId"><xml> 







































<mso:CustomDocumentProperties> 

<mso:_dlc_DocId msdt:dt="string">SCP5UENJTFED-1359-20</mso:_dlc_DocId> 

<mso:_dlc_DocIdItemGuid msdt:dt="string">7d65ee24-642b-450f-8285-a1fd946836f4</mso:_dlc_DocIdItemGuid> 

<mso:_dlc_DocIdUrl msdt:dt="string">site/_layouts/DocIdRedir.aspx?ID=SCP5UENJTFED-1359-20, SCP5UENJTFED-1359-20</mso:_dlc_DocIdUrl> 

</mso:CustomDocumentProperties> 

</xml></SharePoint:CTFieldRefs><![endif]--> 

</head> 

<body> 

    <div id="realData"> 

    </div> 

</body> 

</html>​ 

ответ

0

Возвращаемого значение для столбца поиска с помощью объектной модели JavaScript является составным объектом (с несколькими свойствами) вместо примитивного или строки. Возможно, вам захочется получить доступ к идентификатору найденного элемента или текстовому значению просматриваемого поля, поэтому он возвращает оба.

Попробуйте добавить .get_lookupValue() в конец oListItem.get_item('HRTopics').

Редактировать:

Если столбец поиска позволяет использовать несколько значений, объект, возвращаемый .get_item() будет массив объектов; сам массив делает не поддерживает метод .get_lookupValue(). Вам нужно будет перебрать элементы в массиве и вызвать .get_lookupValue() для каждого элемента, чтобы получить нужные значения.

var valueString = ""; 
var values = oListItem.get_item('HRTopics'); 
for(var i in values){ 
    valueString += values[i].get_lookupValue(); 
} 
+0

Я пробовал это. Это рекомендация предоставляется большинству мест. Я получаю эту ошибку: SCRIPT438: Объект не поддерживает свойство или метод 'get_lookupValue' –

+0

Это многозначный столбец поиска? Если это так, вызов '.get_item()' будет возвращать массив объектов вместо одного объекта. Сам массив не поддерживает метод get_lookupValue() ', но для каждого из элементов массива вы можете вызвать' .get_lookupValue() 'как обычно. – Thriggle

+0

Я думал, что цикл нагрузки HRTopics вытащил данные из массива? –