Журнал технических изменений¶
Версия 6.12
Удаленные API¶
Удалено Deprecated API:
TagsRestService#deprecatedDelete(DeleteTagsRequestRO):
DELETE /v2/core/tags/delete
DELETE /v2/search/tags/delete
DELETE /v1/marks/tags/delete
UserNotificationsRestService#getUserNotifications:
/v2/core/user/notifications/{p:/?}{date: (([0-9T-:.]{23})?)}
RoleRestService#getAllSecurityLabels (до этого был скопирован в SecurityLabelRestService):
/v2/core/security/role/get-all-security-labels
Удалены следующие методы и поля:
XLSXProcessor#RELATION_TITLE_LABEL
XLSXProcessor#ENTITY_TITLE_LABEL
XLSXProcessor#LOOKUP_ENTITY_TITLE_LABEL
XLSXProcessor#COMPLEX_TO_NESTED_DISPLAY_NAMES_DELIMITER
XLSXProcessor#buildSheetName
XLSXProcessor#identifySheet
XlsxImportState#withNested
ClassificationImportXlsxRenderingComponent#identifySheet
ClassificationImportXlsxRenderingComponent#isEmptyRow
ClassificationImportXlsxRenderingComponent#convertToString
ClassificationImportXlsxRenderingComponent#getExcelCoordinates
ClassificationImportXlsxRenderingComponent#normalizeTo
Покрытие тестами класса SearchFormFieldDeserializer¶
Добавление searchType по умолчанию для запросов без searchType. Для запроса имеющего узел value/values устанавливается searchType = EXACT, для запроса имеющего узел range устанавливается searchType = RANGE.
Запрет передачи значения null в качестве имени искомого атрибута name: null.
Замена npe при невалидном значении типа искомого атрибута type: someWrongType на читаемый JsonMappingException с сообщением "Types other then simple types [ someWrongType ] aren't supported.".
Замена IllegalArgumentException при передаче невалидного типа поиска searchType: someWrongType на читаемый JsonMappingException с сообщением "Unsupported search type [ someWrongType ]".
Обработка исключения отсутствия всех значений value, values и range. Если в запросе нет ни value, ни values, ни range, то будет брошен JsonMappingException с сообщением "Requires single 'value' or 'value_s_' or 'range' node.".
Запрет одновременного использования флагов like, startWith, fuzzy, morphological. Можно установить в true только один из данных флагов, т.к. каждый из флагов переписывает searchType.
Установка searchType == EXIST в случае когда запрос делается по values, без searchType и values is Null.
Понижение приоритета флага like. Если все значения запроса пусты, searchType устанавливается в EXIST, а значение like игнорируется.
При searchType == RANGE, если значение range отсутствует, бросается JsonMappingException с сообщением "Range search type must contain a range node".
Если range: null, бросается JsonMappingException с сообщением "Range node must be an array". range всегда должен быть массивом.
Если searchType == START_WITH или searchType == MORPHOLOGICAL или searchType == LIKE, но тип искомого значения не равен STRING, CLOB или BLOB, бросается JsonMappingException с сообщением *"START_WITH/MORPHOLOGICAL/LIKE search type cannot be applied to a value of type typename".
Прочие изменения:
AttributeUtils#toDate, AttributeUtils#toTimestamp, AttributeUtils#toTime, AttributeUtils#toInstant исправлено внутреннее сообщение сервера, в соответствии с сообщением из файлов properties.
Исправление срабатываний анализатора Svacer¶
Возвращаемый тип DataTableFormatter#zip изменен с InputStream на File, т.к. InputStream может быть не закрыт в дальнейшем.
Новая проверка состава Бизнес ключа в процессах¶
Убрана проверка, которая не позволяла хранить в ключе ничего кроме namespace и draftId.
Добавлена проверка на корректность, в случае, если у БП есть linkedSubjectId и linkedTypeName тогда ключ обязательно должен начинаться c namespace и draftId, далее может быть что угодно, главное присутствие namespace и draftId.
Пример: register:test:draftId:148:кастомноеполе1:кастомноеполе2
Переделана логика нахождения процессов по бизнес ключу: теперь процесс находится по draftId внутри бизнес ключа, так как в бизнес ключе теперь могут быть пользовательские поля.
Внутренние изменения логики сравнения записей¶
Реализован новый стор для сравнения записей - RecordsCompareStore.
В нем посредством user-exit-a UEInnerCompareStore подключаются внутренние сторы сравнения. Каждый внутренний стор реализует логику сравнения для своего пространства имен: генерирует колонки, строит diff-ы, определяет внешний вид колонок.
Колонки в сравнении делятся на два типа: мета-колонки и дата-колонки. Мета-колонки отображаются в панели настроек, а дата-колонки в самой таблице. На одну мета-колонку может приходиться несколько дата-колонок либо дата-колонок может не быть вовсе (пример: колонки классификатора).
Поскольку каждое окно сравнения записей может иметь уникальные методы загрузки данных и уникальное отображение ячеек таблиц, был реализован глобальный интерфейс UniverseCompare, который хранит следующие типы:
ICompareTypeArgsMap - Объект, объявляющий тип сравнения (ключ объекта) и параметры, использующиеся для загрузки данных этого типа сравнения;
INamespaceLoadResultMap - Объект, объявляющий тип возвращаемых после загрузки значений для каждого пространства имён.
CompareType - тип, содержащий все виды сравнения.
Тип сравнения - один из параметров конструктора RecordsCompareStore. Каждый тип сравнения имеет свои аргументы загрузки данных. В параметры конструктора стора сравнения попадают не уже загруженные записи, а массив параметров загрузки сравниваемых записей.
Типы из UniverseCompare используются в реализации менеджера методов сравнения CompareRecordMethodsManager. Данный менеджер регистрирует для каждого пространства имён каждого типа сравнения:
загрузочные функции;
рендеры ячеек;
функцию, определяющую может ли в таблице сравнения быть выбран какой-либо dataPath.
В результате, при инициации стор сравнения RecordsCompareStore проходит по всем зарезолвленным UE, создает вложенные сторы сравнения, и загружает данные посредством загрузочных методов, зарегистрированных в CompareRecordMethodsManager.
Пункт главного меню "Процессы"¶
Были разделены пути для "Процессов" и "Задач".
module-ee/workflow/src/index.ts
Для процессов - 'ProcessesPage';
Для задач - 'TasksPage';
routeFunc и routeAccessor, так же разделены.
Отображение системной информации при сравнении записей¶
RegisterCompareStore.ts, LookupCompareStore.ts - данные получаются при помощи getValueByPath()
INamespaceLoadResultMap - изменен тип register: IRecordEntity на:
register: {
dataRecord: IRecordEntity;
recordKeys?: RecordKeys
};
InnerCompareCtorData - добавлен флаг showSystemInfo.
SystemRow.ts - константы для колонки системной информации.
Отображение "Etalon ID" связанной записи в сравнении связей¶
RelationCompareStore.ts
Был добавлен метод получения EtalonIdTo - public getEtalonIdTo (relation: AbstractRelation): string | undefined.
InnerCompareStore.ts
Добавлен новый параметр в ColumnView - getColumnHeader?: (metaColumn:ISearchColumn,columnName:string)=>ReactNode;
AbstractRelationInnerCompareStore.ts
Добавлен метод getColumnHeader
Добавлен новый компонент RelationCompareColumnHeader для отображения подсказки.
Уведомление состояния записи¶
Изменился формат сообщения meta-driven, уведомления о вставке и удалении.
Сортировка списка значений перечисления¶
@universe-platform/model
В класс ModelCollection был добавлен метод sort для сортировки элементов коллекции.
@universe-platform/uikit
В компоненте HeaderCell иконки фильтрации и сортировки отображаются сразу после названия колонки, а не прижимаются к правой границе.
@universe-platform/meta
В компоненте EnumerationEditorForm добавлена возможность сортировки значений выбранного перечисления по id и отображаемому имени.
Доработка отображения cron-выражений на экране операций¶
@universe-platform/cron
Добавлен компонент ScheduleFieldInput, который отрисовывает уже присутствующий в этом пакете ScheduleInput вместе с названием поля.
@universe-platform/model-form
У компонентов ModelField и ModelForm добавлена возможность менять вид отображаемых полей при помощи свойства fieldRender.
Операция мониторинга расхождений в данных¶
Добавлена новая операция - "Операция мониторинга расхождения в данных".
Добавлен новый модуль com.universe.mdm.job.data.difference
.