Настройка переиодической очистки персональных данных
Статья в разработке...
Статья в разработке...
В файле настроек конфигурации в параметре ApplicationName вы можете указать наименование инстанса, которое будет отображаться в следующих разделах:
При использовании параметра ApplicationName предусмотрены следующие особенности:
Особенности отображения наименования инстанса:
Чтобы наименование инстанса совпадало с наименованием, с которого отправляются письма — укажите значение в параметре FromName в строке подключения к SMTP.
В файле настроек конфигурации вы можете определить следующие настройки для объектов:
Для автоматического формирования названия дела по маске: {Тип объекта} {N объекта по шаблону} в файле настроек конфигурации appsettings.json задайте параметр IsObjectNameRequired:
Настройка не учитывается:
При изменении параметра IsObjectNameRequired на true название дела будет обязательным для указания:
{
"Custom": {
"IsObjectNameRequired": false,
// другие параметры...
}
}
Поскольку при открытии карточки объекта браузер отображает сразу все блоки и их содержимое, это может приводить долгой загрузке и временному зависанию браузера, если карточка объекта содержит много данных и/или используется довольно слабый ПК.

Оптимизация предназначена для экстренных случаев, если не удается открыть большую карточку, поэтому мы не рекомендуем включать ее без крайней необходимости.
Оптимизация выключена по умолчанию, поскольку браузерный поиск по странице (клавиши CTRL+F) нужных полей или блоков по названию и/или значению будет выполняться иначе:
Для включения оптимизации (выключена по умолчанию) в файле appsettings.json в секции Custom пропишите следующие настройки:
{
// ...
"Custom": {
// ...
"LazyObjectCardInitDisabled": "false"
}
}
При включенной оптимизации содержимое в блоках будет отображаться браузером постепенно (по мере пролистывания карточки, с запасом в пару экранов).
Включение оптимизации позволяет получить серьезный прирост в производительности при отрисовке содержимого крупных карточек — минимум в два раза быстрее на карточке с ~1000 полей (чем больше объект, тем больше прирост).
При отключенной оптимизации есть обходной путь, который позволяет частично решить проблему долгой загрузки: не следует размещать все блоки на одной вкладке — лучше поделить их между несколькими или сворачивать блоки.
Для настройки рекомендуемого количества мультиблоков и мультистрок в карточке объекта дополните секцию Custom в файле настроек конфигурации appsettings.json параметрами:
Параметры (поддерживают переопределение) используются для предупреждения пользователей о рекомендованном количестве блоков и строк и не помешают созданию новых мультистрок/мультиблоков.
Установленное в конфигурации ограничение на количество блоков (100 по умолчанию) и строк (500 по умолчанию) в карточке объекта влияет на синхронизацию дела с EAV-моделью — если количество блоков/мультиблоков или строк/мультистрок нарушает установленное ограничение:
Interrupted SerializedEntityBlocksUpdated process:
projectId because blocks count / lines count limit exceeded
Для использования оптимизации при получении сводных данных по объектам с указанием максимального количества одновременных запросов при получении объектов в канбан-виде в файл конфигурации предусмотрены следующие настройки:
{
"Custom": {
...
"UseFilterOptimizationForProjectStatisticsList": "false",
// использование оптимизации при получении сводных данных по объектам.
Работает только в паре с настройкой UseFilterOptimizationForProjectsList.
"MaxDegreeOfProjectGroup": "4"
// максимальное количество одновременных запросов при получении объектов в канбан-виде
"MaxDegreeOfProjectGroupStatistic": "4"
// максимальное количество одновременных запросов при получении
сводных данных по объектам в канбан-виде
}
}
Включать настройку UseFilterOptimizationForProjectStatisticsList (значение true) следует при долгом получении сводных данных по объектам в канбан-виде. Рекомендуется включать эту настройку при включении настройки UseFilterOptimizationForProjectsList.
Если наблюдается большое количество запросов в БД, что приводит к неудовлетворительной работе всего инстанса, возможно ограничить количество одновременно отправляемых запросов для получения объектов и сводных данных по ним, установив оптимальное значение в MaxDegreeOfProjectGroup и MaxDegreeOfProjectGroupStatistic соответственно.
Допустимые значения:
Для отключения отображения данных при просмотре объектов с разбивкой по стадиям (количества объектов по каждой стадии и других настроенных данных) в appsettings.json задайте настройку DisableStatisticInKanbanView:
"Custom": {
...
"DisableStatisticInKanbanView": true
}

Отключение отображения настроенных данных при просмотре объектов с разбивкой по стадиям рекомендуется применять в качестве временного решения, если на инстансе наблюдаются большие задержки при открытии объектов в режиме просмотра с разбивкой по стадиям, и при этом возникает большая нагрузка на CPU SQL-сервера.
Для изменения таймаута запроса на получение статистики по выводу дел в стадии и отображению числовых значений (по умолчанию — 1 минута) укажите в файле appsettings.json в настройке StatisticInKanbanViewRequestTimeout новое значение времени:
{
"Custom": {
...
"StatisticInKanbanViewRequestTimeout": "00:01:00"
}
}
После истечения срока запроса, если не пришел ответ от сервера:
Для настройки ограничения количества объектов в календаре дополните секцию Custom файла appsettings.json параметром MaxObjectsInCalendar:
"Custom": {
"MaxObjectsInCalendar": 500,
}

Возможен незначительный рост потребления CPU со стороны APP-сервера при частых обращениях к календарю — рост потребления CPU может достигать 10%. В будущих релизах мы планируем провести оптимизацию работы календаря, чтобы исключить рост потребления ресурсов при значительном увеличении объектов и/или запросов к календарю.
Оптимизация запросов по пересчету прав частичного просмотра для папок и проектов с большим количеством вложенных дел включается через существующую настройку в файле настроек конфигурации appsettings.json (включена по умолчанию):
UsePartialViewAutosharingOptimization — включить оптимизацию автоматического совместного использования частичных представлений для папок и проектов (Enable optimization of partial view autosharing for folders and projects): тип настройки — bool, значение — true.
Включение настройки рекомендовано при следующих характеристиках:
Для регулирования размера пачки дел, которые отправляются на пересчет прав в файле настроек конфигурации appsettings.json доступен параметр UserFieldPermissionRecalculateBatchSize (значение по умолчанию — 100):
{
...,
"Custom": {
"UserFieldPermissionRecalculateBatchSize": 500
},
...
}
Для реализации механизма проверки наличия дубликатов при создании или изменении карточки объекта предусмотрены следующие ограничения настроек дедупликации:
{
// "Custom": { /* ... properties ... */},
"ObjectType": {
// Other properties
"MaxDeduplicationUniqueFields": 20
// по умолчанию 20 полей
}
}

Ограничение распространяется как на поля, добавленные в Базовом режиме, так и на поля, добавленные в Продвинутом режиме в формате: @Название_поля (также учитываются уникальные поля, указанные в Продвинутом режиме).
{
"Custom": {
"MaxSizeDuplicateObjectList": "10"
// по умолчанию 10 дел
}
}
{
"Custom": {
"MaxAllowedFilterFields": "20"
// по умолчанию 20 уникальных полей
}
}

Ограничение распространяется как на поля, добавленные в Базовом режиме, так и на поля, добавленные в Продвинутом режиме в формате: @Название_поля (также учитываются уникальные поля, указанные в Продвинутом режиме).
Поскольку начиная с 77 версии База знаний и Реестры являются объектами:
В файле конфигурации appsettings.json вы можете настроить:
{
...,
"Custom": {
"PasswordResetLinkExpirationHours": 5
},
...
}
{
"Custom": {
"UserIsOfflineTimeout": "00:10:00",
// Время бездействия пользователя,
после которого пользователь будет считаться Offline.
По умолчанию 10 минут.
"CheckUserOnlineInterval ": "00:01:00"
// Настройка срабатывания периодической фоновой задачи,
которая переводит пользователя в Offline,
если он не был активен больше чем UserIsOfflineTimeout.
По умолчанию каждую 1 минута.
"PingPeriod": 60000
// Интервал в миллисекундах, с которым Web клиент отправляет
ping запрос для продления сессии пользователя и его online статуса.
По умолчанию каждую 1 минуту.
}
"Custom": {
"UsersExcelExportRowsLimit": 5000, // по умолчанию 5000
"UsersCsvExportRowsLimit": 5000 // по умолчанию 5000
}
"Custom": {
"MaxAllowedUsersCountInSelectedGroups": 1000
}

Не рекомендуем превышать значение по умолчанию, поскольку при превышении максимального количества значений запрос фильтрации завершиться ошибкой с кодом 400 — BadRequest.
{
"Custom" :
{
"PermissionsListMode" : "Legacy" | "Duplicate"
}
}

Настройку SplitRecalculatePermissionsUserGroup необходимо использовать в совокупности с подключением дедупликации для очереди recalculate_permissions (RabbitMQ).
"RoleLoginRestriction": {
"IsEnabled": true,
"AllowedRoleNames" : [
"RoleName1",
"RoleName2"
]
}

Настройка недоступна при включенной интеграции с Active Directory.
Для включения или отключения настройки (по умолчанию включена), которая позволяет выгружать гиперссылки на объект при экспорте кастомного отчета в XLSX выполните скрипт в БД инстанса:
UPDATE "CaseMap"."Settings" SET "Value" = 'true' /*'false'*/ WHERE "Key" = 'ExportExcelLinkEnabled'
Для отображения ссылок на объект в настроенных системных отчетах добавлены дополнительные настройки столбцов для отображения отчет. В таблице с метаданными столбцов отчета присутствуют следующие колонки:
Пример запроса добавления метаданных столбцов со ссылками на объект:
INSERT into "CaseMap"."FixedColumns" ("Order", "Name", "Type", "FixedReportId", "IsHidden", "LinkType")
VALUES
(0, 'ProjectId', 'Guid', fixedReportId, true, null),
(1, 'ProjectName', 'String', fixedReportId, false, 'ProjectLink');
UPDATE "CaseMap"."FixedColumns"
SET "EntityIdColumnId" = (SELECT "Id" FROM "CaseMap"."FixedColumns" WHERE "Name"
= 'ProjectId' AND "FixedReportId" = fixedReportId)
WHERE "Name" = 'ProjectName' AND "FixedReportId" = fixedReportId;
Для настройки вида отображения значений полей с типом Логическое и Чекбокс в скачанном отчете в формате XLSX или CSV используется настройка IsExportExcelBooleanValuesEnabled (по умолчанию включена) в секции Custom файла appsettings.json:
{"Custom": {
"IsExportExcelBooleanValuesEnabled": true
}
}
Для настройки ширины колонок в системных отчетах с предпросмотром в таблице CaseMap.FixedColumns в поле Size укажите ширину колонок в пределах от 1 до 6. Если значение ширины колонки для системных отчетов не задано, параметр ширины колонки будет установлен по умолчанию, в зависимости от содержимого колонки (аналогично кастомным отчетам).
Для версионирования системного отчета, если эти настройки должны переноситься с помощью модуля, измените значение в поле Version: GUID в таблице CaseMap.ReportMetatadas для записи нового идентификатора отчета:
update "CaseMap"."ReportMetadatas"
set "Version" = NEWID() -- or uuid_generate_v4() for PostgreSQL
where "Id" = 'report_id'
Контролировать и инкрементировать версию отчета в процессе разработки и при поддержке системного отчета необходимо при добавлении или изменении:
Доступно выбрать формат скачивания системных отчетов без предпросмотра (*.xslx или *.csv):
При скачивании больших системных отчетов рекомендуется:
UPDATE [CaseMap].[FixedReports]SET [ExportFormat] = 1WHERE [Id] = '<Id системного отчета>'
Для настройки интеграции справочников с другими системами/приложениями используйте дополнительные значения в пользовательских справочниках:
...
"Fields": {
"Key1": "Value1",
"Key2": "Value2",
...
}
При запросе на просмотр значений справочника через API (GET) доступно отфильтровать получаемые значения справочника по комбинации Key-Value:

При получении значений справочника Field-данные передаются только в приватном API. Поиск доступен как и в пользовательских, так и в системных справочниках. При поиске по Key-Value ищется точное совпадение. Поиск значений по Field реализован только для приватного API (POST).
При получении значений справочника через API в ответе отображаются все JSON-объекты, если они добавлены к значениям справочника. При добавлении/редактировании значения справочника через API можно добавить дополнительный параметр в JSON (не обязательный параметр):

Запись Field-данных доступна только для приватного API.
Для включения почтовых уведомлений в файле appsettings.json параметру SendEmailNotification присвойте значение true.
Для доставки уведомлений и приглашения новых пользователей:
Минимальные настройки:
"SmtpServers": [
{
"Id": "Corporative",
"FromName": "Casepro",
"Server": "ip-or-name-of-smtp-server",
"Port": "25",
"From": "noreply@casepro.pro"
}
]
Чтобы настроить получение и отправку форматированных полей для всей Системы, в настройках приложения в appsettings.json измените значение флага IsFormattedTextInPublicApiEnabled (bool):
В методах публичного API для работы с сущностями с форматированными полями за отображение форматированного поля отвечает необязательный параметр IsFormattedTextEnabled:
Для настройки формирования ссылки, присутствующей в значении форматированного поля при выводе ее в PlainText (в отчетах, при выводе в шаблоны документов и участвует в условиях фильтрации, условиях видимости, доступности и фильтрах сценариев автоматизации) в настройках приложения в appsettings.json укажите значение параметра LinkFormatInPlaintText:
При изменении формата ссылки (значение параметра LinkFormatInPlaintText) не выполняется миграция данных — т.е. старые данные, когда в PlainText уже отображается ссылка в формате, который был установлен ранее, данные не обновятся до перезаписи сущности с форматированным полем.
При получении через публичный API данных поля, содержащего ссылку, и при выключенном форматировании (IsFormattedTextInPublicApiEnabled = false или IsFormattedTextEnabled = false) и последующей записи полученных значений допускается потеря информации о ссылке или о заголовке ссылки для форматов ссылки Text и URL соответственно.
В файле конфигурации appsettings.json в секции Custom вы можете определить следующие настройки импорта объектов и участников (параметры поддерживают переопределение):
{
"Custom": {
// ... other settings
"ImportTemplateFileValueSeparator": ",",
// символ разделителя значений для шаблона импорта. По умолчанию ','
"ImportObjectsTimeout": "00:00:00",
// таймаут импорта данных из CSV файла. По умолчанию нет.
"ImportObjectsBatchSize": 1000,
// Количество строк в каждой партии.
В конце каждой партии строки в партии отправляются на SQL сервер.
Используется в конфигурации с MS SQL. По умолчанию 1000.
Так же этот параметр используется для выборки импортированных данных по пачкам, для дальнейшей публикации их в брокере.
"ImportObjectsMaxRowsInImportFile": 10000,
// Допустимое максимально количество строк в CSV файле с данными.
Если в файле больше заданного количества, импорт не производиться.
0 - выключает ограничение. По умолчанию 10000
"ImportObjectsRepeatableValuesSeparatorInImportFile": ";"
// символ разделителя значений для значений мультистрок/ мультиблоков.
По умолчанию ';'
}
}
Поскольку при импорте записываются выполняемые операции, для успешного формирования итогового файла логов в конфигурационном файле nlog.config обязательно должна быть объявлена переменная baseLogDirectory в секции nlog:
<nlog <!-- .... --> >
<variable name="baseLogDirectory" value="${basedir}logs/${hostRender}" />
В секции Custom файла настройки конфигурации доступен параметр ImportObjectsScheduledStopDelay, где вы можете указать время, по истечении которого сессия импорта будет автоматически завершена:
При автоматическом завершении сессии импорта:
Если в результате автоматического завершения сессии импорта произошла ошибка, информация об ошибке будет записана в общем логе приложения:
"Custom": {
"ImportObjectsScheduledStopDelay": "01:00:00" //По умолчанию параметр не задан, автоматическое завершение отключено.
}
В RabbitMQ предусмотрена отдельная очередь сообщений с именем ImportObject и категорией import_object для асинхронного создания объектов.
При необходимости изменения параметров очереди добавьте настройки в секцию OldRabbitMQ::Topology:
Пример настройки очереди для секции OldRabbitMQ::Topology:
"Topology": {
/* ... other settings ... */
"Queues": {
/* ... other queues ... */
"ImportObject": {
"Workers": {
"Count": 1,
"Retry": {
"Attempts": 1
}
}
}
}
}

Импорт объектов является ресурсозатратной операцией, которая может оказывать влияние на работу всей системы в целом. Увеличение количества обработчиков позволит ускорить работу импорта, но может оказать негативный эффект на операционную деятельность пользователей приложения. Не рекомендуется задавать количество обработчиков больше, чем количество физических ядер CPU на сервере.
Также предусмотрена возможность настройки очереди для секции OldRabbitMQ::Queues, но настоятельно рекомендуем использовать секцию OldRabbitMQ::Topology:
{
"Host": "%host%",
"Category": "import_object",
"Type": "%type%",
"Handler": "%handler%",
"Name": "%host%.%category%",
"Workers": {
"Count": 1,
"Retry": {
"Attempts": 1
}
},
"Arguments": {
"x-consumer-timeout": 7200000,
"x-queue-mode": "lazy"
},
"Final": true
}
В файле настроек приложения appsettings.json вы можете задать следующие значения:
{
"Custom": {
"DashboardResultCommandTimeout": "60",
// Таймаут в секундах для получения значений для отчетов из дашборда. По умолчанию 60 секунд
"DashboardReportDateCacheLiveTime": "00:01:00"
// Время жизни кэшированных значений
},
"Dashboard": {
"DashboardIsDisabled": "false",
// Отключение отображения дашбордов как пунктов меню в основном приложении.
При этом на странице администрирования настройка дашбордов и их список останется доступным
"DashboardBlockMaxLength": "20"
// Ограничение на количество блоков, которые можно добавить в дашборд. По умолчанию 20
}
}
Дополнительные статьи:
В файл настройки конфигурации в секции Custom доступно разрешить редактирование Node.js скриптов с помощью параметра AllowEditNodeJsScripts:

Настройка недоступна для SaaS-инстансов в целях безопасности.
Локальная отладка js-скриптов позволяет выгружать файл с путями и ключами доступа к конкретному инстансу, и сразу в процессе написания скрипта проверять его работоспособность именно на целевом инстансе Case.one, чтобы учесть все нюансы и сразу обнаружить неточности.
Для запуска локальной отладки js-скриптов:
SET CASEONE_MAIN_SCRIPT=test.jsnode caseone.system.scriptRunner.js
test.js — пример отлаживаемого скрипта:
export async function main(context) { console.log(context.BaseUrl);}
Пример структуры

Запуск сценариев автоматизации через RabbitMQ включен по умолчанию — при возникновении в системе события в RabbitMQ автоматически ставится задача WorkflowService.RunAutomationScriptsSync по запуску сценариев в очередь automation_scripts.
Включение запуска сценариев через RabbitMQ:
{
"Custom": {
// ...
"AutomationScriptsUse RabbitMQ": true// false — сценарии запускаются как раньше,
true — сценарии запускаются через RabbitMQ (значение по умолчанию)
}
}
Через RabbitMQ доступно указать количество узлов, которые будут обрабатывать очередь со сценариями автоматизации:
{
"Custom": {
// ...
"AutomationScriptsWorkerCount": 24
// по умолчанию равняется кол-ву ядер процессора
}
}
Для последовательного и синхронного выполнения всех операторов сценария, у которых задана нулевая задержка (кроме оператора Уведомить), укажите настройку в БД для конкретного сценария следующим SQL-скриптом:
update
CaseMap.AutomationScripts
set
IsSequential = 1 -- 1 — для включения последовательного выполнения, 0 — для отключения
where
Id = '...'-- указать идентификатор нужного сценария
Также доступно указать настройку в appsettings.json для включения последовательного выполнения для всех сценариев:
{
"Custom": {
// ...
"AutomationScriptsSequentialMode": "AllScripts"// значение по умолчанию — ConfiguredScripts,
последовательность определяется флагом в БД отдельно для каждого сценария;
чтобы запретить последовательное выполнение глобально, нужно указать Disabled
}
}

Внимание! Включение последовательного выполнения сценария рекомендовано только для тех сценариев, где нарушение последовательности критично, т.к. оно увеличивает время выполнения сценария.
Для включения логирования выполненных шагов сценариев необходимо включить трассировку в секции rules в nlog.config для записи идентификаторов сработавших сценариев и выполненных шагов:
<logger name="WorkflowTrace" appendTo="f" minlevel="Trace" />
Для предпросмотра сформированных счетов используется Libre Office.

Установку Libre Office необходимо выполнить самостоятельно, если Libre Office не входит в Docker. Установка Libre Office не является обязательной и не влияет на остальной функционал Case.one.
Для установки Libre Office выполните следующие действия:
"LibreOfficeExePath": "/opt/libreofficeN.N.N/program/soffice"
N — номер версии.

Поддерживается работа с Libre Office до версии 25.2.2.
Для повышения отказоустойчивости Case.one, упрощения управления документами и улучшения производительности добавлена поддержка Object storage S3.
Для переключения на S3 добавьте в appsettings.json в секцию Custom значение "StorageProvider": "S3":
"Custom": {
"StorageProvider": "S3"
}
После значения "StorageProvider": "S3" укажите параметры S3 в секции S3:
"Custom": {
"StorageProvider": "S3"
}
"S3": {
"Endpoint": "https://storage.yandexcloud.net",
"Key": "SECRET_KEY",
"Secret": "SECRET",
"BucketName": "%name%",
"Region": "ru-central1",
"Prefix": "%name%/example"
}