множественный выбор
окно фильтрации
Технические вопросы
7.x

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

Добрый день.
Возникла проблема с реализацией следующего функционала:
для отчета в 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 отрабатывает нормально.
Файл с кодом модуля прикреплен.
Модуль вызывается так:[javascript]
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
});
[/javascript]

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

После замены на Open и добавления в init следующих строк:
[javascript]
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
});
[/javascript]
процесс пошел немного дальше. Теперь открывается окно фильтрации(то что нужно) с одним лишь заголовком, без полей...

Иван, посмотрите пример в EmailPage. Там в lookup.config передается набор загружаемых колонок:
[javascript]
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);
};
[/javascript]

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

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