Sharepoint: как отобразить AppendOnlyHistory в шаблоне отображения в сценарии кросс-публикации

Всеобъемлющее требование, которое я пытаюсь выполнить, - показывать комментарии (сделанные по списку, элемент за элементом).

Я добавил функцию на стороне автора, включив управление версиями в списке и добавив текстовое поле с параметром "Добавить изменения в существующий текст", установленным в значение true. Это действительно позволяет мне комментировать элементы и отображать их в хронологическом порядке, но только на стороне автора. Проблема в том, что часть пользовательского интерфейса будет сделана на другом семействе сайтов, и я не могу найти простой способ получить все комментарии там.

Пока что каждый найденный ресурс указывает на

 <SharePoint:AppendOnlyHistory runat="server" FieldName="YourCommentsFieldName" ControlMode="Display"/>

Дело в том, что я не могу (не знаю, как) использовать это внутри шаблона отображения. До сих пор я получаю все свои данные, используя REST API, через

        var siteUrl=_spPageContextInfo.webAbsoluteUrl.replace("publishing","authoring");
        $.ajax({
            url: siteUrl + "/_api/web/lists/getbytitle('" + listname + "')/items(" + id + ")",
            type: 'GET',
            async:false,
            headers: {"accept": "application/json;odata=verbose",},
            dataType: 'JSON',
            success: function(json) {
               console.log(json);
               //var obj = $.parseJSON(JSON.stringify(json.d.results));
               //alert(obj);
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                alert("error :"+XMLHttpRequest.responseText);
            }
        });

Это дает мне только последний комментарий. Мне нужен простой способ получить всю цепочку.

1 ответ

Решение

В итоге я использовал объектную модель javascript, чтобы получить их так:

function GetComments(listname, itemId) {
    var siteUrl = _spPageContextInfo.webAbsoluteUrl.replace("publishing", "authoring");
    if ($(".comments-history").length) {
        $().SPServices({
            operation: "GetVersionCollection",
            async: false,
            webURL: siteUrl,
            strlistID: listname,
            strlistItemID: itemId,
            strFieldName: "Comments",
            completefunc: function (xData, Status) {

                $(xData.responseText).find("Version").each(function (data, i) {

                    var xmlComment = $(this)[0].outerHTML;
                    var arr = xmlComment.split(/comments|modified|editor/g);
                    var comment = arr[1].trim().substring(2, arr[1].length-2);
                    var dateSt = Date.parse((arr[2].substring(1, arr[2].length)).replace('/"', ''));
                    var user = getUsername(arr[3]);

                    var st = "<div class='comment-item'><div class='comment-user'>" + user + "(" + FormatDate(dateSt) + ")</div>";
                    st += "<div class='comment-text'>" + comment + "</div></div>";
                    $(".comments-history").append(st);
                });
            }
        });
    }
}

Разбор может быть лучше, но это только начальная рабочая идея

Другие вопросы по тегам