Доброго времени суток коллеги. Имею проблемы (очень нужна помощь) пожалуйста кто сможет подскажите. Мне нужно было сделать
1) при открытии справочного окна сделать поле поиска по умолчанию ИНН, я посмотрел тут и создал модуль. (все работает)
2) Нужно сделать неактивной кнопку "Добавить", пока не нажимаем в кнопку "Поиск" и если пусто(то есть нет результатов поиска), то только тогда сделать кнопку "Добавить" активной.
Шаги: Я добавил два метода как указано в этой статье, но не понимаю, куда добавлять:
Я поискал в своем конфиругации и там создана viewModel, которая вызывает сам деталь деталь. И попробовал установить её в методе getLookupPageConfig
define("UsrEmploymentDataRowViewModel", ["EmploymentDataRowViewModel", "LookupUtilitiesV2"], function(LookupUtilities) { Ext.define("Terrasoft.configuration.UsrEmploymentDataRowViewModel", { extend: "Terrasoft.EmploymentDataRowViewModel", alternateClassName: "Terrasoft.UsrEmploymentDataRowViewModel", getLookupPageConfig: function() { this.callParent(arguments); var config = { entitySchemaName: "Lead", columns: ["Id"], associatedProjectId: this.get("Id"), multiSelect: true, actionsButtonVisible: true, //указываем нашу кастомизированную схему lookupPageName: "UsrAccountBaseLookupModule" }; this.openLookup( config, function(selected) { window.console.log("selected", selected);}, this); }, }); return Terrasoft.UsrEmploymentDataRowViewModel; });
Вот сама деталь:
define("EmploymentDataFieldsDetail", ["UsrAccountBaseLookupModule", "UsrEmploymentDataRowViewModel"], function() { return { entitySchemaName: "ContactCareer", attributes: { "Account": { dataValueType: this.Terrasoft.DataValueType.LOOKUP, lookupListConfig: { lookupPageName: "UsrAccountBaseLookupModule", }, }, }, methods: { getRowViewModelClassName: function() { return "Terrasoft.UsrEmploymentDataRowViewModel"; } }, diff: /**SCHEMA_DIFF*/ [] /**SCHEMA_DIFF*/ , }; }); // схема детали "Данные по занятости"
Ошибка:
Теперь, я вместо openLookup попытался открыть через LookupUtilities, вот код:
define("UsrEmploymentDataRowViewModel", ["EmploymentDataRowViewModel", "LookupUtilitiesV2"], function(LookupUtilities) { Ext.define("Terrasoft.configuration.UsrEmploymentDataRowViewModel", { extend: "Terrasoft.EmploymentDataRowViewModel", alternateClassName: "Terrasoft.UsrEmploymentDataRowViewModel", getLookupPageConfig: function() { this.callParent(arguments); var config = { lookupPageName: "UsrAccountBaseLookupModule" }; LookupUtilities.Open(config, function(selected){ window.console.log(selected);}, this);}, }); return Terrasoft.UsrEmploymentDataRowViewModel; });
Получаю ошибку:
Весь код, модуля:
define("UsrAccountBaseLookupModule", [ "LookupPage", "LookupPageViewGenerator", "LookupPageViewModelGenerator", "ProcessModuleUtilities", "LookupUtilities", "css!LookupPageCSS", ], function( LookupPage, LookupPageViewGenerator, LookupPageViewModelGenerator, LookupUtilities, ProcessModuleUtilities ) { return Ext.define("Terrasoft.configuration.UsrAccountBaseLookupModule", { alternateClassName: "Terrasoft.UsrEDFDAccountLookupPage", 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; } entitySchema.primaryDisplayColumn = { caption: "ИНН", columnPath: "INN", dataValueType: 1, isInherited: false, isRequired: true, isValueCloneable: true, name: "INN", size: 250, uId: "4b8aa047-9de8-42b8-ab32-fbf0f9a39479", 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); } ); }, renderLookupView: function(schema, profile) { var config = this.getLookupConfig(schema, profile); var topPanelConfig = LookupPageViewGenerator.generateFixed(config); var buttonsConfig, AddButtonConfig; _.some(topPanelConfig.items, function(target) { if (target.id === "filteringContainerLookupPage" || target.id === "selectionControlsContainerLookupPage") { _.some(target, function(target) { if (Array.isArray(target)) { buttonsConfig = target; return true; } }); return true; } }); _.some(topPanelConfig.items, function(item) { if (item.id === "selectionControlsContainerLookupPage") { _.some(item, function(item) { if (Array.isArray(item)) { AddButtonConfig = item; return true; } }); return true; } }); _.some(AddButtonConfig, function(target) { if (target.caption === "Добавить") { // delete target.tag; target.enabled = { bindTo: "false" }; return true; } }); _.some(buttonsConfig, function(target) { if (target.caption === "Поиск") { delete target.tag; target.click = { bindTo: "AddRequestButton" }; target.enabled = { bindTo: "false" }; return true; } }); this.renderLookupControls(config, topPanelConfig); }, generateViewModel: function() { var viewModelConfig = LookupPageViewModelGenerator.generate(this.lookupInfo); if (!this.lookupInfo.columnValue && this.lookupInfo.searchValue) { viewModelConfig.values.searchData = this.lookupInfo.searchValue; viewModelConfig.values.previousSearchData = this.lookupInfo.searchValue; } viewModelConfig.methods.AddRequestButton = function() { var associatedProjectId = this.values.LookupInfo.associatedProjectId; //Вызываем БП var args = { sysProcessName: "UsrCreateNewRequestFromProject", parameters: { ProjectId: associatedProjectId } }; ProcessModuleUtilities.executeProcess(args); this.close(); }; 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; } }); });
Пожалуйста, помогите с решением.
Нравится
Ислам, добрый день!
На первом и втором шаге созданный вами модуль по сути представляет собой одно и тоже, только с разным функционалом. Как и на первом шаге вы можете применить новосозданный модуль в атрибуте
"dataValueType": Terrasoft.DataValueType.LOOKUP,
"lookupListConfig": {
lookupPageName: "UsrAccountBaseLookupModule",
}
Дима Вовченко,
если я добавляю модуль в атрибут, ругается
LookupPageViewModelGenerator получает grid = undefined.
Я так понимаю, это потому что ещё не отрисована сам grid,
а я пытаюсь получить к нему доступ?
Поскольку с первым модулем (изменение колонки по умолчанию) проблем нет, то вероятно проблема кроется в самом коде второго модуля. Не могу сказать где точно, тут я бы рекомендовал провести отладку.