Sharepoint 2013 Sharepoint 2013 JSOM:如何迭代列表中的每一项(获取列值)并获取其父查找列表列的信息。

Sharepoint 2013 Sharepoint 2013 JSOM:如何迭代列表中的每一项(获取列值)并获取其父查找列表列的信息。,sharepoint-2013,Sharepoint 2013,列表1有一个到列表2的查找列。我需要使用JSOM为两个列表提供列值。 目前,我正在从列表1获取executeAsync调用中每个项的列值 var List1 = context.get_web().get_lists().getByTitle('List1'); var List2 = context.get_web().get_lists().getByTitle('List2'); var collListItem = List1.getItems(camlQuery); context.l

列表1有一个到列表2的查找列。我需要使用JSOM为两个列表提供列值。 目前,我正在从列表1获取executeAsync调用中每个项的列值

var List1 = context.get_web().get_lists().getByTitle('List1');
var List2 = context.get_web().get_lists().getByTitle('List2');
var collListItem = List1.getItems(camlQuery);
context.load(collListItem);
context.executeQueryAsync(onQuerySucceeded, onQueryFailed);

function onQuerySucceeded(sender, args) {
    var listItemEnumerator = collListItem.getEnumerator();

    while (listItemEnumerator.moveNext()) {
        var oListItem = listItemEnumerator.get_current();

        var listItemProject = oListItem.get_item('ProjectID'); // my lookup column
        var listProjectLookupId = listItemProject.get_lookupId();

var itemProject = List2.getItemById(listProjectLookupId);                               
        var country= null;
        context.load(itemProject);
        context.executeQueryAsync(function () {
            country = itemProject.get_item('Country'); // columns from List2

        });
// using column values from both lists
}

enter code here

但在第二个异步调用中,我得到了空值。。可能它们不是一个接一个地发生。

我建议您利用从父/子列表检索数据

假设以下列表:

  • 联系人
    -包含
    国家
    查找字段(目标列表:
    国家
  • 国家/地区
然后,下面的示例演示如何从两个列表中检索列表项

示例

function createJoinQuery(joinListTitle,joinFieldName,projectedFields)
{
   var queryText = 
   "<View>" +
       "<Query/>" +
         "<ProjectedFields>";
    for(var idx in projectedFields) {
        queryText += String.format("<Field Name='{0}_{1}' Type='Lookup' List='{0}' ShowField='{1}' />",joinListTitle,projectedFields[idx]);
    }
    queryText +=
         "</ProjectedFields>" +
         "<Joins>" +
             "<Join Type='INNER' ListAlias='{0}'>" +
                "<Eq>" +
                  "<FieldRef Name='{1}' RefType='Id'/>" +
                  "<FieldRef List='{0}' Name='ID'/>" +
                "</Eq>" +
             "</Join>" +
         "</Joins>" +
    "</View>";   
    var qry = new SP.CamlQuery();
    qry.set_viewXml(String.format(queryText,joinListTitle,joinFieldName));
    return qry;
}

function getListItems(listTitle,joinListTitle,joinFieldName,projectedFields,success,error)
{ 
   var ctx = SP.ClientContext.get_current();
   var web = ctx.get_web();
   var list =  web.get_lists().getByTitle(listTitle);
   var items = list.getItems(createJoinQuery(joinListTitle,joinFieldName,projectedFields));

   ctx.load(items);
   ctx.executeQueryAsync(
     function() {
       success(items);  
     },
     error
   );
}
var listTitle = 'Contacts';
var joinListTitle = 'Countries' 
var joinFieldName = 'Country';
var projectedFields = ['ID','Title'];

getListItems(listTitle,joinListTitle,joinFieldName,projectedFields,
  function(items){
     //print items
     for(var i = 0; i < items.get_count(); i++){
        var item = items.getItemAtIndex(i);
        var contactName = item.get_item('Title');
        var countryName = item.get_item('Countries_Title').get_lookupValue();

     }
  },
  function(sender,args){
      console.log(args.get_message());
  });
函数createJoinQuery(joinListTitle、joinFieldName、projectedFields)
{
变量queryText=
"" +
"" +
"";
for(项目字段中的变量idx){
queryText+=String.format(“”,joinListTitle,projectedFields[idx]);
}
queryText+=
"" +
"" +
"" +
"" +
"" +
"" +
"" +
"" +
"" +
"";   
var qry=new SP.CamlQuery();
set_viewXml(String.format(queryText、joinListTitle、joinFieldName));
返回qry;
}
函数getListItems(listTitle、joinListTitle、joinFieldName、projectedFields、success、error)
{ 
var ctx=SP.ClientContext.get_current();
var web=ctx.get_web();
var list=web.get_list().getByTitle(listTitle);
var items=list.getItems(createJoinQuery(joinListTitle,joinFieldName,projectedFields));
ctx.荷载(项目);
ctx.executeQueryAsync(
函数(){
成功(项目);
},
错误
);
}
用法

function createJoinQuery(joinListTitle,joinFieldName,projectedFields)
{
   var queryText = 
   "<View>" +
       "<Query/>" +
         "<ProjectedFields>";
    for(var idx in projectedFields) {
        queryText += String.format("<Field Name='{0}_{1}' Type='Lookup' List='{0}' ShowField='{1}' />",joinListTitle,projectedFields[idx]);
    }
    queryText +=
         "</ProjectedFields>" +
         "<Joins>" +
             "<Join Type='INNER' ListAlias='{0}'>" +
                "<Eq>" +
                  "<FieldRef Name='{1}' RefType='Id'/>" +
                  "<FieldRef List='{0}' Name='ID'/>" +
                "</Eq>" +
             "</Join>" +
         "</Joins>" +
    "</View>";   
    var qry = new SP.CamlQuery();
    qry.set_viewXml(String.format(queryText,joinListTitle,joinFieldName));
    return qry;
}

function getListItems(listTitle,joinListTitle,joinFieldName,projectedFields,success,error)
{ 
   var ctx = SP.ClientContext.get_current();
   var web = ctx.get_web();
   var list =  web.get_lists().getByTitle(listTitle);
   var items = list.getItems(createJoinQuery(joinListTitle,joinFieldName,projectedFields));

   ctx.load(items);
   ctx.executeQueryAsync(
     function() {
       success(items);  
     },
     error
   );
}
var listTitle = 'Contacts';
var joinListTitle = 'Countries' 
var joinFieldName = 'Country';
var projectedFields = ['ID','Title'];

getListItems(listTitle,joinListTitle,joinFieldName,projectedFields,
  function(items){
     //print items
     for(var i = 0; i < items.get_count(); i++){
        var item = items.getItemAtIndex(i);
        var contactName = item.get_item('Title');
        var countryName = item.get_item('Countries_Title').get_lookupValue();

     }
  },
  function(sender,args){
      console.log(args.get_message());
  });
var listTitle='Contacts';
var joinListTitle='国家'
var joinFieldName='国家';
var projectedFields=['ID','Title'];
getListItems(listTitle、joinListTitle、joinFieldName、projectedFields、,
功能(项目){
//打印项目
对于(var i=0;i
我知道这是一个旧线程,但我认为本文将帮助未来的用户了解如何