Здравствуйте.

Используется BPMonline sales comerce версии 7.6.
В разделе продажи есть стандартные фильтры, при изменении которых фильтруются вывод продаж в гриде, что и сразу отображается. Так же есть в этом разделе кнопка аналитика, где строятся графики и можно писать свои виджеты. Я написал виджет который рисует таблицу с нужными полями. Хочется также применять стандартные фильтры для отображения данных в моей таблице. Собственно вопрос, как получить значения этих фильтров и как правильно обрабатывать событие изменения фильтров для перерисовки моей таблици???

Пример клиентсткого модуля для виджета, который рисует таблицу:

define('SxClientUnitTable', ['ext-base', 'terrasoft', 'sandbox', 'SxClientUnitTableResources', "ChartModuleHelper", "css!SxClientUnitTableCss", "ServiceHelper"],
        function(Ext, Terrasoft, sandbox, resources, ChartModuleHelper, css, ServiceHelper, ConfigurationConstants) {
                function getViewModel() {
                                        return Ext.create('Terrasoft.BaseViewModel', {
                                //todo SysModuleAnalyticsChart deleted
                                                entitySchema: 'Order',
                                                methods: {
                                                        getChart: function(key) {
                                                                sandbox.publish('GenerateChart', key);
                                                        },
                                                        load: function() {

                                                        }
                                                }
                                        });
                                };
                var result = "";
                function generateMainView(renderTo) {
                       
                        var resultConfig = Ext.create('Terrasoft.Container', {
                                id: 'tableOtchetMetkiParamContainer',
                                selectors: {
                                        wrapEl: '#tableOtchetMetkiParamContainer'
                                },
                                renderTo: renderTo
                        });
                        return resultConfig;
                }
                function getInfoMetki(parameters) {

                        var serviceData = {
                                site: parameters[0].toString(),
                                ownerId: parameters[1].toString(),
                                startDate: parameters[2].toString(),
                                dueDate: parameters[3].toString(),
                                countryId: parameters[4].toString()
                        };
                       
                        ServiceHelper.callService("UsrOtchetMetkiGetCollectionConfigurationService", "GetCollectionOtchetMetki",
                                function (response) {
                                debugger
                                        if (response.status == 404) {
                                                this.showInformationDialog("\t Error: \n" + response.message);
                                        }
                                        else if(response.GetCollectionOtchetMetkiResult.length > 0){
                                                result = response.GetCollectionOtchetMetkiResult;
                                                var arrR = result.split(":");
                                                var htmlAdded = ""
МеткаКоличество заказовНа уточнении% уточн.Подтвержденные% Подтв.Завершенные% Заверш.Отмены% Отм.
;
                                                for(var i = 0; i arrR.length - 1; i++){
                                                        //get items
                                                        var strArr = arrR[i].split(" ");
                                                        var metkaOne = strArr[0].replace("{","");
                                                        var metka = metkaOne.replace("}","");
                                                       
                                                        htmlAdded += "" + metka + "" + strArr[1].toString() + ""  + strArr[2].toString() + "" + strArr[3].toString() + "" + strArr[4].toString() + "" + strArr[5].toString() + "" + strArr[6].toString() + "" + strArr[7].toString() + ""  + strArr[8].toString() + "" + strArr[9].toString() + "";
                                                }
                                                //end table
                                                htmlAdded += "";
                                                var el = Ext.get('tableOtchetMetkiParamContainer').setHTML(htmlAdded);
                                                var elemV = Ext.get('Module1');
                                                elemV.toggleCls('my-table');
                                        }
                                        else
                                                result = null;
                                }, serviceData, this);
                }

                var render = function(renderTo) {
                        var viewConfig = generateMainView(renderTo);
                        var viewModel = getViewModel();
                        var filters = getFilteres();
                        var ar = [];
                        ar.push("all");
                        ar.push("all");
                        ar.push("2016-05-01");
                        ar.push("2016-07-04");
                        ar.push("a570b005-e8bb-df11-b00f-001d60e938c6");
                        getInfoMetki(ar);
                       
                       
                        viewConfig.bind(viewModel);
                };
                return {
                        schema: 'Order',
                        methods: {
                               
                                getOrdersForFilter: function(){
                                        var items = [];
                                        var selOrders = Ext.create("Terrasoft.EntitySchemaQuery", {
                                                rootSchemaName: "Order"
                                        });
                                        selOrders.addColumn("SxMark.Name");
                                        selOrders.addColumn("SxCountry.Name");
                                        var filterByUser = Terrasoft.createColumnFilterWithParameter(
                                        Terrasoft.ComparisonType.EQUAL, "SxCountry.Name", "Россия");
                                        selOrders.filters.addItem(filterByUser);
                                        selOrders.getEntityCollection(function (response) {
                                        debugger
                                                if (response.collection.collection.length > 0)
                                                        items = result.collection.getItems();
                                                else
                                                        items = null;
                                        }, this);
                                        return items;
                                },
                                filterChanged: function( filter, eOpts ){
                                        debugger
                                        var c = [];
                                }
                        },
                        userCode: function() {
                               
                        },
                        init: function() {
                                debugger

                        },
                        render: render
                };
        }
)
;

Нравится

2 комментария

Скорее всего вам поможет SDK
https://academy.terrasoft.ru/documents/technic-sdk/7-8-0/rabota-s-filtr…
Есть несколько примеров

К сожалению, ширина сайта не позволяет увидеть страницу целиком :(, поэтому скопируйте все содержимое, например в MSWord

Я решил данную задачу при помощи sandbox. Стандартные (Fixed и Custom) фильтры прикреплены к OrderSectionV2 и работать с ними (afterFiltersUpdated - переопределить метод изменение фильтров) только в этой схеме.

Показать все комментарии

Добрый день. Возникла следующая задача: В зависимости от типа выделенной записи в реестре, отображать или прятать кнопку на экране.
При смене выделенной записи все решается легко при отрабоке события TreeGridSelectionChange.

Проблема заключается в следующем: Какое событие нужно обрабатывать чтобы корректно выполниться после применения фильтров (динамических и статических групп)?

Если обрабатывать DataSourceLoaded, то при вызове Page.DataSource.ActiveRowPrimaryColumnValue или Page.TreeGrid.SelectedNodes[0].Values[entitySchemaPrimaryColumnName] выдается ПРЕДЫДУЩИЙ элемент.

Вопрос: Какое же событие происходит ПОСЛЕ выполнения всех загрузок и перерисовок?

Нравится

3 комментария

Попробуйте воспользоваться вот такой парочкой:

Сообщения

Верхнее будет вызываться когда вы меняете фильтр и при первичной загрузке реестра.
Нижнее при смене активной записи в уже загруженном DataSource.

Внутри скрипта для считывания активной записи можно использовать:

Page.DataSource.ActiveRowPrimaryColumnValue

Есть реестр документов, и в нем динамические группы. при смене группы при отработке скрипта выдается предыдущее значение, соответственно некоректно отрабатыввается логика. При смене выделенного значения все отрабатывает корректно.
сделал так

Моя ошибка, Изменил TreeGridSekectionChange на DataSourceActiveRowChange и все заработало.

Показать все комментарии