Множественный выбор из справочника в окне фильтрации

Добрый день.
Возникла проблема с реализацией следующего функционала:
для отчета в Excel сделали собственное окно фильтрации с выбором дат.
В этом же окне необходимо сделать множественный выбор подразделения(справочник контрагенты тип подразделение) для фильтрации. Тут то и получается загвоздка.
При использовании такого кода:
LookupUtilities.ThrowOpenLookupMessage(sandbox, config, addCallBack, this);
окно выбора открывается, но так как окно фильтрации работает в тихом режиме, после выбора значений callback не отрабатывает и мы попадаем в реестр активности вместо окна фильтрации. Как можно обойти это либо как использовать стандартный lookupEdit для множественного выбора из справочника?
Версия BPM 7.2.0.942

Нравится

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

Здравствуйте, Иван!
Не могли бы Вы более полно опистаь проблему и то, как Вы ее решаете и привести код страницы.
Не совсем понял, что подразумевается под тихим режимом.
Также посмотрите тему http://www.community.terrasoft.ua/forum/topic/10347, возможно это то, что Вам необходимо. Суть в том, что нужно использовать не ThrowOpenLookupMessage, а Open.

При открытии окна фильтрации в адресной строке остается '...0/Nui/ViewModule.aspx#SectionModule/ActivitySection/', поэтому когда в окне справочника нажимаем кнопку выбрать или отмена, то попадаем не на страницу фильтрации а в реестр активностей. При этом yandler отрабатывает нормально.
Файл с кодом модуля прикреплен.
Модуль вызывается так:

window.ActivityViewModel = this;
                var id = sandbox.id + "_ActivityReportFilterPage";
                var renderTo = Ext.get("centerPanel");
                var historyState = sandbox.publish("GetHistoryState");
                sandbox.publish("PushHistoryState", {hash: historyState.hash.historyState});
                sandbox.loadModule("ActivityReportFilterPage", {
                    renderTo: renderTo,
                    id: id,
                    keepAlive: true
                });

Иван, я немного не понял, после замены ThrowOpenLookupMessage на вызов Open проблема все еще актуальна или нет?)

После замены на Open и добавления в init следующих строк:

var state = sandbox.publish('GetHistoryState');
                var currentHash = state.hash;
                var currentState = state.state || {};
                if (currentState.moduleId === sandbox.id) {
                    return;
                }
                var newState = Terrasoft.deepClone(currentState);
                newState.moduleId = sandbox.id;
                sandbox.publish('ReplaceHistoryState', {
                    stateObj: newState,
                    pageTitle: null,
                    hash: currentHash.historyState,
                    silent: true
                });

процесс пошел немного дальше. Теперь открывается окно фильтрации(то что нужно) с одним лишь заголовком, без полей...

Иван, посмотрите пример в EmailPage. Там в lookup.config передается набор загружаемых колонок:

			this.methods.getLookupConfig = function(columnName) {
				var scope = this;
				var callback = function(args) {
					scope.onLookupSelect(args);
				};
				return {
					config: {
						entitySchemaName: 'VwRecepientEmail',
						columnName: columnName,
						columns: ['ContactId'],
						filters: Terrasoft.createColumnIsNotNullFilter('ContactId'),
						multiSelect: true
					},
					callback: callback
				};
			};
...
this.methods.openCopyRecepientLookupEmail = function() {
				var lookup = this.getLookupConfig('CopyRecepient');
				lookup.config.actionsButtonVisible = false;
				LookupUtilities.Open(sandbox, lookup.config, lookup.callback, this, this.renderTo);
			};
...
this.methods.onLookupSelect = function(args) {
				var columnName = args.columnName;
				var isContactEmpty = Ext.isEmpty(this.get('Contact'));
				var items = args.selectedRows.collection.items;
				this.recepientCollection = this.recepientCollection || [];
				var collection = this.recepientCollection;
				var columnValue = this.get(columnName);
				if (Ext.isEmpty(columnValue)) {
					columnValue = '';
				} else {
					columnValue = columnValue.trim();
					var addSymbol = '';
					var symbol = columnValue[columnValue.length - 1];
					if (symbol === ';') {
						addSymbol = ' ';
					} else {
						addSymbol = '; ';
					}
					columnValue = columnValue + addSymbol;
				}
				Terrasoft.each(items, function(item) {
					var contactId = item.ContactId;
					if (isContactEmpty && Ext.isEmpty(columnValue) && columnName === 'Recepient') {
						this.loadLookup('Contact', contactId);
						isContactEmpty = false;
					}
					var displayValue = item.displayValue;
					if (collection.indexOf(contactId) < 0) {
						collection.push(contactId);
					}
					if (!((columnValue.indexOf(displayValue + ';') === 0) ||
						(columnValue.indexOf(displayValue + ';') >= 0))) {
						columnValue += displayValue + '; ';
					}
				}, this);
				this.set(columnName, columnValue);
			};

Разобрался, спасибо.

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