Всем доброго времени суток.
Есть контрол календарика: https://academy.terrasoft.ru/jscoresdk/#!/api/Terrasoft.controls.DatePi…
Можно ли его как-нибудь заместить в системе, по аналогии с тем, как замещаем схемы и добавляем свой функционал? К примеру, так:
define("UsrDateControl", [], function() { Ext.define("Terrasoft.controls.UsrDate", { extend: "Terrasoft.DatePicker", alternateClassName: "Terrasoft.UsrDate", show: function(){ this.callParent(arguments); console.log("open datepicker"); }, }); });
Попробовал - но не работает.. возможно ли вообще такое замещение?
Изначальная идея - добавить возможность блокировать выбор определённых дат.
Нравится
Было бы здорово, если бы на Marketplace появились custom-контролы
Вам поможет вот эта, ранее поднимаемая мною тема.
https://community.terrasoft.ru/questions/rassirit-logiku-susestvuusego-klassa-extjs-v-bpm
Севостьянов Илья Сергеевич пишет:
Вам поможет вот эта, ранее поднимаемая мною тема.
Вот в своё время делал похожую штуку с расписанием Schedule. Но там по сути создавался контрол, который наследовался от оригинального контрола расписания, и далее в нужной схеме замещался элемент, использующий контрол, вроде такого:
//Контрол define("UsrRegControl", ["schedule-edit"], function() { Ext.define("Terrasoft.controls.UsrReg", { extend: "Terrasoft.ScheduleEdit", alternateClassName: "Terrasoft.UsrReg", renderSchedulerItems: function(){ this.callParent(arguments); console.log("RENDER"); }, }); }); //Подключение define("ActivitySectionV2", ["UsrRegControl"], function() { return { entitySchemaName: "Activity", methods: {}, diff: /**SCHEMA_DIFF*/[ { "operation": "merge", "name": "Schedule", "values": { "className": "Terrasoft.UsrReg", } }, ]/**SCHEMA_DIFF*/ }; } );
Проблема в том, что datepicker - слишком много где используется, и даже не подключается явно в нужных схемах, по сути привязан к типу колонки "Дата и время". Вопрос - где тогда его заменять?
И ещё вопрос - можно ли где-нибудь посмотреть про override, как правильно его использовать?
Вот, например, сделал свой модуль:
define("UsrDatePicker", [], function() { Ext.define("Terrasoft.controls.UsrDatePicker", { override: "Terrasoft.DatePicker", alternateClassName: "Terrasoft.UsrDatePicker", /* здесь взял полностью содержимое контрола из https://academy.terrasoft.ru/jscoresdk/source/datepicker.html#Terrasoft-controls-DatePicker + добавил на init и getTplData console.log("test") */ }); });
Но такое впечатление, что замещения не произошло - ни одного лога не вывелось при открытии/изменении значения календаря.
Где-то ещё что-то нужно подключить?
Здравствуйте. Если Вам нужно заместить везде станд. контрол даты, то посмотрите на схему "ViewGeneratorV2", он занимается генерацией стандартных конфигов для контролов. В нем есть метод "generateDateEdit", который генерирует view-конфиг для контрола даты, можете заместить эту схему и в этом методе заменить класс "Terrasoft.DateEdit" на свой.
Колебянов Виталий Романович пишет:
Виталий Романочив, здравствуйте.
Спасибо за подсказку, я сделал свою версию модуля DateEdit - UsrDateEdit, скопировал в него текст оригинального DateEdit, и заместил схему ViewGeneratorV2 - это сработало. Но мне нужно заместить не DateEdit, а DatePicker, который вызывается внутри UsrDateEdit:
createDatePicker: function() { var datePicker = this.datePicker = Ext.create("Terrasoft.UsrDatePicker", { renderTo: Ext.getBody(), parentEl: this.wrapEl, date: this.value }); datePicker.on("dateSelected", this.onDateSelected, this); datePicker.on("currentDateSelected", this.onDateSelected, this); },
Вот сейчас если я так укажу, то на Ext.create("Terrasoft.UsrDatePicker" падает ошибка (календарик не показывается): GET https://0418605-sales-enterprise-demo.bpmonline.com/0/Nui/Terrasoft/Usr… 404 (Not Found)
Как мне заместить именно сам календарик DatePicker?
UsrDatePicker - пока по сути тот же DatePicker, только везде где в коде встречается DatePicker дописал Usr.
Все создаваемые файлы в пакете Custom.
Судя по всему, ошибка возникает потому, что замещения не были подгружены в память. Как вариант, вы можете заместить BootstrapModule следующим образом:
define("BootstrapModules", function() { return { "LookupUtilitiesV2": {}, "ConfigurationEnumsV2": {}, "ConfigurationConstantsV2": {}, "DashboardFunnelEnums": {}, "StructureExplorerUtilitiesV2": {}, "UsrDatePicker": {}, "UsrDateEdit": {} }; });
Смородинов Денис,
Скорее всего проблема в том, что вы не добавили свой "UsrDatePicker" в зависимость UsrDateEdit, т.е. должно быть так:
define("UsrDateEdit", ["UsrDatePicker"], function() { ...... });