Добрый день!

У меня есть два разных пакета, в которых происходит замещение модуля BasePageV2, в каждом модуле замещается функция onSaved().

В данный момент вызываются функции из двух пакетов. Доступа к одному из пакетов нет, поэтому возникла необходимость переписать функцию.

Есть ли возможность установить приоритет, функция из какого модуля должна быть применена?

Нравится

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

Здраствуйте,

Все указанные обработчики событий на объекте отрабатывают по очереди. Для решения вы можете переопределить логику в кастомном пакете таким образом, что бы методы в пакете ниже не выполнялись или же удалить обработчик событий на объекте при сохранении в пакете ниже.

Татьяна, для перекрытия логики по родительскому сигналу ещё вы можете в дочернем БП объекта подписаться на аналогичное событие объекта и в скрипте перед return true  добавить ActivatedEventElements.Remove ("Событие").

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

Коллеги, добрый день!

Мне необходимо внести изменения в базовый конфигурационный сервис AdministrationServiceUsers.

Возможно ли создать замещающую схему для сервиса? 

Подскажите, как правильно это сделать? В академии не нашел информации.

Нравится

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

Добрый день, Павел.

Вносить изменения в базовые веб сервисы нет возможности.

Для этих целей Вам необходимо реализовать собственный веб - сервис,

Вы можете выполнить наследование в своем сервисе от базового, но, так как многие методы нет возможности переопределить, оптимальным решением будет реализовать полностью свой сервис по аналогии с базовым.

Подробно вопрос конфигурирования веб-сервисов рассматривается в видео-обучении. https://www.youtube.com/watch?v=rbdB7LFgNf0&feature=youtu.be

Антон Малий,

а случайно ссылки на "День 2" у Вас нет?

Александр О,

Продвинутая разработка, день 2 (внимание, версия 7.11, многое устарело): https://youtu.be/y45IHGDm0WY

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

Еще новичок в разработке. Нужно создать замещающий клиентский модуль.
Вот родительская схема:

define('CityPage', ['ext-base', 'terrasoft', 'sandbox',
'City', 'CityPageStructure', 'CityPageResources', 'GeneralDetails', 'LookupUtilities', 'BusinessRuleModule'],
function(Ext, Terrasoft, sandbox, entitySchema, structure, resources, GeneralDetails, LookupUtilities,
BusinessRuleModule) {
structure.userCode = function() {
this.entitySchema = entitySchema;
this.name = 'CityCardViewModel';
this.schema.leftPanel = LookupUtilities.GetBaseLookupPageStructure();
};
structure.finalizeStructure = function() {
var baseElementsControlGroup = this.find('baseElementsControlGroup');
if (baseElementsControlGroup) {
var items = baseElementsControlGroup.items;
items.splice(2, 0, {
type: Terrasoft.core.enums.ViewModelSchemaItem.ATTRIBUTE,
name: 'Country',
columnPath: 'Country',
dataValueType: Terrasoft.DataValueType.LOOKUP,
visible: true
});
items.splice(3, 0, {
type: Terrasoft.core.enums.ViewModelSchemaItem.ATTRIBUTE,
name: 'Region',
columnPath: 'Region',
dataValueType: Terrasoft.DataValueType.LOOKUP,
visible: true,
rules: [{
ruleType: BusinessRuleModule.enums.RuleType.FILTRATION,
autocomplete: true,
baseAttributePatch: 'Country',
comparisonType: Terrasoft.ComparisonType.EQUAL,
type: BusinessRuleModule.enums.ValueType.ATTRIBUTE,
attribute: 'Country',
attributePath: '',
value: ''
}]
});
items.splice(4, 0, {
type: Terrasoft.core.enums.ViewModelSchemaItem.ATTRIBUTE,
name: 'TimeZone',
columnPath: 'TimeZone',
dataValueType: Terrasoft.DataValueType.LOOKUP,
visible: true
});
baseElementsControlGroup.items = items;
}
};
return structure;
});

Вот моя схема, которая должна замещать родительскую (выше). Что не так в коде замещающей схемы:
define("CityPage", ['ext-base', 'terrasoft', 'sandbox',
'City', 'CityPageStructure', 'CityPageResources', 'GeneralDetails', 'LookupUtilities', 'BusinessRuleModule'],
function(Ext, Terrasoft, sandbox, entitySchema, structure, resources, GeneralDetails, LookupUtilities,
BusinessRuleModule) {
return {
structure: "City",
items.splice(4, 0, {
type: Terrasoft.core.enums.ViewModelSchemaItem.ATTRIBUTE,
name: 'UsrRayon',
columnPath: 'UsrRayon',
dataValueType: Terrasoft.DataValueType.LOOKUP,
visible: true
});
};
});

Нравится

1 комментарий

Здравствуйте, Анастасия.

"Злыднева Анастасия Сергеевна" написал:Что не так в коде замещающей схемы:

Все зависит от задачи, которую вы себе поставили

Во первых, вы должны создать замещающий модуль так, как указано с статье https://academy.terrasoft.ru/documents/technic-sdk/7-8-0/sozdanie-polzo… (если вдруг вы не знали этого, т.к.

"Злыднева Анастасия Сергеевна" написал:Еще новичок в разработке.

Во вторых, судя по исходному коду базового модуля, он является моделью представления в связке MVVM. Подробнее смотрите здесь https://academy.terrasoft.ru/documents/technic-sdk/7-7-0/shablon-mvvm-e…

В третьих. В базовой схеме функция, обявленная в модуле, возвращает модифицированный объект structure, дополненный двумя свойствами-методами. Вы же возвращаете новый объект с новыми свойствами.
Примерное решение будет выглядеть так (нужно проверить, т.к. набирал в блокноте без проверки)

define("CityPage", ['ext-base', 'terrasoft', 'sandbox','City', 'CityPageStructure', 'CityPageResources', 'GeneralDetails', 'LookupUtilities', 'BusinessRuleModule'],
	function(Ext, Terrasoft, sandbox, entitySchema, structure, resources, GeneralDetails, LookupUtilities, BusinessRuleModule) {
	return {
		//Запомнить свойство-метод в локальную переменную
		var s = structure.finalizeStructure;
		//Переопределить свойство-метод базового модуля в замещающем
		structure.finalizeStructure = function() {
			//вызвать свойство-метод базового модуля
			s();
			// получить группу контролов
			var baseElementsControlGroup = this.find('baseElementsControlGroup');
			//если найдена
			if (baseElementsControlGroup) {
				//получить ее элементы
				var items = baseElementsControlGroup.items;
				// добавить атрибут в элемент
				items.splice(4, 0, {
					type: Terrasoft.core.enums.ViewModelSchemaItem.ATTRIBUTE,
					name: 'UsrRayon',
					columnPath: 'UsrRayon',
					dataValueType: Terrasoft.DataValueType.LOOKUP,
					visible: true
				});
			};
		};
	};
});
Показать все комментарии

Добрый день.
Насколько я поняла при создании замещающего клиентского модуля весь функционал, переменные, параметры и прочее надо копировать вручную из модуля-родителя. На этом моменте возникли несколько моментов.

Если в блоке define модуля родителя уже есть список зависимых модулей при копировании в модуль - потомок они будут перенесены. Нужно ли их дополнительно вручную в блок dependencies в меню справа добавлять эти модули? Какая разница между разделом справа и просто списком в объявлении define?

Также, при добавлении элемента в LocalizableString в модуле-потомке с тем же именем, что и в модуле-родителе при компиляции появляются предупреждения со смыслом: переменная с таким именем уже существует и будет скрыта, измените имя переменной или используйте слово new для объявления новой. Как переносить данный раздел в замещающий модуль, если возникают данные ошибки?

Нравится

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

Евгения, добрый день!

Если Вы имеете в виду именно модуль, а не схемы разделов, карточек редактирования и деталей, то в этом случае действительно приходится копировать весь код модуля, так как модули в нашей системе не являются расширяемыми. В случае схем Вы создаёте замещающий клиентский модуль, но полного копирования делать не нужно, достаточно добавить отличия от родительской схемы.

По зависимым модулям - в последних версиях достаточно их указать в объявлении define. Дополнительно их нужно указывать в дизайнере модуля, если Вам необходимо, чтобы зависимости подгружались механизмом ядра системы.

Локализируемые строки должны быть доступными из родительского модуля. В последних версиях они отображаются в соответствующей ветке дизайнера сразу же после указания родительского модуля и уточняющего вопроса. Создавать необходимо только новые ресурсы.

Добрый день, Олег.

Спасибо за ответ. Да, речь шла именно о модуле, не о схемах.
Вопрос про локализуемые строки все еще открыт. Создала замещающий модуль (не схему), родительский модуль указала. Но строки при этом в интерфейс не подгрузились (версия системы 7.2). Возможно в этой версии автоматической подгрузки нет? Вопрос про обращения к этим строкам, вызывать локализуемые строки из модуля-родителя нужно как-то специфически, вроде обращения к parent? Где-то можно посмотреть примеры подобные? Потому что через resource идет обращение к локализуемым строкам текущего модуля.

Спасибо

Евгения, добрый день!

В более поздних версиях локализируемые строки переносятся из родительских модулей, но в версии 7.2 придётся их переносить вручную, с теми же названиями.

Что касается сообщений, о которых Вы говорите в первом вопросе - это предупреждения, и на работу системы они влиять не будут. То, что они появляются при каждой компиляции, вызывает некоторые неудобства, но не более того.

Альтернативным решением может быть разве что создания строк с новыми названиями и замена их везде в коде модуля.

Спасибо за ответ. Вопрос исчерпан.

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