Строил ли кто-то подобные графики в Creatio?

Как пример - по оси X отложены группы (города), и для каждого города отобразить динамику по месяцам.



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

Нравится

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

На сколько я знаю, среди стандартных нет таких видов графика

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

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

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

 

Если делать полностью своё и без интерактивности, можно сделать веб-сервис, возвращающий HTML-страницу или просто картинку в нужном виде и выводить в блоке итогов «Web-страница». Или разрабатывать с нуля новый виджет.

 

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

Добрый день!

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

Нравится

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

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

 

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

 Спасибо за Ваш ответ. Я создал новый attribute, пытаюсь его инициализировать в методе init. В этом методе я пытаюсь сделать ESQ к сущности SysAdminUnitInRole, чтобы проверить входит ли текущий пользователь в нужную мне роль. В результате этого обращения я получаю в консоли сообщение "Текущий пользователь не имеет прав на объект "SysAdminUnitInRole"". Вы не подскажете какие права нужны пользователю для такого обращения? Заранее спасибо.

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

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

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

 Большое спасибо. Замечательный совет. Все получилось.

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

Может кто использует Clio ? Я так понимаю разработчики заняты, так как на странице GitHub версия исходников 2.0.0.10, при этом указано что последняя версия 2.0.0.9, а при установке через dotnet tool ставиться 2.0.0.12. На вопросы ответов не вижу, рекомендации по ошибкам не как не обрабатываются.

Потому может кто в курсе, при установке пакета делается ли резервная копия конфигурации, и если да то можно ли восстановить еще через Clio?

Нравится

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

Как один из вариантов, да, всё верно.

Александр, по последнему вопросу:

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

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

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

Как один из вариантов, да, всё верно.

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

Спасибо

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

Каким образом можно заполнить поля в создаваемой записи через справочное поле.



Например, при создании нового договора из карточки документа заполнить контрагента договора равным контрагенту документа.

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

Нравится

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

как минимум 2 варианта есть

1. Бизнес-процесс, реагирующий на создание записи и дополняющий данными

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

 

Алексей Следь пишет:

Механизм сообщений Sandbox. У нас много, где он используется

А можно попросить небольшой пример? 

тут хорошо описано

В 7.16.4 (на сколько помню) через бизнес-правила уже можно сделать в графическом интерфейсе.

Но и если не через него, то еще способ через встроенный в объект процесс перед созданием записи

Алексей Следь пишет:

тут хорошо описано

 А в моём случае как в карточке нового договора узнать Id документа, из которого этот договор (не деталь, а поле) создаётся?

Можно подойти с другой стороны: не дорабатывать окно выбора из справочника, а создать БП для выбранной записи раздела, в который передавать её Id. А там создавать договор, записывать в документ Id этого договора и в договоре заполнять нужные значения полей по данным связанного с ним документа. При этом можно показывать карточку новой записи. Либо же, если от пользователя требуется заполнение всего нескольких полей, можно получить их на преднастроенной странице, а затем добавлять договор элементом добавления данных.

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

кейс: обрабатывая обращение КЦ назначает ответственных. Необходимо добавить два и более человек, но не группу. На данный момент система позволяет добавить только одного ответственного и одну группу. 

Задача: сделать возможность добавлять несколько ответственных и несколько групп для одного обращения.

Нравится

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

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

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

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

спасибо

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

Разворачиваю Creatio на новой машине. Версия 7.16.4

 

Пытаюсь войти в систему пользователем Supervisor, выдается ошибка авторизации.

 

Redis запущен и работает. Если его отключить, сообщение меняется.



Доступ к SQLserver есть. В SqlServer Profiler вижу входящие запросы, все выполняются без ошибок. Если у пользователя Supervisor в БД поменять язык, то и в интерфейсе язык поменялся (Authorization failed). 

 

Если указываю несуществующего в БД пользователя, сообщение также меняется (Invalid username or password specified. Verify that you have entered correct data or contact your system administrator. A system administrator can change the password on the user page)

 

Все компоненты Windows по списку проверила, все установлено.

 

В файле ProcessMaintenanceLog ошибка (см ниже). Куда дальше смотреть? Что проверять? 



2020-10-29 09:41:51,005 [208] WARN IIS APPPOOL\Creatio_7164 ProcessMaintenanceLog RunStep - Operation ProcessLogArchivingOperation failed

System.Data.SqlClient.SqlException (0x80131904): Execution Timeout Expired.  The timeout period elapsed prior to completion of the operation or the server is not responding. ---> System.ComponentModel.Win32Exception (0x80004005): Время ожидания операции истекло

   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)

   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)

   at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)

   at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()

   at System.Data.SqlClient.SqlDataReader.get_MetaData()

   at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, Boolean shouldCacheForAlwaysEncrypted)

   at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest)

   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)

   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)

   at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)

   at Polly.Policy.<>c__DisplayClass119_0`1.b__0(Context ctx, CancellationToken ct)

   at Polly.Policy.<>c__DisplayClass129_0`1.b__0(Context ctx, CancellationToken ct)

   at Polly.Policy.<>c__DisplayClass103_0.b__1(Context ctx, CancellationToken ct)

   at Polly.NoOp.NoOpEngine.Implementation[TResult](Func`3 action, Context context, CancellationToken cancellationToken)

   at Polly.Policy.<>c.b__103_0(Action`2 action, Context context, CancellationToken cancellationToken)

   at Polly.Policy.ExecuteInternal[TResult](Func`3 action, Context context, CancellationToken cancellationToken)

   at Polly.Policy.Execute[TResult](Func`3 action, Context context, CancellationToken cancellationToken)

   at Polly.Policy.Execute[TResult](Func`1 action)

   at Terrasoft.DB.MSSql.MSSqlExecutor.FailoverExecute[TResult](DbCommand command, Func`1 func)

   at Terrasoft.Core.DB.DBExecutor.FailoverExecuteReader(DbCommand command, Func`1 func)

   at Terrasoft.Core.DB.DBExecutor.ExecuteCommand[TResult](Func`2 commandExecutionCallback, String sqlText, QueryParameterCollection queryParameters, CancellationToken cancellationToken)

   at Terrasoft.Core.DB.DBExecutor.InternalExecuteReader(String sqlText, QueryParameterCollection queryParameters, CommandBehavior behavior, CancellationToken cancellationToken)

   at Terrasoft.Core.DB.DBExecutor.InternalExecuteReader(String sqlText, QueryParameterCollection queryParameters)

   at Terrasoft.Core.DB.Select.ExecuteReader(ExecuteReaderReadMethod readMethod)

   at Terrasoft.Core.SchemaManager`1.GetLastSchemaResourceModification(UserConnection userConnection, Guid workspaceId)

   at Terrasoft.Core.SchemaManager`1.d__245.MoveNext()

   at Terrasoft.Core.SchemaManager`1.InitializeItems(Guid itemUId)

   at Terrasoft.Core.Entities.EntitySchemaManager.InitializeItems(Guid itemUId)

   at Terrasoft.Core.SchemaManager`1.InitializeItems()

   at Terrasoft.Core.Entities.EntitySchemaManager.InitializeItems()

   at Terrasoft.Core.SchemaManager`1.Initialize(SchemaManagerProvider provider, SchemaManagerProviderConfigurationElement configuration)

   at Terrasoft.Core.FileSystemEnabledSchemaManager`1.Initialize(SchemaManagerProvider provider, SchemaManagerProviderConfigurationElement configuration)

   at Terrasoft.Core.Entities.EntitySchemaManager.Initialize(SchemaManagerProvider provider, SchemaManagerProviderConfigurationElement configuration)

   at Terrasoft.Core.SchemaManagerProvider.InitializeSchemaManager(String managerName)

   at Terrasoft.Core.SchemaManagerProvider.<>c__DisplayClass53_0.b__1()

   at System.Lazy`1.CreateValue()

--- End of stack trace from previous location where exception was thrown ---

   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()

   at System.Lazy`1.get_Value()

   at Terrasoft.Core.SchemaManagerProvider.GetSchemaManager(String managerName)

   at Terrasoft.Core.SchemaManagerProvider.GetManager(String managerName)

   at Terrasoft.Core.UserConnection.get_EntitySchemaManager()

   at Terrasoft.Core.Process.ProcessLogArchiverStorage.GetSchemaColumnsNames(String schemaFrom)

   at Terrasoft.Core.Process.ProcessLogArchiverStorage.MoveToHistoryLog(DBExecutor dbExecutor, String schemaName)

   at Terrasoft.Core.Process.ProcessLogArchiverStorage.Archive()

   at Terrasoft.Core.Process.LoopOperationUtils.DelegateLoopOperation.RunStep(ILoopContext context)

   at Terrasoft.Core.Process.LoopOperationUtils.MetricLoopContext.Operation.RunStep(ILoopContext context)

   at Terrasoft.Core.Process.LoopOperationUtils.IgnoreErrorsLoopContext.Operation.RunStep(ILoopContext context)

ClientConnectionId:48337d16-1e7a-4442-a86b-cb508f53ff6f

Error Number:-2,State:0,Class:11


 

Нравится

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

Мне кажется, ошибка в логах  ProcessMaintenanceLog  связана с архивацией журнала процессов и не относится к неудачному входу. Посмотрите на ошибки в файлах Error.log (особенно в том, который относится к странице логина, не в папке \0\).

 

Также посмотрите в браузере в «Инструментах разработчика» обмен информацией с AuthService.svc, возможно, там будет больше информации.

 

Возможно, не хватает места на диске у сервера. Или требуется очистка Redis (иногда ещё бывает нужно перезапустить саму программу redis-cli.exe).

 

Если ничего обнаружить не получится, лучше обратиться в поддержку.

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

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

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

Однако столкнулся со следующей трудностью:

Контейнер, в котором отображается реестр представляет из себя:

"operation": "insert",
"name": "DataGrid",
"parentName": "gridContainer",
"propertyName": "items",
"values": {
		"itemType": Terrasoft.ViewItemType.CONTAINER,
		"className": "Terrasoft.ContainerList"
........
}

Судя по описанию класса сам по себе он не поддерживает иерархию

Однако, существует расширение класса "HierarchicalContainerList"

Возникают следующие вопросы:

1) Актуален ли класс HierarchicalContainerList на текущий момент. Если ли примеры его явного использования? Сможет ли он поддержать иерархическую структуру?

2) При попытке обращения к нему в виде:

"generator": "ConfigurationItemGenerator.generateHierarchicalContainerList"

Не совсем понимаю как именно задать нужные свойства

nestedItemsAttributeName и nestedItemsContainerId:

generateHierarchicalContainerList: function(config, generatorConfig) {
			var containerListConfig = this.generateContainerList(config, generatorConfig);
			containerListConfig.className = "Terrasoft.HierarchicalContainerList";
			Ext.merge(containerListConfig, {
				nestedItemsAttributeName: config.nestedItemsAttributeName,
				nestedItemsContainerId: config.nestedItemsContainerId
			});
			return containerListConfig;
		}

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

А вот nestedItemsContainerId, не совсем понятно. Похоже что этот атрибут должен принимать сам Id родительской записи.

 

Коллеги, буду благодарен за любую информацию, спасибо!

Нравится

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

Титаев Александр Николаевич,

Насколько я понял, то вся суть проблемы именно в том, что подбор продуктов использует не Grid, а ContainerList.

 

Реализовывал такую же задачу, но не нашел, как сделать ContainerList иерархичестим. Я полностью менял контрол страницы подбора из ContainerList на Grid а точнее на HierarchialGrid.







Функционал рабочий, но есть некрасивые моменты, когда активна строка для изменения значений.







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

 

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

 

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

 

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

 

В «коробке» есть древовидная деталь структуры проекта, реализованная в схеме ProjectStructureDetailV2:

{
	"operation": "merge",
	"name": "DataGrid",
	"values": {
		"id": "StructureGrid",
		"type": "listed",
		"hierarchical": true,
		"sortColumnDirection": {"bindTo": "disableGridSorting"},
		"hierarchicalColumnName": "ParentId",
		"updateExpandHierarchyLevels": {
			"bindTo": "onExpandHierarchyLevels"
		},
		"expandHierarchyLevels": {
			"bindTo": "expandHierarchyLevels"
		},

Там же приведены функции onExpandHierarchyLevels, clearExpandHierarchyLevels, removeExpandHierarchyLevel и другие, реализующие логику древовидности.

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

Спасибо за подсказку! Да, со схемами и сервисами детали ознакамливался в процессе анализа.

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

Дополнение или очевидное задание иерархии при использовании "Terrasoft.ContainerList" на сколько я понял, не возможно (уже пробовал).

Буду думать как выходить из ситуации. Ещё раз спасибо!

 

Титаев Александр Николаевич,

Насколько я понял, то вся суть проблемы именно в том, что подбор продуктов использует не Grid, а ContainerList.

 

Реализовывал такую же задачу, но не нашел, как сделать ContainerList иерархичестим. Я полностью менял контрол страницы подбора из ContainerList на Grid а точнее на HierarchialGrid.







Функционал рабочий, но есть некрасивые моменты, когда активна строка для изменения значений.







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

 

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

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

Да. CSS поможет с этим.

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

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

То-есть сейчас нужно активировать запись и только потом выбрать галочкой.

Вроде незначительно, но для пользователя менее удобно

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

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

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

 

Какие манипуляции необходимо выполнить для этого?

Нравится

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

Владимир, см. статью.

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

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

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

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

Собственно вопрос можно ли стандратную карту в Creatio заменить на другую, гугл карты, например?

Нравится

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

Да, есть дополнения для карт Google и Yandex. Сами они бесплатны, но требуют указания ключа, предоставляемого картами, которые взимают плату за своё использование.

Собственно, поэтому в «коробке» с Google Maps переключились на OSM.

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

Александр, добрый день!

А где в Creatio можно сменить на Google карту отображение в адресе (на детале) и в активностях при включенном модуле Field Sales, где мы планируем визиты? Можно ли вообще там подменить карту, в сис настройках каких-то?

Нужно ставить дополнение. Специально для Field Sales есть ещё одно с Yandex, других разработчиков. Как именно настраивать, лучше спросить у их авторов.

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

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

Может у кого-то был кейс доработки детали с редактируемым детали, что бы вернуть массовый выбор через shift? Или скажите куда копать?

Нравится

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

Павел, так есть же действие. Например, на редактируемой детали продуктов в заказе:

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

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

Зафиксировал идею. Об обходном решении написал выше.

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