Добрый день!
Возможно ли сделать поле Мобильный телефон стандартным условием поиска Контакта (при выборе из справочника) в одном разделе.
![]()
Нравится
Доброе утро!
Смотрите обсуждения в этом посте и в этом.
Ещё можно попробовать добавить в карточку выбора из справочника отдельное поле, как обсуждают здесь.
Забыл упомянуть, справочник не обычный а multilookup (Выбор из контактов и аккаунтов).
Решил пойти сложным путем, добавил схему CustomLookupPage (расширил MultiLookupModule) и в нем переопределил
onTabChanged и
generateViewModel
для поиска по мобильному телефону у контакта. Код:
define("CustomLookupPage", ["LookupPage", "LookupPageViewGenerator", "LookupPageViewModelGenerator", "LookupUtilities", "css!LookupPageCSS"],
function(LookupPage, LookupPageViewGenerator, LookupPageViewModelGenerator) {
return Ext.define("Terrasoft.configuration.CustomLookupPage", {
alternateClassName: "Terrasoft.CustomLookupPage",
extend: "Terrasoft.MultiLookupModule",
gridWrapClasses: ["multi-lookup-control"],
onTabChanged: function(activeTab) {
var lookupsInfo = this.get("LookupsInfo");
Terrasoft.each(lookupsInfo, function(lookupInfo) {
if (activeTab.get("Name") !== lookupInfo.entitySchemaName) {
return true;
}
this.lookupInfo = lookupInfo;
this.getSchemaAndProfile(lookupInfo.lookupPostfix, function(entitySchema, profile) {
this.isClearGridData = true;
this.set("gridProfile", profile);
this.entitySchema = entitySchema;
this.initLoadedColumns();
var searchColumn = this.get("searchColumn");
if (!entitySchema.columns[searchColumn.value]) {
this.set("searchColumn", {
value: this.entitySchema.primaryDisplayColumn.name,
displayValue: this.entitySchema.primaryDisplayColumn.caption
});
this.set("searchData", "");
}
this.set("LookupInfo", this.lookupInfo);
this.load(profile, function() {
var lookupInfo = this.lookupInfo;
var entitySchema = this.entitySchema;
//у контакта поиск по мобильному телефону
if (this.entitySchema.name == "Contact") {
this.set("searchColumn", {
value: "MobilePhone",
displayValue: "Мобильный телефон"
});
} else {
this.set("searchColumn", {
value: entitySchema.primaryDisplayColumn.name,
displayValue: entitySchema.primaryDisplayColumn.caption
});
}
var captionLookup = this.getLookupCaption(entitySchema, lookupInfo);
this.set("captionLookup", captionLookup);
this.set("lookupSchemaName", entitySchema.name);
this.setSearchEditFocused();
}.bind(this));
});
}, this);
},
generateViewModel: function() {
var viewModelConfig = LookupPageViewModelGenerator.generate(this.lookupInfo);
//у контакта поиск по мобильному телефону
viewModelConfig.values.searchColumn = {
value: "MobilePhone",
displayValue: "Мобильный телефон"
};
if (!this.lookupInfo.columnValue && this.lookupInfo.searchValue) {
viewModelConfig.values.searchData = this.lookupInfo.searchValue;
viewModelConfig.values.previousSearchData = this.lookupInfo.searchValue;
}
var viewModel = this.Ext.create("Terrasoft.BaseViewModel", viewModelConfig);
viewModel.Ext = this.Ext;
viewModel.sandbox = this.sandbox;
viewModel.Terrasoft = this.Terrasoft;
if (this.lookupInfo.updateViewModel) {
this.lookupInfo.updateViewModel.call(viewModel);
}
viewModel.initCaptionLookup();
viewModel.initHasActions();
viewModel.initLoadedColumns();
if (!this.Ext.isEmpty(this.lookupInfo.filterObjectPath)) {
viewModel.updateFilterByFilterObjectPath(this.lookupInfo.filters, this.lookupInfo.filterObjectPath);
}
if (this.lookupInfo.hideActions) {
viewModel.set("hasActions", false);
}
return viewModel;
},
});
});
Отображается поле на странице следующим образом:
"SxShipper": {
"caption": { "bindTo": "Resources.Strings.SxShipper" },
"dataValueType": this.Terrasoft.DataValueType.LOOKUP,
//"multiLookupColumns": ["SxShipperContact", "SxShipperAccount"],
"lookupListConfig": function() {
return this.getLookupListConfig();
},
"isRequired": true
},
...
getLookupListConfig: function() {
var multiLookupColumns = ["Contact", "Account"];
var multiLookupConfig = multiLookupColumns.map(function(column) {
return {
entitySchemaName: column,
columnName: "SxShipper",
multiLookupColumnName: "SxShipper" + column,
multiSelect: false,
hideActions: true
};
}, this);
var config = {
lookupModuleId: this.Terrasoft.generateGUID(),
lookupPageName: "CustomLookupPage",
multiLookupConfig: multiLookupConfig
};
return config;
},Поиск по телефону рабоает хорошо, но в поле не подтягивается значение, и при выборе из справочника в поле тоже ничего не проставляется

В чем может быть дело и в каком направлении копать?
Попробуйте для начала добиться нормальной работы лукапа по обычному ФИО, а затем модифицируйте под поиск по телефону.