WCF サービス (SharePoint 内) でデータを使用する関数があります。このサービスは、アイテムに必要な特定のフィールドを返さないため、SharePoint クライアント オブジェクト モデルを使用して、WCF サービスから返された結果にある ID を使用してフィールドをクエリします。
function LoadAllNews() {
var listUrl = "/_vti_bin/ListData.svc/Pages";
$.getJSON(listUrl,
function (data) {
$.each(data.d,
function (i, result) {
GetImageUrl(result.Id, function (image) {
$(ConstructHtml(image, result.Title, result.Path, result.Name)).appendTo("#News");
});
});
});
}
ここでデバッグresult
すると、常に同じ順序でアイテムが返されますが、GetImageUrl はクエリを非同期で実行するため、アイテムは同じ順序で追加されません。ほとんどの場合、画像を取得する時間が異なるため、ランダムに見える場合があります。
function GetImageUrl(id, callback) {
var context = new SP.ClientContext();
var items = context.get_web().get_lists().getByTitle('Pages').getItemById(id);
context.load(items);
context.executeQueryAsync(function () {
callback(items.get_item('PublishingRollupImage'));
});
}
function ConstructHtml(imageUrl, title, path, name) {
var html = "" // a long html string..
return html;
}
これを sharepoint.stackexchange に投稿することもできますが、対象者はここの方が広く、SharePoint 自体よりも JavaScript でこれを処理する方法が問題になります。
これにどのようにアプローチすべきかについてのアイデアはありますか? LoadAllNews() で画像をスキップし、すべての項目が追加されたら、JavaScript/jQuery を使用して各ニュース項目の画像を読み込むようなことを考えていました。
前もって感謝します。