В посте описана не плохая идея как предотвратить переход на стадию не выбрав причину, или какие либо условие https://community.terrasoft.ru/questions/pokazat-dialog-dlya-podtverzhdeniya-statusa-otmena-v-dcm-razdela-keys#comment-83766 , но к сожалению не описано как именно это выполнить в "save" не получив рекурсию вечную. К автору поста и ответившему на него так и не удалось достучаться.

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

Нравится

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

CheckConfirmationMessage управляет проверять - или нет
 

if (confirmationMessage && this.get("CheckConfirmationMessage")) {
		this.set("CheckConfirmationMessage", false);
		var scopeArguments = arguments;
		this.showConfirmationDialog(confirmationMessage.message, function(result) {
				if (result === Terrasoft.MessageBoxButtons.YES.returnCode) {
					this.save(scopeArguments);
				} else {
					this.onDiscardChangesClick();
				}
		}, ["Yes", "No"]);
	} else {
    	this.callParent(arguments);
}

 

 

Владимир Соколов,

 

а как быть с такой комбинацией?

attributes: {
	"CheckConfirmationMessage": {
		dataValueType: Terrasoft.DataValueType.BOOLEAN,
		value: true
	}
},
 
methods: {
	eaqRequestReason: function() {
		var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
			rootSchemaName: "KtBadReasonEndRequest"
		});
		esq.addColumn("Id");
		esq.addColumn("Name");
		var requestInServiceFilter = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
			"KtRequestInService", this.get("KtRequestInService").value);
		var stageFilter = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
			"KtRequestStage", this.get("KtStage").value);
		var recordInactiveFilter = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, 
				"RecordInactive", false);
		esq.filters.add("requestInServiceFilter", requestInServiceFilter);
		esq.filters.add("stageFilter", stageFilter);
		esq.filters.add("recordInactiveFilter", recordInactiveFilter);
		return esq;
	},
	save: function() {
		var scopeArguments = arguments;
		var esq = this.eaqRequestReason();
		esq.getEntityCollection(function (request) {
			if (request && request.success) {
				var requestLength = request.collection.collection.length;
				if (requestLength > 0 && this.get("CheckConfirmationMessage")) {
					this.set("CheckConfirmationMessage", false);
					this.showConfirmationDialog(resources.localizableStrings.DisqualifyReason, function(result) {
						if (result === Terrasoft.MessageBoxButtons.YES.returnCode) {
							this.save(scopeArguments);
						} else {
							this.onDiscardChangesClick();
						}
					}, ["Yes", "No"]);
				} else {
					this.callParent(scopeArguments);
					this.set("CheckConfirmationMessage", true);
				}
			}
		}, this);
	}
}

 

Тут save вроде как с переданным скоупом передается, но выполниться не может

Александр, что значит, «не может выполниться»? Если в функции отладчик поставить, туда заходит?

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

Проблема была скорее всего в области видимости, но не стал разбираться дальше. Подумал что так как это условие перехода, можно сказать проверка его обязательности, решил переделать не трогая save а использовать asyncValidate. С его помощью получилось как хотел. Код полный выложу не много позже, так как он совсем пока красивый, а если время будет то наверно сделаю видео с разъяснением почему решил сделать именно так и приложу ссылку, может в комментариях кто предложит как еще оптимизировать

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

Есть необходимость записывать в объект File поля Name и Notes через всплывающее окно. Не могу определить что нужно использовать, ModalBox или MiniPage. Вкратце задача состоит в том, чтобы при вводе поля Name генерировать ссылку и записывать её в поле Notes. 

Получилось создать ModalBox, но не удалось найти как сохранять поля в базу данных, также как через метод this.save(); в BasePage.

А вызывать MiniPage своей же кнопкой, совсем не удалось

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

Нравится

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

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

 

Как программно открыть мини-карточку описано тут. Но для того, чтобы этом метод работал, Вам необходимо зарегистрировать мини-карточку - это описано тут

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

Добрый день.

Нужна помощь в реализации одного вопроса.

 

В Обращениях есть справочная колонка, допустим "Квартира". При создании Обращения можно выбрать в колонке "Квартира" значение "Запрещено".

Надо сделать так, что-бы при выборе значения "запрещено" - появлялась валидация или всплывающее окно. Но что-бы окно только предупреждало, что "Квартира - запрещено" и была возможность сохранять даже с данным значением.

 

Подскажите, каким образом можно реализовать этот момент.

Нравится

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

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

Похожее обсуждали тут и тут. Также см. статью.

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

Добрый день!

Подскажите, как в 5-ке вывести всплывающее окно (уведомление) пользователю? Аналог в 7-ке - это:

showOrderInfo: function() {
    var activeRowId = this.get("ActiveRow");
    var gridData = this.get("GridData");
    var dueDate = gridData.get(activeRowId).get("Date");
    this.showInformationDialog(dueDate);
}

Заранее спасибо!

Нравится

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

Вам подойдет следующий способ отсюда:

http://www.community.terrasoft.ru/forum/topic/11784

"Вильшанский Дмитрий" написал:

Стандартный способ показать информационное сообщение пользователю из скрипта страницы.
Создаем скрипт подготовки и Действие процесса "Открыть окно сообщения"

Пишем в скрипте:

InfoMessageUserTask.Page = Page;
InfoMessageUserTask.Icon = "INFORMATION";
InfoMessageUserTask.Buttons = "OK";
InfoMessageUserTask.MessageText = "Тариф успешно заведен в Bill-Master";
*не забываем использовать Localizible strings

Также можно сделать следующим образом:

InfoMessageUserTask.ResponseMessages = new Dictionary<string, string> {{"ok", "SomeMessage"}}  Генерация сообщения SomeMessage по нажатию кнопки ok

Увы, это способ я находил... Я потому и создал новый пост, чтобы узнать, есть ли другой способ, к примеру, не создавая "Действие процесса". И, насколько я понял, одними средствами C# это сделать не получится. Но спасибо всё равно, что уделили время моему вопросу!

Средствами C# сделать можно всё. То же действие «Открыть окно сообщения» можно создать и выполнить программно.

Пример из ApprovalInServiceRequestEditPage:

var openMessageWindow = new QuestionUserTask(UserConnection); 
openMessageWindow.Page = Page;
openMessageWindow.ProcessInstanceId = InstanceUId;
openMessageWindow.MessageText = ServiceApprovalNotFindedMessage;
openMessageWindow.Buttons = "OK";
openMessageWindow.Icon = "INFO";
openMessageWindow.ResponseMessages = new Dictionary {
      	{"ok", "ClosePageMessage"},
};
openMessageWindow.Execute(context);

Александр - очень признателен за ответ: как раз то, что надо! Спасибо, что всегда выручаете!!! С наступающим Вас праздником!)

Виталий, Вам тоже хороших праздников!

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