Проблемы при открытии раздела из карточки редактирования
Добрый день.
Есть задача добавлять в продукт сопряженные продукты (нечто вроде матрицы). При этом есть требование, чтобы при добавлении сопряженных продуктов были доступны все способы фильтрации и поиска - как в разделе Продукты (в том числе, Группы и Каталог). В связи с этим было принято решение создать страницу CrossProductSectionV2, унаследованную от ProductSectionV2. Эта страница открывается при нажатии нужной копки на странице ProductPageV2. Пробовали два подхода к открытию, но оба сопряжены с определенными проблемами.
1. Через this.sandbox.loadModule
addProductsExtended: function() { /// <summary>Открывает раздел продуктов для выбора и добавления в матрицу.</summary> var parameters = { viewModelConfig: { NrbBaseProduct: this.getBaseProduct() } }; var instanceConfig = { schemaName: "CrossProductSectionV2", isSchemaConfigInitialized: true, entitySchemaName: "Product", useHistoryState: true, isSeparateMode: true, isInChain: true }; var config = { renderTo: "centerPanel", id: this.getCrossProductSectionModuleId(), instanceConfig: instanceConfig, parameters: parameters, keepAlive: true }; this.sandbox.loadModule("SectionModuleV2", config); }, getCrossProductSectionModuleId: function() { /// <summary>Формирует идентификатор модуля для добавления продуктов в матрицу.</summary> return this.sandbox.id + "_CrossProductSectionV2"; }, getBaseProduct: function() { /// <summary>Вовзращает идентиификатор базового продукта для матрицы.</summary> var value = this.get("Id") || this.get("PrimaryColumnValue"); var displayValue = this.get(this.primaryDisplayColumnName); var baseProduct = { value: value, displayValue: displayValue }; return baseProduct; }
В это случае инициализация базового продукта NrbBaseProduct (к которому привязываем сопряженные) в CrossProductSection происходит без проблем. Но есть ряд проблем с отображением и последующей выгрузкой модуля CrossProductSection.
Немного некорректно отображается содержимое GridUtilsContainer (съедена верхняя часть), также показан какой-то toggle при нажатии на который - чистый лист (хеш при этом сменяется на что-то невразумительное - без имени страницы ProductPageV2)
Ровно то же самое происходит и при нажатии кнопки Закрыть - разве что toggle также исчезает
На кнопку Закрыть в CrossProductSectionV2 повешен простой обработчик
onCloseButtonCustomClick: function() { /// <summary>Обработчки нажатия на кнопку Закрыть.</summary> this.sandbox.publish("BackHistoryState"); },
2. Другой способ открытия - через PushHistoryState
addProductsExtended: function() { /// <summary>Открывает раздел продуктов для выбора и добавления в матрицу.</summary> var parameters = { viewModelConfig: { NrbBaseProduct: this.getBaseProduct() } }; var stateObj; var requestUrl; var params = this.sandbox.publish("GetHistoryState"); stateObj = { schemaName: "CrossProductSectionV2", isSchemaConfigInitialized: true, entitySchemaName: "Product", useHistoryState: true, isSeparateMode: true, isInChain: true, parameters: parameters, id: this.getCrossProductSectionModuleId() }; requestUrl = "SectionModuleV2/CrossProductSectionV2"; this.sandbox.publish("PushHistoryState", { hash: requestUrl, stateObj: stateObj }); },
В этом случае открытие и отображение, происходит нормально, но есть проблема с инициализацией базового продукта. Похоже, что объект parameters не обрабатывается. Пока использую решение с инициализацией через публикацией сообщения, но этот подход имеется свой недостаток. В частности после обновления страницы по F5 продукт уже не сможет проинициализироваться.
Также Закрытие, в случае если, открывались и закрывались Группы и/или Расширенная фильтрация произойдет только после n-го нажатия на кнопку Закрыть, где n - число раз когда открывали Группы или Расширенную фильтрацию.
Подскажите, пожалуйста как решить проблему - чтобы модуль Кросс-продукт нормально инициализировался, отображался и закрывался?
Нравится
Что в это время отображается в консоли и на панели Network? Все запросы корректны? Ошибок никаких нет?
Да, все запросы корректны, ошибок в консоли не наблюдается. Есть только предупреждения при открытии CrossProductSection, что на скрине
Можно ещё третий подход: сделать в разделе продуктов действие «Сопрячь» с выбором нескольких записей. Выбираете два продукта, пользуясь группами, каталогом и прочим, затем запускаете действие, а оно создаёт запись в объекте детали связи многих ко многим одного продукта с другим.
Александр, спасибо за ответ. Эту задачу на текущий момент решили способом 2, устранив вот этот момент
Также Закрытие, в случае если, открывались и закрывались Группы и/или Расширенная фильтрация произойдет только после n-го нажатия на кнопку Закрыть, где n - число раз когда открывали Группы или Расширенную фильтрацию.
Устранили путем переопределения пары методов на пустые
removeCardHistoryState: Terrasoft.emptyFn, setInitialHistoryState: Terrasoft.emptyFn,
Но дальше - больше. Теперь хотят, чтобы во всех местах, где есть lookup поля Продукт - была возможность поиска по группам и Каталогу. А если пойти еще далее, то, пожалуй, во всех справочниках, по которым в системе зарегистрирован раздел, чтобы была возможность отображать группы с возможностью управления через lookupListConfig - по аналогии с действиями, которые можно скрыть, указав hideActions: true. Но это уже, пожалуй, идея для будущих улучшений продукта.
Орленко Андрей Николаевич пишет:
Теперь хотят, чтобы во всех местах, где есть lookup поля Продукт - была возможность поиска по группам и Каталогу. А если пойти еще далее, то, пожалуй, во всех справочниках, по которым в системе зарегистрирован раздел, чтобы была возможность отображать группы с возможностью управления через lookupListConfig - по аналогии с действиями, которые можно скрыть, указав hideActions: true. Но это уже, пожалуй, идея для будущих улучшений продукта.
В таком случае стоит завести на этом сайте идею. Просмотрел существующие, вроде бы никто такого не предлагал.