Изменить базовое поле поиска, при открытии модального окна, справочного поля
Добрый день!
Появилась необходимость изменить базовое поле поиска, при выборе в окне справочного поля, и подставить туда своё значение.
Как это выглядит на примере:
При открытии данного модального окна, должно быть своё предустановленное значение
Вопрос в том, как это реализовать.
Поиски не увенчались успехом, застопорился на схеме LookupPage.js
var primaryDisplayColumn = entitySchema.primaryDisplayColumn; if (primaryDisplayColumn) { this.lookupInfo.searchColumn = { value: primaryDisplayColumn.name, displayValue: primaryDisplayColumn.caption }; }
Значение для данной колонки берётся отсюда, но как его подменять для определённого поля - не сообразил
Нравится
В lookupListConfig просто укажи searchValue, пример:
columns: ["Id", "Name"], searchValue: "Вериф", columnName: "Name", orders: [{ columnPath: "Name", direction: Terrasoft.OrderDirection.ASC }],
В lookupListConfig просто укажи searchValue, пример:
columns: ["Id", "Name"], searchValue: "Вериф", columnName: "Name", orders: [{ columnPath: "Name", direction: Terrasoft.OrderDirection.ASC }],
Григорий Чех,
"Gun": { "dataValueType": Terrasoft.DataValueType.LOOKUP, "lookupListConfig": { columns: ["LkpGauges", "UsrConfigProduct"], searchValue: "Вериф", // Вот это работает, в инпуте value заполняется columnName: "UsrConfigProduct", orders: [{ columnPath: "UsrConfigProduct" direction: Terrasoft.OrderDirection.ASC }], "filters": [ //Фильтры ] } }
Это интересно. Т.е. теоретически можно прокинуть searchColumn в lookupInfo, но если у объекта есть колонка для отображения - всё перетрется.
варианта 2:
- Доделывать Lookup-модуль
- Оставить как есть, убрать в схеме детали отображаемое поле.
Попробуйте так
"Gun": { "lookupListConfig": { searchValue: "Вериф", searchColumn: "UsrConfigProduct" } }
Варфоломеев Данила,
Вот в этом то и вопрос, на каком уровне это реализовать, и как. Либо в настройках lookupListConfig есть такая возможность, либо пробовать перехватывать и прокидывать значения
Самое интересное в том, что у меня получалось прокинуть значения. Но при обращении к lookupinfo он забирает все равно свои значения, которые получил из схемы ConfItem.js (куда ссылается справочное поле). И там прописано поле для отображения
(PrimaryDisplayColumnName)
Попробуй переопределить loadVocabulary как то так\:
loadVocabulary: function(args, tag) { var column = this.getColumnByName(tag); args.schemaName = column.referenceSchemaName; //подставь свой this.callParent(arguments); }
Если не получится отпишись, вечером смогу проєксперементировать.
Григорий Чех,
не совсем понял, что менять. Однако там все равно схема (ConfItem) по которой открытие справочника производится, я думаю, что её подменить можно, но это не то, что мы ищем
Прокинуть как-то туда primaryDisplayColumnName, у меня не увенчалось успехом
VadimCh пишет:
Однако там все равно схема (ConfItem) по которой открытие справочника производится
Я немного неправильно описал.
Схема ConfItem генерится на основании объекта в конфигурации. На ConfItem ссылается справочное поле, которое вы пытаетесь открыть. Соответственно и берется PrimaryDisplayColumnName из ConfItem. Те 2 варианта так и остаются: либо менять PrimaryDisplayColumnName в null в каждом объекте на которое ссылается нужное вам справочное поле, либо переделать логику LookupPage.
Варфоломеев Данила,
В рамках реализации задачи, заместил LookupPage, и переработал тот кусок кода, который скидывал в посте, и присоединил новую схему
"lookupListConfig": { lookupPageName: "KmFiltrationBaseLookup", }
Как по мне, про два варианта вы правы, но первый не подходит - если этот объект используется по всей системе не единожды. И везде требуется разная колонка, либо существует множество старых записей на основе колонки для отображения. При изменении колонки - старые записи будут отображаться не корректно
VadimCh,
А не могли бы Вы посоветовать что и где переработать, чтобы решить эту проблему?
Alex Zaslavsky,
Да, конечно
Чтобы решить именно эту проблему, требуется создать модуль,
// Полный листинг схемы, создаем свой модуль, и пихаем туда эту схему, дав ей своё название define("KmFiltrationBaseLookup", ["LookupPage", "LookupPageViewGenerator", "LookupPageViewModelGenerator", "ProcessModuleUtilities", "LookupUtilities", "css!LookupPageCSS"], function(LookupPage, LookupPageViewGenerator, LookupPageViewModelGenerator, ProcessModuleUtilities) { return Ext.define("Terrasoft.configuration.KmFiltrationBaseLookup", { alternateClassName: "Terrasoft.KmKLSHLookupPage", extend: "Terrasoft.LookupPage", gridWrapClasses: ["custom-lookup-control"], init: function(callback, scope) { callback = callback || Terrasoft.emptyFn; if (this.viewModel) { callback.call(scope); return; } var lookupInfo = this.getLookupInfo(); if (this.Ext.isArray(lookupInfo)) { var configIndex = 0; var parameters = this.parameters; if (!this.Ext.isEmpty(parameters)) { configIndex = parameters.index; } this.lookupInfo = lookupInfo[configIndex]; this.lookupsInfo = lookupInfo; } else { this.lookupInfo = lookupInfo; } this.processModuleFlag = this.sandbox.publish("CardProccessModuleInfo", null, [this.sandbox.id]); this.initHistoryState(); this.getSchemaAndProfile(this.lookupInfo.lookupPostfix, function(entitySchema, profile) { if (this.isDestroyed) { return; } // Здесь сам объект, и сюда мы прокидываем свои свойства // Свойства для каждой колонки находятся в схеме объекта (ConfItem.js Пример!) entitySchema.primaryDisplayColumn = { caption: "Модель", columnPath: "UsrConfigProduct.UsrName", dataValueType: 1, isInherited: false, isRequired: true, isValueCloneable: false, name: "UsrConfigProduct.UsrName", size: 250, uId: "c4f28c00-8c5d-46cd-98de-f38d2e52a2dc", usageType: 0 }; var primaryDisplayColumn = entitySchema.primaryDisplayColumn; if (primaryDisplayColumn) { this.lookupInfo.searchColumn = { value: primaryDisplayColumn.name, displayValue: primaryDisplayColumn.caption }; } this.lookupInfo.entitySchema = entitySchema; this.lookupInfo.gridProfile = profile; var viewModel = this.viewModel = this.generateViewModel(); viewModel.lookupInfo = this.lookupInfo; viewModel.load(profile, callback, scope); }); } }); } );
Колонку для поиска можно изменить базовыми средствами.
Для этого нужно добавить атрибут в карточку редактирования:
"AprCustomer": {
"dataValueType": this.Terrasoft.DataValueType.LOOKUP,
"lookupListConfig": {
"searchColumn": {
"value": "AprINN",
"displayValue": "ИНН"
}
}
},
Ilyas Ablitarov,
а где берется названия атрибута AprCustomer?
VadimCh, Этот способ помог мне закрыть мою задачу, работает, спасибо!