gpt4 book ai didi

javascript - 在 Sharepoint 中运行嵌套查询

转载 作者:行者123 更新时间:2023-11-30 18:10:33 27 4
gpt4 key购买 nike

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

以下代码可以很好地创建表并从 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>

最佳答案

有点旧的帖子,但只是经历了在开始下一步之前需要完成异步查询的练习。 Scot Hillier 关于 Promise 对象的文章为我解决了这个问题:

http://www.shillier.com/archive/2013/03/04/using-promises-with-the-javascript-client-object-model-in-sharepoint-2013.aspx

关于javascript - 在 Sharepoint 中运行嵌套查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14672905/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com