Журнал технических изменений

Версия 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.