Всем привет, хотел бы узнать есть ли возможность добавить деталь на мини-карточку или модальное окно, нужно в основном для отображения данных?

Нравится

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

Добрый день.

 

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

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

 

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

Ivan Kuchma,

Такой вопрос, можно ли добавить уже созданную деталь просто на форму мини-карточки при помощи разработки? И обязательно ли создавать под это контейнер с полями tabs?

Глеб Макаров,

рекомендую обратить внимание на похожую тему  для миникарточки с детали, а также на статью о реализации сообщений между деталями через sandbox.

Детальнее работе с sandbox можете ознакомится в статье: https://academy.terrasoft.ua/docs/7-18/developer/front-end_development/…

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

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

 

Подскажите где можно ознакомится с исходным кодом данного окна?

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

Нравится

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

Добрый день!

Исходный код данного окна можно посмотреть в модуле ModalBox,

код наполнения окна в модулях StructureExploreModuleV2 и StructureExplorerUtilitiesV2

Добрый день!

Исходный код данного окна можно посмотреть в модуле ModalBox,

код наполнения окна в модулях StructureExploreModuleV2 и StructureExplorerUtilitiesV2

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

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

 

Появилась необходимость изменить поведение готового модального окна SupplyPaymentProductDetailModalBox. Данное окно вызывается из детали SupplyPaymentDetailV2. Окно дает возможность изменения количества продуктов в Инсталлмент плане.

 

Глобальная задача - если к инсталлмент плану привязан инвойс, то при нажатии на ссылку продуктов данного инсталлмент плана(вызывает открытие модального окна SupplyPaymentProductDetailModalBox) запрещать вносить изменения в продукты.

 

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

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

Помогите пожалуйста советом, можно ли так делать или я упустил какой-то момент. 

Спасибо!

Нравится

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

Добрый день, Сергей!

Не совсем понял про "запрещать вносить изменения в продукты", однако, чтобы модальное окно открывалось только если привязан объект счёта, необходимо заместить схему SupplyPaymentDetailV2 следующим образом:

 

define("SupplyPaymentDetailV2", ["ConfigurationConstants", "OrderConfigurationConstants", "ConfigurationEnums",
			"SupplyPaymentGridButtonsUtility", "Order", "SupplyPaymentDetailV2Resources", "InvoiceProduct",
			"ProductUtilitiesV2", "ConfigurationGrid", "ConfigurationGridGenerator", "ConfigurationGridUtilities",
			"css!SupplyPaymentGridButtonsUtility", "OrderUtilities", "MoneyUtilsMixin"],
		function(ConfigurationConstants, OrderConfigurationConstants, enums, GridButtonsUtil, Order, resources,
				InvoiceProductSchema, ProductUtilities) {
 
			return {
				entitySchemaName: "SupplyPaymentElement",
				attributes: {
				},
				messages: {
				},
 
				/**
				 * ######-#######, ########### ################ ####### #####.
				 */
				mixins: {
					ConfigurationGridUtilites: "Terrasoft.ConfigurationGridUtilities",
					OrderUtilities: "Terrasoft.OrderUtilities",
					MoneyUtilities: "Terrasoft.MoneyUtilsMixin"
				},
				methods: {
 
					/**
					 * @inheritdoc Terrasoft.GridUtilitiesV2#linkClicked
					 * @overridden
					 */
					linkClicked: function(recordId, columnName) {
						var data = this.getGridData();
						var row = data.get(recordId);
						var invoice = row.get("Invoice");
						var eventResult = false;
						try {
							this.set("CurrentRowId", recordId);
							if (columnName === "Products") {
								if (invoice) {
									this.openProductsWindow();
								}
							} else if (columnName === "Invoice") {
								this.onInvoiceButtonClick(row);
							}
						} catch (exception) {
							this.log(exception, this.Terrasoft.LogMessageType.ERROR);
						}
						this.set("IsButtonClicked", true);
						return eventResult;
					}
				},
				diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/
			};
		}
);

 

Дима Вовченко,

Спасибо! Задача в том, чтобы если привязан инвойс, то не давать возможности в модальном окне редактировать колонки все.

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

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

 

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

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

UPD: временно решил проблему, добавив стиль элемента:

 

.multiLookupTabPanel {
    display: grid;
}

 

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

 

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

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

Добрый день!

Довольно часто требуется выводить пользователю какое-либо модальное окно. Для реализации приходится привлекать разработчиков. Было бы здорово, если бы в элементах бизнес-процесса появился элемент "Модальное окно", который выглядел бы примерно так:

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

То есть аналитик смог бы настраивать текст и варианты ответов. И после этого элемента использовать условные потоки.

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

Елизавета, уже зафиксирована идея «Возможность открывать страницы по процессу/показывать сообщения как всплывающее/модальное окно / уведомление (не путать с панелью уведомлений)». 

 

Если же первично для Вас не отображение в виде модального окна, а получение от пользователя ответа на один из нескольких вариантов, можно использовать стандартный элемент БП «Автогенерируемая страница», где добавить две кнопки, привязав к ним условные потоки.

Отличие от модального будет в том, что такое окно будет в верхней части экрана и его можно будет по кнопке «Закрыть» свернуть в правую панель, чтобы дать ответ и продолжить выполнение позже.

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

Александр, да, с автогенерируемой страницей понятно, "Вопрос пользователю"  тоже подойдет для этой цели. Но идея именно в том, чтобы не открывать новую страницу, а выводить маленькое одно модальное окно)  Для глаз пользователя есть разница: открывается новая страница или же на старой появляется модальное окно.

Здорово, что идея уже зафиксирована, будем очень ждать реализации.

Елизавета, такого на уровне элементов БП, а не написанием кода на странице, пока нет, идея заведена.

Караваева Елизавета Дмитриевна,

Елизавета, по ссылке есть подходящий темплейт

https://marketplace.creatio.com/template/popup-element-business-process…

Константин, спасибо за уточнение. Тогда уже лучше его же отсюда.

Константин, спасибо большое, посмотрю, как работает!)

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

Спасибо!

 

Елизавета, доступно более продвинутое решение в виде дополнения на Маркетплейс. Оно позволяет показать окно, отобразить набор кнопок, принять результат и организовать дальнейшее ветвление процесса в зависимости от выбора пользователя. https://marketplace.terrasoft.ru/template/deystvie-processa-pokazat-mod…

Дмитрий, спасибо!

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

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

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

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

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

Нравится

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

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

 

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

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

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

Есть задача: по нажатию кнопки в модальном окне открывается окно с выбором

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

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

Вопрос: есть ли возможность как-то динамически наполнять массив diff полями? 

Нравится

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

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

 

Либо в этом окне использовать редактируемый реестр с двумя колонками: название и значение. Примерно такой обсуждали в этой теме, но там предлагали решение при помощи view, что может в Вашем случае не подойти.

 

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

 

А вообще, описанное Вами очень похоже на автогенерируемую страницу в БП. Может, с её помощью получится?

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

Спасибо за ответ. Фиксированное количество виртуальных полей не вариант, так как в будущем клиент самостоятельно может добавлять поля, которые тоже должны выбираться. Мне подсказали создать на странице модального окна ContainerList. Вот такой элемент diff:

{
    "operation": "insert",
    "name": "CommunicationsContainer",
    "parentName": "ContainerListContainer",
    "propertyName": "items",
    "values": {
        "generator": "ConfigurationItemGenerator.generateContainerList",
        "idProperty": "Id",
        "collection": "CaseFieldCollection",
        "observableRowNumber": 10,
        "onGetItemConfig": "getCaseItemConfig"
    }
}

"collection" - коллекция всех полей, которые могут быть отображены в модальном окне.

"onGetItemConfig" - метод, где формируется структура каждого поля.

Только вот до конца не ясно как с этим всем работать.

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

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

 

Необходимо добавить в модальное окно количество обращений за промежуток времени с 9-12, 12-15, 15-17 часов на 10 дней.

 

Прилагаю код модального окна.

https://pastebin.com/RP0JvZ8S

Как делать esq запросы и интегрировать в данную схему, чтобы отображалось всё в модальном окне.

Буду очень благодарен любой помощи! 

Нравится

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

Вариантов решения много, мне кажется проще сделать  свое представление в БД  (view) которая бы формировала несколько колонок например 

Дата,

Кол-во обращения поступили с 9 до 12,

Кол-во обращения поступили с 12 до 15,

 

Наложить ваше представления в БД (view) на обїект в конфигурации и выводить в видек грида отфильтровав по диапазону дат...

Для этого необходимо создать в БД представление,  создать в Конфигурации объект, где установить признак для свойства [Представление в БД] Объект в Конфигурации должен иметь такое же название, как и представление в БД.

В системе есть объекты, имя которых начинается на "VW*"

Вариантов решения много, мне кажется проще сделать  свое представление в БД  (view) которая бы формировала несколько колонок например 

Дата,

Кол-во обращения поступили с 9 до 12,

Кол-во обращения поступили с 12 до 15,

 

Наложить ваше представления в БД (view) на обїект в конфигурации и выводить в видек грида отфильтровав по диапазону дат...

Для этого необходимо создать в БД представление,  создать в Конфигурации объект, где установить признак для свойства [Представление в БД] Объект в Конфигурации должен иметь такое же название, как и представление в БД.

В системе есть объекты, имя которых начинается на "VW*"

Как вообще использовать ESQ в странице модального окна (https://pastebin.com/RP0JvZ8S). Чтобы отобразить хоть какой нибудь результат.  GRID создал, VIEW создал. 

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

 

А вообще, вариантов действительно много, в зависимости от того, что хотите увидеть. Может, будет проще вместо модального окна вообще настроить в разделе панель итогов из нескольких показателей, выводящих числа по данным той же view.

 

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

Здравсвуйте! Создал View, нужно открыть модальное окно этой вьюшки, в конфиге для LookupUtilities.Open указываю эту вьюшку.

var config = {
	entitySchemaName: "ScVwSLPBalanseFApp",
);
 
LookupUtilities.Open(this.sandbox, config, this.loadFinStatementForPeriod, this, null, false, false);



Модальное окно открывается, но видна только одна запись. Хотя во вьюшке 20 записей, и самое интересное, что при поиске выдает нужные записи). Может кто-нибудь подскажет в чем причина?



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

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

Нравится

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

Скорее всего, накладывается какой-то фильтр.

Посмотрите через SQL Profiler, какой запрос уходит в базу.

В response приходят все записи, что странно, почему отображаются не все.

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

Какая колонка у вас указана как идентификатор и как вы ее заполняете в вашей вьюхе?

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

Спасибо за ответ, да дело было в Id во вьюшке.

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

Подскажите пожалуйста, как передать данные в модальное окно, а также как и где получить их в модальном окне?

Вызов модального окна 

 

var sandbox = this.sandbox;
var config = {
	heightPixels: 300,
	widthPixels: 700
};
var moduleName = "GrsModalModule";
var moduleId = sandbox.id + "_" + moduleName;
var renderTo = ModalBox.show(config, function() {
	sandbox.unloadModule(moduleId, renderTo);
});
sandbox.loadModule(moduleName, {
	id: moduleId,
	renderTo: renderTo,
});

 

Нравится

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

Пример из  TagUtilitiesV2 (заполнение parameters) и вызов модуля

openTagModule: function(config) {
	var scope = config.scope;
	var sandbox = config.sandbox || scope.sandbox;
	var tagModulePageId = this.getTagModulePageId(sandbox);
	this.prepareModalBox();
	var tagModuleConfig = {
		renderTo: this.getGridContainer(),
		id: tagModulePageId,
		parameters: {
			TagSchemaName: config.entityTagSchemaName,
			InTagSchemaName: config.entityInTagSchemaName,
			RecordId: config.entityRecordId
		}
	};
	sandbox.loadModule("TagModule", tagModuleConfig);
},

Пример чтения переданных параметров в модуле TagModule 

createViewModel: function() {
	var viewModel = this.callParent(arguments);
	var parameters = this.parameters;
	if (parameters) {
		viewModel.set("TagSchemaName", parameters.TagSchemaName);
		viewModel.set("InTagSchemaName", parameters.InTagSchemaName);
		viewModel.set("RecordId", parameters.RecordId);
	}
	return viewModel;
}

 

Пример из  TagUtilitiesV2 (заполнение parameters) и вызов модуля

openTagModule: function(config) {
	var scope = config.scope;
	var sandbox = config.sandbox || scope.sandbox;
	var tagModulePageId = this.getTagModulePageId(sandbox);
	this.prepareModalBox();
	var tagModuleConfig = {
		renderTo: this.getGridContainer(),
		id: tagModulePageId,
		parameters: {
			TagSchemaName: config.entityTagSchemaName,
			InTagSchemaName: config.entityInTagSchemaName,
			RecordId: config.entityRecordId
		}
	};
	sandbox.loadModule("TagModule", tagModuleConfig);
},

Пример чтения переданных параметров в модуле TagModule 

createViewModel: function() {
	var viewModel = this.callParent(arguments);
	var parameters = this.parameters;
	if (parameters) {
		viewModel.set("TagSchemaName", parameters.TagSchemaName);
		viewModel.set("InTagSchemaName", parameters.InTagSchemaName);
		viewModel.set("RecordId", parameters.RecordId);
	}
	return viewModel;
}

 

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