Изменить базовое поле поиска, при открытии модального окна, справочного поля
Добрый день!
Появилась необходимость изменить базовое поле поиска, при выборе в окне справочного поля, и подставить туда своё значение.
Как это выглядит на примере:
![]()
При открытии данного модального окна, должно быть своё предустановленное значение
Вопрос в том, как это реализовать.
Поиски не увенчались успехом, застопорился на схеме 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, Этот способ помог мне закрыть мою задачу, работает, спасибо!