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

Встречал кто ни будь такой баг или фичу и как смогли обойти? 

Реализовали кнопки в совмещенном режиме, после каких-то действий в карточке, необходимо поменять перечень кнопок в совмещенном режиме. Отправляется message с помощью sandbox в Section запускается метод this.reloadGridData(). Все работает отлично, но только до одного момента. Существует стандартный боковой список, по умолчанию подтягивается вроде 30 записей (не суть), когда скролл списка крутим вниз, то срабатывает needLoadData() из схемы BaseDataView.js появляется еще 30 записей, если выбрать запись из прогруженных, запустить выше описанную логику, то после метода this.reloadGridData() теряется ActiveRow, а это влияет на логику завязанный на ActiveRow в совмещённом режиме. Даже не используя боковой список, а перейдем в запись, например, 50 по счету, то после выполнения метода this.reloadGridData() пропадает ActiveRow. У вас так же?

define("ContactSectionV2", [], function() {
	return {
		entitySchemaName: "Contact",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		messages: {
			"buttonChanged": {
				mode: this.Terrasoft.MessageMode.PTP,
				direction: this.Terrasoft.MessageDirectionType.SUBSCRIBE 
			}
		},
		diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
		methods: {
			init: function() {
				this.callParent(arguments);  
				this.buttonVisibleToMessages();
			},
			buttonVisibleToMessages: function(){
				var subscriberId = this.sandbox.id + "_CardModuleV2";
				this.sandbox.subscribe("buttonChanged", function() {				
					//debugger
					this.reloadGridData();
				}, this, [subscriberId]);
			},
		}
	};
});
define("ContactPageV2", [], function() {
	return {
		entitySchemaName: "Contact",
		attributes: {},
		messages: {	
			"buttonChanged": {
				mode: this.Terrasoft.MessageMode.PTP,
				direction: this.Terrasoft.MessageDirectionType.PUBLISH //тут мы получаем
			}
		},
		modules: /**SCHEMA_MODULES*/{}/**SCHEMA_MODULES*/,
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/,
		methods: {
			onEntityInitialized: function() {
				this.callParent(arguments); 
			},
			onSaved: function() {
				this.callParent(arguments);
				this.sandbox.publish("buttonChanged", null, [this.sandbox.id]);
			},
		},
		dataModels: /**SCHEMA_DATA_MODELS*/{}/**SCHEMA_DATA_MODELS*/,
		diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/
	};
});



Изображение удалено.

Нравится

2 комментария
Лучший ответ

Здраствуйте,  рекомендую обратить внимание на пример реализации описан в статье: https://academy.terrasoft.ru/docs/developer/ehlementy_interfejsa/strani…

В схеме ContactSectionV2 можно добавить метод, в котором явно будет определять activeRow = this.get("ActiveRow");

Здраствуйте,  рекомендую обратить внимание на пример реализации описан в статье: https://academy.terrasoft.ru/docs/developer/ehlementy_interfejsa/strani…

В схеме ContactSectionV2 можно добавить метод, в котором явно будет определять activeRow = this.get("ActiveRow");

Алёна Доля,

Спасибо, помогло!

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

Добрый день! Есть задача скрывать кнопку "Печать" на странице записи в зависимости от некоторых условий. Были внесены изменения в страницу объекта с подключением миксина PrintReportUtilities, при перезагрузке страницы логика скрытия отрабатывает корректно. Но когда открытие страницы происходит через секцию, кнопка все равно отображается, не смотря на то что код на странице отрабатывает и скрывает её. Какие изменения нужно внести в секцию, что бы кнопка так же была скрыта?

Нравится

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

Илья, здравствуйте!

 

Вы изменили логику отображения кнопки "Печать" на странице, но дополнительно её нужно добавить в схеме раздела (Section), чтобы при открытии из раздела в совмещённом режиме логика также работала. В diff схемы BaseDataView есть элемент с названием "CombinedModePrintButton", который выводится при открытии в совмещённом режиме.

Пример с изменением страницы в совмещённом режиме есть в статье на академии, которую можно найти по ссылке:

https://academy.terrasoft.ua/docs/developer/elements_and_components/bas…

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

Подскажите как динамически делать пункт меню в "Действие" карточки в совмещенном режиме.

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

attributes: {
	"IsCanVisaStatus": {
		dataValueType: Terrasoft.DataValueType.BOOLEAN,
		value: true,  // Значение по умолчанию которое передаеться при загрузке страницы на нашу кнопку
		dependencies: [{
			columns: ["KtState"], // Отслеживаем изменение поля состояния 
			methodName: "setCanVisaStatusContract" // и запускаем нашу функция если состояние изменчется
		}]
	}
},
methods: {
	onEntityInitialized: function() {
		this.callParent(arguments);
		this.setCanVisaStatusContract(); // Запускаем функцию при входе на страницу когда поля уже заполненны
	},
	getActions: function() {
		var actionMenuItems = this.callParent(arguments);
		actionMenuItems.addItem(this.getButtonMenuItem({
			Type: "Terrasoft.MenuSeparator",
			Caption: ""
		}));
		actionMenuItems.addItem(this.getButtonMenuItem({
			"Caption": VisaHelper.resources.localizableStrings.SendToVisaCaption,
			"Tag": VisaHelper.SendToVisaMenuItem.methodName,
			"Enabled": {"bindTo": "IsCanVisaStatus"} // мониторим через привязку состояние значения атрибута
		}));
		return actionMenuItems;
	},
	setCanVisaStatusContract: function(){
		var stateId = this.get("KtState").value; // Текущая стадия
		var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {  // Запрос к базе данных о том нужна ли кнопка отправки на визирования
			rootSchemaName: "KtContractKarTelState"
		});
		esq.addColumn("KtCanVisa", "KtCanVisa"); // Сама колонка указывающая что нужна кнопка
		esq.getEntity(stateId, function(result) {
			if (result.success) {
				if (result.entity.get("KtCanVisa") && this.canEntityBeOperated()) {   // this.canEntityBeOperated() - стандартный класс отвечает за то что если карточка на в режиме редактирования то false.
					this.set("IsCanVisaStatus", true);
				} else {									// Присваивает атрибуту значение true или false в зависимости от результата запроса
					this.set("IsCanVisaStatus", false);
				}
 
			}
		}, this);
	}
}

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

Нравится

2 комментария
Лучший ответ

Нужно использовать механизм сообщений. Вот пример. Моем случае бинд был на аттрибут (в странице редакирования) "Enabled": {"bindTo": "enabledPlanPaymentDate"}

В секции пишем

		messages: {
			"GetEnabledPlanPaymentDate": {
				mode: Terrasoft.MessageMode.PTP,
				direction: Terrasoft.MessageDirectionType.SUBSCRIBE
			}
		},
		attributes: {
			"enabledPlanPaymentDate": {
				"type": this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
				"dataValueType": this.Terrasoft.DataValueType.BOOLEAN,
				"value": false
			}
		},
		methods: {
			init:function() {
				this.callParent(arguments);
				this.sandbox.subscribe("GetEnabledPlanPaymentDate",  function(args){this.$enabledPlanPaymentDate = args}, this, ["SectionModuleV2_InvoiceSectionV2"]);
			},
		}

В странице реадактирования:

		messages: {
			"GetEnabledPlanPaymentDate": {
				mode: Terrasoft.MessageMode.PTP,
				direction: Terrasoft.MessageDirectionType.PUBLISH
			}
		},
 
		methods: {
			onEntityInitialized: function() {
				this.callParent(arguments);
				this.sandbox.publish("GetEnabledPlanPaymentDate", this.checkEnabledChangePlanPaymentDate(), ["SectionModuleV2_InvoiceSectionV2"]);
			},
			checkEnabledChangePlanPaymentDate: function() {
				return this.$enabledPlanPaymentDate;
			}
}

 

Нужно использовать механизм сообщений. Вот пример. Моем случае бинд был на аттрибут (в странице редакирования) "Enabled": {"bindTo": "enabledPlanPaymentDate"}

В секции пишем

		messages: {
			"GetEnabledPlanPaymentDate": {
				mode: Terrasoft.MessageMode.PTP,
				direction: Terrasoft.MessageDirectionType.SUBSCRIBE
			}
		},
		attributes: {
			"enabledPlanPaymentDate": {
				"type": this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
				"dataValueType": this.Terrasoft.DataValueType.BOOLEAN,
				"value": false
			}
		},
		methods: {
			init:function() {
				this.callParent(arguments);
				this.sandbox.subscribe("GetEnabledPlanPaymentDate",  function(args){this.$enabledPlanPaymentDate = args}, this, ["SectionModuleV2_InvoiceSectionV2"]);
			},
		}

В странице реадактирования:

		messages: {
			"GetEnabledPlanPaymentDate": {
				mode: Terrasoft.MessageMode.PTP,
				direction: Terrasoft.MessageDirectionType.PUBLISH
			}
		},
 
		methods: {
			onEntityInitialized: function() {
				this.callParent(arguments);
				this.sandbox.publish("GetEnabledPlanPaymentDate", this.checkEnabledChangePlanPaymentDate(), ["SectionModuleV2_InvoiceSectionV2"]);
			},
			checkEnabledChangePlanPaymentDate: function() {
				return this.$enabledPlanPaymentDate;
			}
}

 

Трефилов Павел Сергеевич,

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

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

Здравствуйте, коллеги!

Столкнулся с проблемой описанной здесь:

На страницу редактирования товара добавляю кнопку. Сохраняю схему, делаю очистку кеша и аппаратную перезагрузку, перехожу на страницу редактирования какого-нибудь товара - кнопки нет. Снова делаю очистку кеша и аппаратную перезагрузку - кнопка появляется и при нажатии работает как надо. Но стоит перейти, например, в другой раздел, потом снова вернуться на страницу редактирования товара, то кнопки снова нет. 

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

Также добавлял кнопку на страницу секции (ProductSectionV2) со свойством visible: false (так как на странице раздела она не должна быть видна), но при переходе на страницу товара (ProductPageV2) кнопка остается невидимой, хотя свойство visible: true.

Может кто-нибудь объяснит, в чем проблема. Заранее благодарен.

Нравится

7 комментариев
Лучший ответ

Ну собственно, вам необходимо воспользоваться вот этими 2-мя статьями:

https://academy.terrasoft.ru/documents/technic-sdk/7-14/kak-dobavit-knopku-na-stranicu-redaktirovaniya-v-sovmeshchennom-rezhime

https://academy.terrasoft.ru/documents/technic-sdk/7-14/kak-dobavit-knopku-v-rezhime-dobavleniya-novoy-zapisi

Тогда она и не будет исчезать при обновлении страницы.

Ну собственно, вам необходимо воспользоваться вот этими 2-мя статьями:

https://academy.terrasoft.ru/documents/technic-sdk/7-14/kak-dobavit-knopku-na-stranicu-redaktirovaniya-v-sovmeshchennom-rezhime

https://academy.terrasoft.ru/documents/technic-sdk/7-14/kak-dobavit-knopku-v-rezhime-dobavleniya-novoy-zapisi

Тогда она и не будет исчезать при обновлении страницы.

ProductSectionV2 не означает что это раздел, он так же используется и при просмотре карточки, так что там тоже нужно кнопку делать

Здравствуйте, спасибо за ответ. А метод onClick этой кнопки тоже в обоих местах прописывать? Если да - в ProductSectionV2 не доступны необходимые мне поля/действия карточки (даже через getActiveRow. А если описать только в ProductPage то переходе в карточку из раздела кнопка не активна.

Страница карточки и страница раздела — две разные схемы и кнопки на них — тоже разные. Если кнопка находится на странице раздела, то её обработчик пишется на этой странице, аналогично и с кнопкой на странице карточки. 

Зверев Александр,

Спасибо за ответ. Ситуация такая: Если добавляю кнопку в схему карточки и, там же, её обработчик - после перехода в карточку со страницы раздела кнопки нет, но если обновить страницу карточки - кнопка есть и функционирует как надо.

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

Сама кнопка (Сохранить и отправить) должна сохранять и менять стадию продукта на другую. В схеме раздела я не знаю как получить доступ к атрибуту карточки Stage.

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

Решил проблему при помощи https://academy.terrasoft.ru/documents/technic-sdk/7-14/obmen-soobshcheniyami-mezhdu-modulyami-komponent-sandbox. Если кнопка рендерится со страницы раздела то при нажатии на нее отправляется сообщение на страницу карточки где запускается нужный обработчик кнопки. Параметры видимости кнопки также передаются по сообщению.

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

Здравствуйте! Столкнулся со следующей проблемой.
На страницу редактирования контакта добавляю кнопку(при нажатии выводится имя контакта) при помощи такого кода:

define("ContactPageV2", [], function() {
        return {
                entitySchemaName: "Contact",
                details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
                diff: /**SCHEMA_DIFF*/[
        {
                       
                        "operation": "insert",
                       
                        "parentName": "ActionButtonsContainer",
                       
                        "propertyName": "items",
                       
                        "name": "Name",
                       
                        "values": {
                               
                                itemType: Terrasoft.ViewItemType.BUTTON,
                               
                                caption: { bindTo: "Resources.Strings.Name"},
                                click: { bindTo: "getName"},
                               
                                "layout": {
                                        "column": 1,
                                        "row": 6,
                                        "colSpan": 1
                                },
                                style: "red"
                        }
        }
]/**SCHEMA_DIFF*/,
                methods: {
                        getName: function() {
                                var name = this.get("Name");
                                this.showInformationDialog(name);
                        }
                },
                rules: {}
        };
});

Сохраняю схему, делаю очистку кеша и аппаратную перезагрузку, перехожу на страницу редактирования какого-нибудь контакта - кнопки нет. Снова делаю очистку кеша и аппаратную перезагрузку - кнопка появляется и при нажатии выводится имя контакта. Но стоит перейти, например, в другой раздел, потом снова вернуться на страницу редактирования контакта, то кнопки снова нет. И чтобы она появилась нужно сделать очистку кеша и аппаратную перезагрузку.

Может кто-нибудь объяснит в чем проблема. Заранее благодарен.

Нравится

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

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

Воспользуйтесь статьей https://academy.terrasoft.ru/documents/technic-sdk/7-8/kak-dobavit-knop….

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

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