Множественный выбор из справочника в окне фильтрации
Добрый день.
Возникла проблема с реализацией следующего функционала:
для отчета в Excel сделали собственное окно фильтрации с выбором дат.
В этом же окне необходимо сделать множественный выбор подразделения(справочник контрагенты тип подразделение) для фильтрации. Тут то и получается загвоздка.
При использовании такого кода:
LookupUtilities.ThrowOpenLookupMessage(sandbox, config, addCallBack, this);
окно выбора открывается, но так как окно фильтрации работает в тихом режиме, после выбора значений callback не отрабатывает и мы попадаем в реестр активности вместо окна фильтрации. Как можно обойти это либо как использовать стандартный lookupEdit для множественного выбора из справочника?
Версия BPM 7.2.0.942
Нравится
Здравствуйте, Иван!
Не могли бы Вы более полно опистаь проблему и то, как Вы ее решаете и привести код страницы.
Не совсем понял, что подразумевается под тихим режимом.
Также посмотрите тему 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); };