Создать view Bpmonline 7

Как создать view для реестра. Необходимо добавить в своем разделе представления, при выборе которых отображался базовый реестр с наложеными фильтрами.

Нравится

9 комментариев

Антон, общий алгоритм решения задачи сводится к следующему:
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".
Если есть - то вам нужно в "дебаге" посмотреть чего она у Вас не вызывается.
Если нет - то нужно просто обновить базовые пакеты.

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