Как создать элементы списка SharePoint Online с помощью Kendo UI Grid, используя ODATA и транспортный URL - PullRequest
0 голосов
/ 05 июня 2019

Поддержка Kendo UI Grid OData.SharePoint Online также поддерживает OData V3.Я могу правильно настроить его для чтения данных в соответствии с приведенным ниже кодом.

Но у меня есть список с более чем 5k записями, а SP Online имеет пороговое ограничение в 5k.

Поэтому я хочу настроить подкачку / фильтрацию / сортировку сервера, и я попробовал следующий подход.

Здесь он правильно отображает первые 500 элементов, но следующее нажатие кнопки не работает с динамическим URL.По запросу, он предоставляет следующий запрос для выполнения, но как прикрепить его к событию смены пейджера.

любая помощь будет оценена!

Я попытался запустить несколько API с использованием Javascript / angularjs и подготовитьлокальная переменная, сначала все элементы, а затем назначенные сеткеэто работает, но производительность очень плохая.так что ожидается динамический подход.

var kdatasource = new kendo.data.DataSource({
        type: "odata",
        transport: {
            read: {
                    url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('ListTitleWithMoreThan5K')/items" //$scope.NextQuery,
                    dataType: "json",
                    contentType: "application/json",
                    beforeSend: function (xhr) {
                        xhr.setRequestHeader("Accept", "application/json; odata=verbose")
                }
            }
        },
        sort: { field: "ID" , dir: "desc"}, 
        requestEnd: function(e) {
            console.log(e);
            var response = e.response;
            var type = e.type;
            console.log(type); // displays "read"
            if(response)
            {
                //console.log(e.response.d.__next);
                $scope.NextQuery = e.response.d.__next; //getting next query in response. SP Online have 'SkipToken' not 'skip' for listitems. 
                console.log($scope.NextQuery);
            }
        },
        schema: {
            data: function (data) {
                return data.d && data.d.results ? data.d.results : [data.d];
            },
            total: function (data) {
                return 3000;//we can take care this with separate itemcount query
            },
            model: {
                fields: {
                    "ID": { type: "number" },
                    "Title": { type: "string" }
                }
            },
            errors: function (response) {
                console.error(response);
                return response.error;
            }
        },
        page:1,
        pageSize: 500, // this will become "$top" in query
        serverPaging: true,
        serverFiltering: true,
        serverSorting: true
});

$("#grid").kendoGrid({
    dataSource: kdatasource,
    columns: [{
                    field: "ID",
                    title: "ID",
                    width: 240
                },{
                    field: "Title",
                    title: "Title",
                    width: 240
                }],
    height: 550,
    groupable: false,
    sortable: true,
    filterable: true,
    pageable: {
        refresh: false,
        //pageSize: 10,
        pageSizes: [100, 200, 500, 1000],                   
        buttonCount: 5,
        change:function(e)
        {
             console.log("grid pager clicked!");
             console.log(e);
             //how to rebind grid for 2, 3, page number click?
        }
    } ,
    dataBound: function(e) {
        //console.log(e); // This is calling!
        //console.log("dataBound");
    }
});

Пейджинг / Фильтр / Сортировка должны работать с SharePoint с использованием запросов REST API

...