Доброго времени суток! Возник затык с казалось бы простой задачей.

После завершения активности и смены стадии кейса поля на странице редактирования должны блокироваться. Это настроено бизнес-правилами. Это работает, однако, чтобы поля заблокировались необходимо обновить страницу. И это существенный недостаток. 

Вопрос: возможно ли реализовать обновление страницы после завершения активности? Используя для этого только клиентскую часть?

Пробовала прикрутить методы this.reloadEntity(), но проблема в том, что не удается "поймать" момент завершения активности. Подскажите, пожалуйста, возможно ли в странице редактирования получить значение состояния активности?

Способ с ActivityEventListener не подходит. 

 

Нравится

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

Добрый день,

 

Я тут вижу два варианта:

 

1) На событии после сохранения активности в DCM

(доступно из расширеных настроек активности

) сделать логику отправки серверного сокет сообщения на клиент, а на клиенте на карточке оформить подписку (и уничтиожение) на определенное сообщение. По получению сообщения обновлять страницу редактирования.

 

2) При отработке метода save из ActivityMiniPage реализовать отправку sandbox сообщения в модуль нужной страницы редактирования и обновлять страницу по получению этого сообщения.

Oscar Dylan,

спасибо за ответ. Выбрала второй способ через сообщения. Реализовала отправку сообщения , но при попытке завершить активность нажатием на кнопку "сохранить" выпадает ошибка: message name_message is not define in MiniPageModule (ViewModule_MiniPageListener_MiniPage_ActivityMiniPage) module.

Не понимаю где ещё  нужно объявить это сообщение, кроме как в activityMiniPage и нужной страницы редактирования ?

Если можно на смену стадии кейса, то можно посылать сообщение из бизнес-процесса, который стартует по изменению стадии заказа

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

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

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

Реализовали кнопки в совмещенном режиме, после каких-то действий в карточке, необходимо поменять перечень кнопок в совмещенном режиме. Отправляется 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");

Алёна Доля,

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

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