Javascript 在Sharepoint中运行嵌套查询

Javascript 在Sharepoint中运行嵌套查询,javascript,sharepoint,Javascript,Sharepoint,是否可以在Sharepoint中运行嵌套查询?似乎Sharepoint的异步需求阻止了我做我想做的事情。基本上我有两个清单。一个列表,Tickets,描述一个特定事件,而另一个,Updates,列出这些事件的更新。票证中的主键链接到更新中的外键。我正在尝试创建一个仪表板来显示票据及其更新 下面的代码创建表fine并从Tickets表中添加正确的条目,但不从Updates表中添加信息。我假设这是因为Sharepoint列表查询的异步性质,无法找到解决方法。使用JQuery回调看起来是迄今为止最有希

是否可以在Sharepoint中运行嵌套查询?似乎Sharepoint的异步需求阻止了我做我想做的事情。基本上我有两个清单。一个列表,Tickets,描述一个特定事件,而另一个,Updates,列出这些事件的更新。票证中的主键链接到更新中的外键。我正在尝试创建一个仪表板来显示票据及其更新

下面的代码创建表fine并从Tickets表中添加正确的条目,但不从Updates表中添加信息。我假设这是因为Sharepoint列表查询的异步性质,无法找到解决方法。使用JQuery回调看起来是迄今为止最有希望的,但我没有使用它的经验,我正在努力确保这是我应该走的道路。使问题进一步复杂化的是,我没有访问sharepoint builder的权限,因此我似乎无法使用通过文本编辑器提供的ECMA代码

<script type="text/javascript">

ExecuteOrDelayUntilScriptLoaded(showTable, "sp.js");
var  tableField = "<table><tr><th>Site</th><th>Ticket</th><th>Last Update</th><th>Last Update Time</th><th>Controls</th></tr>";

function showTable()
{
 var context = new SP.ClientContext.get_current();
 var web = context.get_web();
 var list = web.get_lists().getByTitle('BCTickets');

 var query = new SP.CamlQuery();

 query.set_viewXml('<View><Query><Where><Eq><FieldRef Name="Active" /><Value Type="Integer">1</Value></Eq></Where></Query><ViewFields><FieldRef 

Name="TicketNumber" /><FieldRef Name="Site" /><FieldRef Name="Site" /></ViewFields></View>');

 this.collListItem = list.getItems(query);
 context.load(collListItem);

 context.executeQueryAsync(Function.createDelegate(this, this.createTable), Function.createDelegate(this, this.failed));
}

function createTable()
{
 var context = new SP.ClientContext.get_current();
 var web = context.get_web();
 var list = web.get_lists().getByTitle('Updates');

 var query = new SP.CamlQuery();

 var ListEnumerator = this.collListItem.getEnumerator();

 while(ListEnumerator.moveNext())
 {
  var currentItem = ListEnumerator.get_current();

  tableField += '<TR><TD>' + currentItem.get_item('Site') + '</TD><TD>' + currentItem.get_item('TicketNumber') + '</TD><TD>';

  query.set_viewXml('<View><Query><Where><Eq><FieldRef Name="BCTicketsID" /><Value Type="Integer">' + currentItem.get_item('ID') + 

'</Value></Eq></Where></Query><ViewFields><FieldRef Name="UpdateEntry" /><FieldRef Name="UpdateDate" /></ViewFields></View>');

  this.updateList = list.getItems(query);

  context.load(updateList);

  context.executeQueryAsync(Function.createDelegate(this, this.updateTable), Function.createDelegate(this, this.failed));

  tableField += '</TD><TD></TD></TR>';

 }

 tableField += "</TABLE>";

 document.getElementById("innerTable").innerHTML = tableField;
}

function updateTable()
{
 var ListEnumerator = this.updateList.getEnumerator();

 tableField += "<TABLE>";

 while(ListEnumerator.moveNext())
 {
  var currentItem = ListEnumerator.get_current();

  tableField += "<TR><TD>" + currentItem.get_item('UpdateEntry') + "</TR></TD>";
 }

 tableField += "</TABLE>";
}

function failed(sender, args)
{
 alert("failed. Message:" + args.get_message());
}</script>

<DIV ID="innerTable"></DIV>

ExecuteOrderLayUntillScriptLoaded(可显示“sp.js”);
var tableField=“SiteTicketLast UpdateLast Update TimeControls”;
函数showTable()
{
var context=new SP.ClientContext.get_current();
var web=context.get_web();
var list=web.get_list().getByTitle('BCTickets');
var query=new SP.CamlQuery();
query.set_viewXml('1');
this.collListItem=list.getItems(查询);
加载(collListItem);
executeQueryAsync(Function.createDelegate(this,this.createTable),Function.createDelegate(this,this.failed));
}
函数createTable()
{
var context=new SP.ClientContext.get_current();
var web=context.get_web();
var list=web.get_list().getByTitle('Updates');
var query=new SP.CamlQuery();
var ListEnumerator=this.collListItem.getEnumerator();
while(ListEnumerator.moveNext())
{
var currentItem=ListNumerator.get_current();
tableField++''+currentItem.get_item('Site')++''+currentItem.get_item('TicketNumber')++'';
query.set_viewXml(“”+currentItem.get_item('ID')+
'');
this.updateList=list.getItems(查询);
load(updateList);
context.executeQueryAsync(Function.createDelegate(this,this.updateTable),Function.createDelegate(this,this.failed));
tableField+='';
}
tableField+=“”;
document.getElementById(“innerTable”).innerHTML=tableField;
}
函数updateTable()
{
var ListEnumerator=this.updateList.getEnumerator();
tableField+=“”;
while(ListEnumerator.moveNext())
{
var currentItem=ListNumerator.get_current();
tableField+=“”+currentItem.get_item('UpdateEntry')+“”;
}
tableField+=“”;
}
函数失败(发送方,参数)
{
警报(“失败。消息:+args.get_Message());
}

这是一篇比较老的文章,但只是在开始下一步之前完成了需要异步查询的练习。Scot Hillier关于Promise objects的文章为我解决了这个问题: