Вопрос

Можно ли заместить контрол?

Всем доброго времени суток.

Есть контрол календарика: 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");
		},
 
	});
 
});

Попробовал - но не работает.. возможно ли вообще такое замещение?

Изначальная идея - добавить возможность блокировать выбор определённых дат.

Нравится

9 комментариев

Было бы здорово, если бы на 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() {
......
});

 

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