Добрый день!
Возможно ли сделать поле Мобильный телефон стандартным условием поиска Контакта (при выборе из справочника) в одном разделе.
Нравится
Доброе утро!
Смотрите обсуждения в этом посте и в этом.
Ещё можно попробовать добавить в карточку выбора из справочника отдельное поле, как обсуждают здесь.
Забыл упомянуть, справочник не обычный а 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; },
Поиск по телефону рабоает хорошо, но в поле не подтягивается значение, и при выборе из справочника в поле тоже ничего не проставляется
В чем может быть дело и в каком направлении копать?
Попробуйте для начала добиться нормальной работы лукапа по обычному ФИО, а затем модифицируйте под поиск по телефону.