是否可以在Sharepoint中运行嵌套查询?似乎Sharepoint的异步需求阻止我做我想做的事情。基本上我有两个清单。一个列表Tickets描述了特定事件,而另一个列表(更新)列出了对这些事件的更新。 Tickets中的主键链接到Updates中的外键。我正在尝试创建一个仪表板来显示故障单及其更新。
以下代码可以很好地创建表,并从Tickets表中添加正确的条目,但不会添加Updates表中的信息。我假设这是因为Sharepoint的列表查询的异步性质,我无法找到解决方法。到目前为止,使用JQuery回调看起来是最有希望的,但我没有使用它的经验,我正在努力确保这是我应该走的路。使问题更加复杂的是,我无法访问sharepoint构建器,因此我似乎无法通过文本编辑器获得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>
答案 0 :(得分:2)
有点旧文章,但在开始下一步之前,只需要完成需要异步查询的练习。 Scot Hillier关于Promise对象的文章为我解决了这个问题: