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

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

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

Пробовала прикрутить методы 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 и нужной страницы редактирования ?

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

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

Здравствуйте, скажите пожалуйста как можно получить выбранную запись из реестр детали (через script) в странице записи?

Нравится

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

Добрый день,

 

находясь в контексте модели реестра нужно вызвать метод this.getActiveRow() чтобы получить модель выбранной записи, или this.get("ActiveRow") чтобы получить идентификатор выбранной записи. 



С уваженим,

Юрий. 

Yurii,

Спасибо

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

Не виходить керувати видимістю елементів на сторінці редагування об'єкта.

Встановлюю для IsModelItemsEnabled значення false в методі сторінки onEntityInitialized, значення змінюється, але доступність елементів не блокується. Права обмежені, не суперадмін. Сторінка звичайна, не Freedom UI. Версія платформи 8.0.6. На сторінці схожого об'єкта все відпрацьовує, а тут ні. Пробував створювати нову сторінку з мінімумом коду - не працює.

Хтось може порадити як побороти проблему?

Нравится

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

Доброго дня!

 

Схоже, подібне питання вже обговорювалося ан форумі: https://community.terrasoft.ua/questions/redaktiruemyy-reestr-zablokiro…

 

У цьому випадку проблема пов'язана з блокуванням колонок в редагованому реєстрі. Підхід, описаний у запиті, не блокує всі поля на сторінці, включаючи ті, що пов'язані з правилами.

 

Повідомте, якщо лишаться питання, будь ласка.

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

Приветствую всех.

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

Имеется такой вот вопрос: есть ли хороший способ, как можно, меняя на лету значение поля справочника, заставить менять как кейс, так и страницу раздела?

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

Но после первого сохранения записи выходит так, что при смене значения поля справочника, видно небольшое уведомление, мол имеется более подходящий кейс под новое значение справочника и его можно сменить https://prnt.sc/hTUiaTTn2qRe . Да, кейс поменяется, но страница при этом не меняется. Ну и менеджер банально может не нажать на кнопку смены кейса. А желательно бы, чтобы менеджер не мог работать с записью, пока не сменит кейс на соответствующий.

Интерфейс (страницу https://prnt.sc/oi79vQWQ-KMk ) удается сменить лишь проделав определенные манипуляции: меняем значение поля справочника, сохраняем, перезаходим в запись. Нужно именно перезайти в запись (закрыть и заново открыть), простое обновление страницы записи не помогает.

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

Заранее благодарен всем отозвавшимся.

Нравится

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

Добрый день!



Мне здесь отвечали на подобный вопрос: https://community.terrasoft.ua/questions/massovo-smenit-keys-dcm

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

 

Протестировали на коробочной версии Creatio и на данный момент это всё ещё коробочное поведение которое можно изменить только с помощью разработки.

 

Мы уже добавили ваш запрос на доработку этого функционала к сущестующей задаче для наших разработчиков.

Дополнительно, в посте https://community.terrasoft.ua/questions/zapustit-obnovlennyy-keys описана работа функции что отвечает за изменение кейса, возможно это поможет вам в разработке своего решения.

 

Спасибо вам.

 

Artem,

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

Но также вычленил одну фразу ответившего из поста https://community.terrasoft.ua/questions/massovo-smenit-keys-dcm

Там Ярослав поясняет:

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

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

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

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

Іван Щербатих пишет:

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

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

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

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

 

Добавил действие в меню в страницу редактирования - скрин ошибок в комментарии:

 

            onMyButtonClick: function() {

                var Id =  this.get("Id");

                //console.log(Id);

                var args = {

                    sysProcessName: "ZbsAddTreatSessions",

                    parameters: {

                        TreatmentProgramId: Id

                    }

                };

                processModuleUtilities.executeProcess(args);    

            },

            getActions: function() {

                   var actionMenuItems = this.callParent(arguments);

                console.log(11);

                // Добавление линии-разделителя.

                actionMenuItems.addItem(this.getButtonMenuItem({

                    Type: "Terrasoft.MenuSeparator",

                    Caption: ""

                }));

                console.log(22);

                // Добавление пункта меню в список действий раздела.

                actionMenuItems.addItem(this.getButtonMenuItem({

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

                    // схемы.

                      Caption: {bindTo: "Resources.Strings.CreateTreatSessionsCaption"},

                    // Привязка метода-обработчика действия.

                    Click: {bindTo: "onMyButtonClick"}

                }));

                console.log(33);

                 // Возврат дополненной коллекции действий раздела.

                return actionMenuItems;

            },                        

 

Нравится

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

Вот текст ошибки:

user: Supervisor/7f3b869f-34f3-4f20-ab4d-7480a5fdf647

 file: http://localhost:83/0/core/hash/ng-core/src/polyfills-es5.js?hash=b2d23…

 line: 1

 column: 16702

 message: Uncaught TypeError: Cannot read properties of undefined (reading 'apply') 

 date: Fri Aug 12 2022 00:19:01 GMT+0600 (East Kazakhstan Time)

 stack: TypeError: Cannot read properties of undefined (reading 'apply')

    at constructor.callModelMethod (http://localhost:83/0/core/hash/Terrasoft/controls/mixins/bindable.js?h…)

    at constructor.<anonymous> (http://localhost:83/0/core/hash/Terrasoft/controls/mixins/bindable.js?h…)

    at constructor.fire (http://localhost:83/core/7b05a4f154493931757b1cca921fc8a9/ExtJs/extjs-b…)

    at constructor.continueFireEvent (http://localhost:83/core/7b05a4f154493931757b1cca921fc8a9/ExtJs/extjs-b…)

    at constructor.fireEventArgs (http://localhost:83/core/7b05a4f154493931757b1cca921fc8a9/ExtJs/extjs-b…)

    at constructor.fireEvent (http://localhost:83/core/7b05a4f154493931757b1cca921fc8a9/ExtJs/extjs-b…)

    at constructor.onClick (http://localhost:83/0/core/hash/Terrasoft/controls/menu/basemenuitem.js…)

    at HTMLLIElement.eval (eval at cacheableFunctionFactory (http://localhost:83/core/7b05a4f154493931757b1cca921fc8a9/ExtJs/extjs-b…), <anonymous>:6:13)

    at HTMLLIElement.wrap (http://localhost:83/core/7b05a4f154493931757b1cca921fc8a9/ExtJs/extjs-b…)

    at t.value (http://localhost:83/0/core/hash/ng-core/src/polyfills-es5.js?hash=b2d23…)

Добрый день,

 

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

Oleg Drobina, 

огромное спасибо, у меня получилось благодаря Вашей подсказке!

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

Приветствую. Может ли у детали быть 2 страницы редактирования? 

На разделе "продажи" в странице редактирования используется деталь "А", которая имеет настроенную карточку редактирования. Деталь "А" построена на объекте "Object".  Моей задачей является создание нового раздела -> странице редактирования и размещение этой детали в ней. Суть в том, что при использовании новой детали , из-за связей обьекта и страницы, я перехожу на уже существующую страницу редактирования детали. Решить проблему через visible не удалось, так как рендерится только одно из полей в зависимости от порядка в диффе (старое либо новое). С рассположением полей не знаю как поиграть. Прошу подсказать решение. Буду благодарен за возможные предположения реализации. 



Визуализирую проблему:

Проваливаемся с продажи. В diff поле стоит первым в очереди.

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



Проваливаемся с Сетевой задачи:

Поле в diff стоит после продажи, продажа отрендерилась уже по такому рассположению. Opportunity.visible = false; NetworkTask.visible = true

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





Показываю на примере поля "Продажа" -> необходимо заменить на "Сетевая задача" в зависимости от автозаполненного значения одного из полей. Если проваливаемся с продажи - this.Opportunity != undefined. Если Сетевая задача : 

this.NetworkTask !=undefined

 

Нравится

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

Вот 2 поля, на которых я привел пример.

Может можно как-то опеределить 2 diff блока? Мне по сути нужны чуть ли не 2 разные вьюхи, но на одном объекте....



{

                    operation: "insert",

                    name: "TsOpportunity",

                    parentName: "Header",

                    propertyName: "items",

                    values: {

                        visible: { bindTo: "IsOpportunity" },

                        enabled: false,

                        layout: {

                            column: 0,

                            row: 0,

                            colSpan: 12

                        }

                    }

                },

                {

                    operation: "insert",

                    name: "NetworkTask",

                    parentName: "Header",

                    propertyName: "items",

                    values: {

                        visible: { bindTo: "IsNetworkTask" },

                        enabled: false,

                        layout: {

                            column: 0,

                            row: 0,

                            colSpan: 12

                        }

                    }

                },

Добрый день!

Отобразить два поля в одном и том же месте не представляется возможным в виду особенностей построения страницы.

В данном случае следует настроить типизацию.

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

Можно создать раздел на основании объекта детали и уже в нём настроить типизацию. Для колонки настройки рекомендую создать отдельный справочник с двумя значениями, продажа и сетевая задача.

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

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

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

Приветствую, коллеги!

В процессе выполнения одного кейса столкулся с непониманием как это реализовать.

Кейс таков: 

Необходимо создать форму такого вида:



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



Мне нужна кастомная вьюха со стилями и сеткой 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});

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

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