1

Sharepoint でネストされたクエリを実行することは可能ですか? Sharepoint の非同期要求により、やりたいことができなくなっているようです。基本的に私は2つのリストを持っています。1 つのリスト (チケット) は特定のイベントを説明し、もう 1 つのリスト (更新) はそれらのイベントの更新をリストします。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>
4

1 に答える 1