Всем доброго времени суток.
Есть контрол календарика: 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() {
......
});