updateSeriesList (series, removed);
series. Задает изменяемые ряды;
removed. Признак удаления рядов из коллекции.
Метод updateSeriesList обновляет список рядов.
Для выполнения примера предполагается наличие на странице компонента WorkbookBox с наименованием «workbookBox» (см. «Пример создания компонента WorkbookBox»), также необходимо в обработчике события открытия документа добавить следующий код:
//Переменная, в которой будут храниться выбранные ряды var selSeries; //Обработчик окончания взаимодействия с репозиторием. Служит для установки доступности кнопки //"Разгруппировать ряды" в зависимости от выбранного ряда metabase.EndRequest.add(PP.Delegate(function(){ //Получим выбранные ряды рабочей книги selSeries = wbk.getActiveSheet().getSelectedSeries(); //Установим доступность кнопки if (selSeries.length == 1 && PP.TS.isGroupSerie(selSeries[0])) { ungroupSeriesButt.setEnabled(true); } else { ungroupSeriesButt.setEnabled(false); } })); var ungroupSeriesButt = new PP.Ui.Button({ ParentNode: document.body, //родительский узел DOM Content: "Разгруппировать ряды", //подпись Click: PP.Delegate(onClickUngroupSeries) }); function onClickUngroupSeries() { //Получаем и сортируем массив выделенных рядов var j; var Series = selSeries.sort(tsService._sorting.bind(wbk)); var realIndex = wbk.getRealIndex(undefined, Series[0]); var lastIndex = wbk.getRealIndex(undefined, Series[Series.length - 1]); //Получаем индекс последнего ряда в группе for (var i = 0; i < Series.length; i++) { lastIndex += wbk.getLoadedChildrenCount(Series[i]); } //Устанавливаем свойства элементов массива рядов for (j = 0; j < Series.length; j++) { Series[j].expanded = true; Series[j].atts = { its: { it: []} }; delete Series[j].calc; } //Получаем тело запроса к серверу для редактирования рядов рабочей книги var body = tsService.getEditSeriesSettings(wbk, Series); //Вносим информацию о выделенных рядах в тело запроса body.SetWbkMd.tArg.metaGet.seriesFilter = { range: { start: realIndex, count: lastIndex - realIndex + 1 } }; //Устанавливаем признак того, что рабочая книга изменена wbk.setIsChanged(true); //Посылаем запрос на сервер tsService._send(body, onUngroupSeries); // Обработчик события окончания выполнения метода UnGroupSeries function onUngroupSeries(sender, args){ //Получаем объект JSON из ответа сервера var res = JSON.parse(args.ResponseText); var groupSeries = Series; //Получаем ряды рабочей книги var wbkSeries = res.SetWbkMdResult.meta.series.its.it; var series = []; var k = 1; //Обновляем список рядов wbk.updateSeriesList(wbkSeries); //Получаем количество строк в группе var count = wbk.getLoadedChildrenCount(wbkSeries[0]); //Создаем объект, содержащий информацию о рядах в группе for (var j = 0; j < groupSeries.length; j++) { for (var i = 0; i < wbkSeries.length; i++) { if (wbkSeries[i].parent && wbkSeries[i].parent.k == groupSeries[j].k) { wbkSeries[i].atts = { its: { it: []} }; wbkSeries[i].index = Series[0].index + k; delete wbkSeries[i].calc; if (groupSeries[j].parent) wbkSeries[i].parent = groupSeries[j].parent; else { wbkSeries[i].parent = { k: -1, id: "" }; for (var kk = 0; kk < groupSeries.length; kk++) { if (wbkSeries[i].k == groupSeries[kk].k) { groupSeries[kk].parent = undefined; } } } series.push(wbkSeries[i]); k++; } } } //Получаем тело запроса к серверу на изменение рядов var body = tsService.getEditSeriesSettings(wbk, series); //Получаем индекс первого ряда в группе var start = wbk.getRealIndex(undefined, wbkSeries[0]); //Устанавливаем родительский ряд для каждого ряда в группе if (wbkSeries[0].parent) { var parentSerie = wbk.getSerie(wbkSeries[0].parent.k); start = wbk.getRealIndex(undefined, parentSerie); count = wbk.getLoadedChildrenCount(parentSerie) + 1; } //Вносим информацию о группе в тело запроса body.SetWbkMd.tArg.metaGet.seriesFilter = { range: { start: start, count: count } }; //Устанавливаем признак того, что рабочая книга изменена wbk.setIsChanged(true); //Посылаем запрос к серверу tsService._send(body, refresh); //Удаляем ряд, который был группой tsService.removeSeries(wbk, groupSeries, refresh); } } function refresh() { //Обновляем весь компонент для отображения рабочей книги workbookBox.refreshAll(); }
После выполнения примера на html-странице будет размещена кнопка с наименованием «Разгруппировать ряды». Необходимо выбрать ряд, который является группой и нажать на данную кнопку. После этого сгруппированный ряд рабочей книги будет разгруппирован.
См. также: