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

Мне нужна кастомная вьюха со стилями и сеткой creatio, без привязки к разделу.
Создал объект , который наследует BaseEntity, добавил необходимые поля со скрина, но с реализацией пейджи как поступить не знаю.
Подскажите в каком направлении двигаться.

 

Нравится

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

Владислав, добрый день!

Пример подобной страницы. В разделе Документы добавлена кнопка открытия страницы:

define("DocumentSectionV2", [], function() {
	return {
		entitySchemaName: "Document",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[
			{
					"operation": "insert",
					"name": "OpenCustomPageButton",
					"values": {
						"style": "red",
						"itemType": 5,
						"caption": {
							"bindTo": "Resources.Strings.OpenCustomPageButtonCaption"
						},
						"click": {
							"bindTo": "onOpenCustomPageButtonClick"
						}
					},
				"parentName": "CombinedModeActionButtonsCardLeftContainer",
				"propertyName": "items",
				"index": 9
			}
		]/**SCHEMA_DIFF*/,
		methods: {
			onOpenCustomPageButtonClick: function() {
				var config = {
					moduleId: "SectionModuleV2_DocumentSectionV2_CardModuleV2_chain",
					moduleName: "CardModuleV2",
					operation: "add",
					schemaName: "UsrObjectWithoutSectionPage"
				};
				this.openCardInChain(config);
			},
		}
	};
});

Сама страница объекта без раздела:

define("UsrObjectWithoutSectionPage", [], function() {
  return {
    entitySchemaName: "UsrObjectWithoutSection",
    details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
    diff: /**SCHEMA_DIFF*/[
		{
				"operation": "insert",
				"name": "Namec84346b3-955b-4b9e-b061-af463ee8d8da",
				"values": {
					"layout": {
						"colSpan": 24,
						"rowSpan": 1,
						"column": 0,
						"row": 0,
						"layoutName": "ProfileContainer"
					},
					"bindTo": "UsrName"
				},
				"parentName": "ProfileContainer",
				"propertyName": "items",
				"index": 0
			}
	]/**SCHEMA_DIFF*/,
    methods: {}
    };
});

 

Владислав, добрый день!

Пример подобной страницы. В разделе Документы добавлена кнопка открытия страницы:

define("DocumentSectionV2", [], function() {
	return {
		entitySchemaName: "Document",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[
			{
					"operation": "insert",
					"name": "OpenCustomPageButton",
					"values": {
						"style": "red",
						"itemType": 5,
						"caption": {
							"bindTo": "Resources.Strings.OpenCustomPageButtonCaption"
						},
						"click": {
							"bindTo": "onOpenCustomPageButtonClick"
						}
					},
				"parentName": "CombinedModeActionButtonsCardLeftContainer",
				"propertyName": "items",
				"index": 9
			}
		]/**SCHEMA_DIFF*/,
		methods: {
			onOpenCustomPageButtonClick: function() {
				var config = {
					moduleId: "SectionModuleV2_DocumentSectionV2_CardModuleV2_chain",
					moduleName: "CardModuleV2",
					operation: "add",
					schemaName: "UsrObjectWithoutSectionPage"
				};
				this.openCardInChain(config);
			},
		}
	};
});

Сама страница объекта без раздела:

define("UsrObjectWithoutSectionPage", [], function() {
  return {
    entitySchemaName: "UsrObjectWithoutSection",
    details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
    diff: /**SCHEMA_DIFF*/[
		{
				"operation": "insert",
				"name": "Namec84346b3-955b-4b9e-b061-af463ee8d8da",
				"values": {
					"layout": {
						"colSpan": 24,
						"rowSpan": 1,
						"column": 0,
						"row": 0,
						"layoutName": "ProfileContainer"
					},
					"bindTo": "UsrName"
				},
				"parentName": "ProfileContainer",
				"propertyName": "items",
				"index": 0
			}
	]/**SCHEMA_DIFF*/,
    methods: {}
    };
});

 

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

Благодарю Вас за ответ, Дмитрий!

 

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

Доброго дня,

Creatio має вбудований функціонал, який розрізняє основні проекти і під-проекти (робота) і відкриває для них різні сторінки редагування з різними схемами, як сказано тут:

Питання, чи можна зробити так, щоб і для робота і проект використовували однакову схему.

Нравится

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

Делал такое через обновление данных в напрямую в БД. Таблица SysModuleEdit

Делал такое через обновление данных в напрямую в БД. Таблица SysModuleEdit

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

Исходные данные:
1. Страница редактирования продукта ( ProductBase )
2. Схема страницы "Продукты" (Пакет 1)
3. Схема страницы "Продукты" (Пакет 2)
"Пакет 2" зависит от "Пакет 1".
Вопросы:
1. Как правильно создать "3. Схема страницы "Продукты" (Пакет 2)", чтобы видеть все изменения из "2. Схема страницы "Продукты" (Пакет 1)" и из "1. Страница редактирования продукта ( ProductBase )"?
2. Как корректно изменить родителя в "3. Схема страницы "Продукты" (Пакет 2)"?
Изменение поля "Parent.UId" файла "ProductPageV2\descriptor.json" не дало нужный результат.

Нравится

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

Если у Вас зависимости " 1. Страница редактирования продукта ( ProductBase ) " -> " 2. Схема страницы "Продукты" (Пакет 1) " -> " 3. Схема страницы "Продукты" (Пакет 2) ", тогда в " 3. Схема страницы "Продукты" (Пакет 2) " будете видеть все изменения пакетов выше.

2. Изменить родителя лучше через графический интерфейс конфигуратотра, зайдите в модуль и там измените родительский модуль.

Если у Вас зависимости " 1. Страница редактирования продукта ( ProductBase ) " -> " 2. Схема страницы "Продукты" (Пакет 1) " -> " 3. Схема страницы "Продукты" (Пакет 2) ", тогда в " 3. Схема страницы "Продукты" (Пакет 2) " будете видеть все изменения пакетов выше.

2. Изменить родителя лучше через графический интерфейс конфигуратотра, зайдите в модуль и там измените родительский модуль.

Александр Тыра,

Нет доступа к редактированию поля "Родительский объект".

Вы можете создать заново с нужным родителем и скопировать текст кода схемы. 

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

Возможно кто-то сталкивался с таким кейсом - в бизнеспроцессе открывается страница редактирования, в ней кнопка "Сохранить" при нажатии сразу закрывает страну. Про не закрывание страницы при добавлении на делать даных есть описание кейса на странице академии https://academy.terrasoft.ru/documents/technic-sdk/7-16/kak-sohranyat-ne-zakryvaya-otkrytuyu-biznes-processom-stranicu-redaktirovaniya , но ножно ли сделать что бы поля на странице можно быть сохранить не закрывая страницу? Другими словами при нажатии "Сохранить" страница не закрывалась а кнопка заменялась на "Закрыть"?

Нравится

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

Александр, в статье по той ссылке в начале предлагается, как такое сделать:

Если необходимо сохранить запись несколько раз, не закрывая страницу редактирования, то необходимо методу this.save() в качестве аргумента передавать конфигурационный объект со свойством isSilent равным true. Например:

this.save({isSilent : true});

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

Александр, в статье по той ссылке в начале предлагается, как такое сделать:

Если необходимо сохранить запись несколько раз, не закрывая страницу редактирования, то необходимо методу this.save() в качестве аргумента передавать конфигурационный объект со свойством isSilent равным true. Например:

this.save({isSilent : true});

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

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

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

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

Суть в том что кнопка нужна только на одной из страниц.

Код кнопки добавлен в схему этой страницы и в схему секции раздела.

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

Как можно красиво побороть?

Спасибо.

Нравится

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

Александр, речь о кнопке в реестре рядом со стандартными добавлением, копированием, удалением?

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

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

Александр, речь о кастомной кнопке внутри записи, справа от кнопки действий. Ну или внутри действий (так же только внутри записи).

Ваши ссылки изучу. Спасибо)

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

Добрый день!

В моём пакете, который указан в качестве текущего, лежит страница редактирования обращения, в БД она привязана к этому пакету.

Но если отредактировать страницу редактирования через мастер раздела и сохранить, то в пакете Custom создаётся замещающая страница страницы редактирования. То есть моя основная страница при этом не меняется! С чем это может быть связано?

Нравится

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

Натали Вишня,

Попробуйте указать Ваш пакет ещё в системной настройке CustomPackageId.

После изменения системной настройки перезайдите в срм.

Добрый день.

Вам нужно изменить системную настройку [Текущий пакет] (CurrentPackageId).

[Текущий пакет] (CurrentPackageId) — пакет, в котором сохраняются все изменения, внесенные в структуру разделов системы при помощи мастера разделов. Это могут быть, например, изменения, связанные с добавлением колонок в объект раздела либо добавление нового раздела в систему. Тип: справочник. По умолчанию в данной системной настройке установлен пакет [Custom]. Если доработки, выполненные в мастере разделов, нужно перенести в другое приложение, текущий пакет необходимо изменить. Для этого в поле [Значение по умолчанию] выберите из справочника тот пакет, который вы планируете переносить.

Алла, спасибо за ответ, но в этой системной настройке и так стоит мой пакет, а не Custom...

А страница в Вашем пакете тоже замещающая? Или это Вами разработанная страница? А руками (не мастером) в своем пакете эту страницу править можете?

Есть подозрение, что у Вас издатели разные

Лопатин Константин Николаевич пишет:

А страница в Вашем пакете тоже замещающая? Или это Вами разработанная страница? А руками (не мастером) в своем пакете эту страницу править можете?

Есть подозрение, что у Вас издатели разные

Лопатин Константин Николаевич, 

Руками править могу в пакете, с издателем тоже уже проверяли, издатель один. Есть страница casepage, она является родителем для моей страницы.

Натали Вишня,

Попробуйте указать Ваш пакет ещё в системной настройке CustomPackageId.

После изменения системной настройки перезайдите в срм.

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

Раздел создан сторонним пользователем

ошибка вылетает в методе, когда он пытается обратиться к элементу name контейнера в файле all-combined.js

needFlatten: function(e, t) {
        var a = t || !1;
        return (a = !Ext.isEmpty(e.name)) || (Ext.isArray(e) && e.length > 0 ? a = !Ext.isEmpty(e[0].name) : Ext.isObject(e) && Terrasoft.each(e, function(e) {
            a = this.needFlatten(e, a)
        }, this)),
        a
    },

трэйс начинается условно от ViewModelSchemaValidationMixin.js в методе getSchemaDuplicates 

здесь соотвественно всё останавливается на методе Terrasoft.JsonDiffer.getFlatObject

getSchemaDuplicates: function(schema) {
				const viewConfig = schema.viewConfig;
				const messageConfig = {};
				const result = [];
				const pathDelimiter = Terrasoft.JsonDiffer.pathDelimiter;
				const flatViewConfig = Terrasoft.JsonDiffer.getFlatObject(viewConfig, {identifyItemByPath: true});
				Object.keys(flatViewConfig).forEach(function(path) {
					const name = path.split(pathDelimiter).pop();
					const formattedPath = path.split(pathDelimiter).join(".");
					const diffObject = flatViewConfig[path];
					const caption = diffObject.caption ||
						(diffObject.labelConfig && diffObject.labelConfig.caption) ||
						"";
					messageConfig[name] = messageConfig[name] || [];
					messageConfig[name].push({
						path: formattedPath,
						caption: caption
					});
				});
				Object.keys(messageConfig).forEach(function(name) {
					if (messageConfig[name].length > 1) {
						result.push({
							name: name,
							items: messageConfig[name]
						});
					}
				});
				return result;
			},

В чем может быть причина? И буду рад советами по отладке такого клиентского кода, когда я пытался в all-combined.js ставить брэйкпоинты, у меня словно всё зависало просто

Нравится

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

Посмотрите тут и тут

Григорий Чех,

ни та ни та причина. причина оказалась в свойстве

"contentType": Terrasoft.ContentType.DROPDOWN

после того, как закомментировал его, всё заработало. Только теперь я не могу найти что это за свойство и какие значения оно может принимать помимо DROPDOWN и есть ли вообще у него такое значение?

{
	"operation": "insert",
	"name": "ITExecutor",
	"values": {
		"enabled": false,
		"layout": {
			"contentType": Terrasoft.ContentType.DROPDOWN,
			"colSpan": 12,
			"rowSpan": 1,
			"column": 12,
			"row": 0,
			"layoutName": "Header"
				  },
		"bindTo": "ITExecutor"
				},
	"parentName": "Header",
	"propertyName": "items",
	"index": 1
}

 

Григорий Чех,

разобрался. свойство "contentType" должно находится внутри "values", а не "layout"

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

У меня запускается некоторый БП, в котором почти на старте открывается страница на редактирование, соответственно там создается задача с заголовком, который я прописываю.

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

Я пытался сделать это по задаче, но она никак не ссылается на страницу/объект редактирования. 

Как быть?

Нравится

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

БП запускается как по сигналу по какому то действию оператора?

Самое простое решение перед открытием окна менять статус задачи (как вариант добавить в объект какой то признак Передан в работу) И не запускать (или завершать) БП у которых этот признак установлен.

Те

старовый сигнал

проверка что признак не установен

и либо выход

либо установка признака и затем открытие  странички редактирования!

БП запускается как по сигналу по какому то действию оператора?

Самое простое решение перед открытием окна менять статус задачи (как вариант добавить в объект какой то признак Передан в работу) И не запускать (или завершать) БП у которых этот признак установлен.

Те

старовый сигнал

проверка что признак не установен

и либо выход

либо установка признака и затем открытие  странички редактирования!

Григорий Чех,

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

Можно, но очень не советую вам на них завязыватся. Они активно изменяются от версии к версии.

Добрый день, как отметил Григорий лучше иметь признак запуска процесса, но вы можете просматривать текущие задачи по процессам они отображаются у клиента из таблицы  SysProcessElementToDo или через js найти и распарсить элемент(если он есть) такого типа там вшит id записи к которой относится страница редактирования id="ProcessDashboardSchemaNotificationContainer-cce9076d-fa47-49a3-bec5-e53450fc421b-ViewModule_RightSideBarModule_ProcessDashboardModule"

В начале БП свяжите процесс с записью. И затем можно искать такие связи

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

Добрый день!

Столкнулись со странным поведением системы при переносе новых страниц редактирования для раздела Продукты. 

Аналитик добавил отдельные страницы редактирования для разных типов продуктов. На его локальном стенде все окей.

Но после переноса пакета через svn на тестовую среду, в кнопке добавления продукта появляется следующее http://prntscr.com/jixdiu

Более того, зависимость страницы редактирования от типа не отображается в мастере раздела http://prntscr.com/jixfxu и в настройках страницы меняется radiobutton на "Использовать одну страницу для всех записей"

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

Кто сталкивался с подобным кейсом и как его можно решить?

Нравится

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

По поводу SVN и мастера разделов ответил в соседней теме.

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

Здравствуйте, есть 2 детали: заказы и курьеры.
Заказы связываются с разделом Обращения и связывается с деталью курьеры.
Деталь заказы добавлена на странице редактирования обращения.
Как сделать переход на страницу редактирования курьера через деталь заказы?

Нравится

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

Здравствуйте, Сергей!

Для того, чтоб иметь возможность прямо со страницы обращения из детали "Заказы" переходить на страницу курьера, нужно вывести колонку, которая ссылается на курьера, на деталь. Тогда, если для курьеров зарегистрирован раздел, то в колонке будут ссылки на карточки курьеров (если курьер = контакт, то на карточки контактов). Но должно быть однозначное соответствие курьера заказу (то есть, курьер должен быть в поле, а не n курьеров на детали).

Если у заказа таки много курьеров, то можно будет только через карточку заказа перейти на страницу курьера.

Примечание: В текущей архитектуре ссылки в полях формируются только для тех объектов, для которых есть раздел. Сейчас логика формирования ссылок на справочные поля завязана на SysModuleStructure, в результате чего не формируются ссылки для объектов, у которых есть только деталь и нет раздела. В результате имеем ситуацию, когда страница редактирования есть, но открыть ее возможности нет.
Доработка данного функционала находится на рассмотрении у аналитиков продукта, возможно, будет доработана в будущих релизах. То есть, если для объекта "Курьер" не зарегистрирован раздел, то ссылок на карточки курьеров в полях связанных сущностей не будет.

Одеяненко Юлия,

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

Одеяненко Юлия пишет:
Доработка данного функционала находится на рассмотрении у аналитиков продукта, возможно, будет доработана в будущих релизах.

Было бы очень удобно  задавать формат колонки "гиперссылка", когда настраиваем колонки детали, и ,соответственно, при добавлении записи в колонку должна генерироваться гиперссылка.

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

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