Доброго времени суток коллеги. Имею проблемы (очень нужна помощь) пожалуйста кто сможет подскажите. Мне нужно было сделать

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;
        }
    });
});

Пожалуйста, помогите с решением. 

Нравится

3 комментария

Ислам, добрый день!

На первом и втором шаге созданный вами модуль по сути представляет собой одно и тоже, только с разным функционалом. Как и на первом шаге вы можете применить новосозданный модуль в атрибуте

"dataValueType": Terrasoft.DataValueType.LOOKUP,

"lookupListConfig": {

            lookupPageName: "UsrAccountBaseLookupModule",

 }

Дима Вовченко,

если я добавляю модуль в атрибут, ругается

LookupPageViewModelGenerator получает grid = undefined. 

Я так понимаю, это потому что ещё не отрисована сам grid,

а я пытаюсь получить к нему доступ?

Поскольку с первым модулем (изменение колонки по умолчанию) проблем нет, то вероятно проблема кроется в самом коде второго модуля. Не могу сказать где точно, тут я бы рекомендовал провести отладку.

Показать все комментарии