Как создать view для реестра. Необходимо добавить в своем разделе представления, при выборе которых отображался базовый реестр с наложеными фильтрами.
Нравится
Антон, общий алгоритм решения задачи сводится к следующему:
1) регистрация View в базе данных (таблица [SysModuleGrid] и [SysModuleGridView]);
2) создание соответсвующего объекта в конфигурации;
3) привязка созданного представления к разделу.
Если необходимы уточнения и подробные инструкции, пожалуйста, спрашивайте.
"Андрей Каспаревич" написал:Если необходимы уточнения и подробные инструкции, пожалуйста, спрашивайте.
С уважением,
Каспаревич Андрей
Эксперт 3-й линии поддержки
Конечно необходимы, если бы я знал, как это сделать я бы не спрашивал.:smile: Сразу хочу напомнить инструкции нужны по
BPMONLINE 7
К сожалению пока в BMPonline 7.0 простого способа реализации добавления представлений для реестра не предусмотрено. Возможно они появятся в будущем.
Сейчас альтернативой может послужить использование настроенных динамических групп.
В вашем случае это будет настройка по типу Приход/Расход.
С уважением,
Фещенко Денис
Разработчик BMPonline
"Фещенко Денис" написал:К сожалению пока в BMPonline 7.0 простого способа реализации добавления представлений для реестра не предусмотрено. Возможно они появятся в будущем.
Денис, а не простой способ?
Реализовать представления ,так как Вы нарисовали на скриншоте (в меню вкладок) без доработок в базовых модулей невозможно.
Нашел немного другой способ, который, думаю, вас устроит:
Вы можете в разделе зарегистрировать действие для каждого представления:
this.actions = [ { caption: “Приход”, methodName: 'showIncome' } … ]
С обработчиком, который проставляет значение какому-то атрибуту viewModel и перезагружает представление. Также можно сменить и заголовок вкладки.
this.methods. showIncome= function() { this.set("OperationFilterType", ‘Income’); this.set('tabName', ‘Операции - Приход’); this.clear(this.get('currentTabName')); this.load(this.get('currentTabName')); };
И все что Вам останется это – дополнительно в разделе определить метод modifySelectQuery. В котором вы на основе этого атрибута дополнительно наложите фильтр на запрос.
this.methods.modifySelectQuery = function(select, tabName, event) { var operationFilterType = this.get('OperationFilterType'); if (operationFilterType === ‘Income') { /*Накладываем фильтр на select* / } }
Надеюсь это решение Вам подойдет.
"Фещенко Денис" написал:Реализовать представления ,так как Вы нарисовали на скриншоте (в меню вкладок) без доработок в базовых модулей невозможно.
Нашел немного другой способ, который, думаю, вас устроит:
Вы можете в разделе зарегистрировать действие для каждого представления:
this.actions = [
{
caption: “Приход”,
methodName: 'showIncome'
}
…
]
С обработчиком, который проставляет значение какому-то атрибуту viewModel и перезагружает представление. Также можно сменить и заголовок вкладки.
this.methods. showIncome= function() {
this.set("OperationFilterType", ‘Income’);
this.set('tabName', ‘Операции - Приход’);
this.clear(this.get('currentTabName'));
this.load(this.get('currentTabName'));
};
И все что Вам останется это – дополнительно в разделе определить метод modifySelectQuery. В котором вы на основе этого атрибута дополнительно наложите фильтр на запрос.
this.methods.modifySelectQuery = function(select, tabName, event) {
var operationFilterType = this.get('OperationFilterType');
if (operationFilterType === ‘Income') {
/*Накладываем фильтр на select* /
}
}
Надеюсь это решение Вам подойдет.
Что-то у меня не получилось с методом modifySelectQuery добавил вот такой код
this.actions = [ { caption: 'Приход', methodName: 'showIncome' }, { caption: 'Расход', methodName: 'showExpense' } ]; this.methods.showIncome = function() { this.set("OperationFilterType", 'Income'); this.set('tabName', 'Операции - Приход'); this.clear(this.get('currentTabName')); this.load(this.get('currentTabName')); }; this.methods.showExpense = function() { this.set("OperationFilterType", 'Expense'); this.set('tabName', 'Операции - Расход'); this.clear(this.get('currentTabName')); this.load(this.get('currentTabName')); }; this.methods.modifySelectQuery = function(select, tabName, event) { var operationFilterType = this.get('OperationFilterType'); if (operationFilterType === 'Income') { select.filters.addItem('IncomingFilter', Terrasoft.createColumnFilterWithParameter( Terrasoft.ComparisonType.EQUAL, 'OperationType', ConfigurationConstants.Incoming.Code)); } if (operationFilterType === 'Expense') { select.filters.add('IncomingFilter', Terrasoft.createColumnFilterWithParameter( Terrasoft.ComparisonType.EQUAL, 'OperationType', ConfigurationConstants.Expense.Code)); } };
Фильтры не отрабатывают
Антон, будьте внимательней.
Метод "select.filters.addItem" принимает 1-н параметр - сам фильтр. Из-за этого он у Вас не отрабатывает.
А Ваш код для наложения фильтров при OperationFilterType = "Expense" должен работать (если вы правильно построили сам фильтр). Только что проверил аналогичное использование фильтрации.
Денис, исправил фильтр.
Но дело в том, что у меня метод modifySelectQuery не вызывается вообще
Добрый день, Антон!
Возможно у Вас старая версия базовых пакетов.
Загляните в модуль "SectionViewModelGenerator" есть ли там в методе "getSelect" вызов функции "modifySelectQuery".
Если есть - то вам нужно в "дебаге" посмотреть чего она у Вас не вызывается.
Если нет - то нужно просто обновить базовые пакеты.