Список изменений в системе версии 3.15.0

Критичные изменения

1. Изменен макет страниц ELMA. В связи с этим необходимо:

  • если у вас есть кастомные представления, то их нужно проверить на предмет корректного отображения в новом макете.
  • если был изменен файл Layout.cshtml, то нужно переопределить его с использованием нового.
    Для этого:
    - Скопируйте вновь файл ..\<Общая папка с файлами системы ELMA>\Web\Themes\ELMATheme\Views\Layout.cshtml
    - Вставьте в ..\<Общая папка с файлами системы ELMA>\UserConfig\WebApplication\Themes\ELMATheme\Views ранее скопированный файл Layout.cshtml и откройте его с помощью текстового редактора и внесите необходимые изменения.
    Например, если была изменена иконка главной главной страницы, то в данном файле после строки <body id="bodyelement"> необходимо добавить следующий код:
    <style type="text/css">
        #page_start_button_container
        {
        background-image:url(/Custom/Content/Images/StartButtonSprite.png);
        }
    </style>
    После внесения всех изменений необходимо сохранить текстовый файл.
    - Обновите страницу браузера.

2. Реализован переход на .NET Framework 4.6.2. Переход позволит использовать новые возможности языка C#. Полный список изменений .NET Framework 4.6.2 по сравнению с .NET Framework 4.0 можно посмотреть в официальной документации по .Net Framework. Полная информацию по совместимости приложений .NET Framework можно посмотреть здесь.

Новый функционал

Реализован функционал для поиска возможных дубликатов сущностей с референсной реализацией для типа ContractorLegal.

1. При создании сущностей, для которых реализован скоринг при открытии формы сущности, на которую добавлена «Панель скоринга» и существуют какие-либо совпадения в соответствии с настройками скоринга, отображается соответствующая таблица, содержащая сущности, с которыми по тем или иным полям совпадает данная сущность, а также кнопки, позволяющие:

  • привязать сущность как «дубль» к какому-либо объекту;
  • пометить сущность как «не дубль»;
  • повторить проверку на дубли (например, при изменении настроек скоринга).

2. Для веб-части добавлена панель скоринга (ViewItem) для отображения списка возможных совпадений.

3. Добавлен сервис DuplicateService обрабатывающий вновь созданные сущности на предмет дублей и вызывающий соответствующие точки расширения.

4. Добавлены точки расширения для реализации поиска дублей: AbstractScoringSettings, AbstractScoringStepSettings, AbstractDuplicateHandler.

Использование

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

Настройки скоринга осуществляются в разделе Администрирование – Базовые приложения – Глобальные настройки скоринга. В данном разделе отображается список всех сущностей, для которых реализован скоринг. Также, на данной странице, в верхнем меню находится кнопка, позволяющая выключить или включить скоринг на глобальном уровне.

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

Поля для сравнения должны совпадать по типу и могут настраиваться как в рамках того же типа сущности, так и среди других типов, чьи GUID указаны в переопределенном методе GetPossibleDuplicatesUids() точки класса, унаследованного от AbstractScoringSettings.

Панель скоринга

Отображение панели скоринга в конкретной сущности реализуется путем добавления элемента конструктора форм «Панель скоринга» на его форму просмотра.

Реализация для нового типа

Для реализации скоринга по какому-либо типу необходимо выполнить следующие действия.

1. Создать 3 класса, унаследовав их от соответствующих компонентов и переопределив методы:

  • AbstractDuplicateHandler – содержит один переопределяемый метод, возвращающий UID типа, для которого мы реализуем скоринг.
  • AbstractScoringSettings – содержит метод GetPossibleDuplicatesUids(), возвращающий список UID типов среди которых будет осуществляться поиск совпадений, поле TypeUid, возвращающий GUID проверяемого типа и ScoringSettingsString, возвращающее строку-ключ, по которому настройки скоринга будут храниться в базе.
  • AbstractScoringStepSettings – содержит метод Check (Guid typeUid), позволяющий проверить совпадение входящего GUID с GUID проверяемого типа, а также поле ScoringStepString, содержащее строку-ключ, по которому настройки шагов будут храниться в базе.

2. В веб части перейти в настройки скоринга для нового типа (Администрирование – Базовые приложения – Глобальные настройки скоринга – «Тип») и осуществить настройку полей для скоринга и шагов скоринга.

3. В дизайнере ELMA добавить на форму просмотра данной сущности элемент конструктора форм «Панель скоринга».

4. При необходимости поддержки сравнения для отдельных типов полей создать реализацию точки расширения IPropertyDuplicateFilter, в которой реализовать свой сценарий сравнения в методе GetDuplicatesForProperty() и проверку на тип поля в методе Check().

Изменения интерфейсов пользователя

1. Изменен интерфейс страницы ELMA

  • Кнопка для «сворачивания» левого меню перенесена в нижнюю часть левого меню.
  • Верхнее меню «сворачивается» при прокрутке экрана.
  • Добавлена кнопка «Еще... » для скрытия пунктов верхнего меню, которые не влезают на экран пользователя.
  • Добавлена прокрутка для всплывающих окон.

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

Техническая оптимизация

1. Реализован доступ к контенту BinaryFile-ов

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

Основной способ доступа к контенту BinaryFile теперь – это потоки. В связи с этим в системе были переделаны почти все места, где шло обращение через ContentFilePath. Потоки доступны через сервис IBinaryFileStreams.

Создание BinaryFile-ов

Как и прежде, доступен прежний способ создания файлов, когда вызывается конструктор и устанавливается свойство ContentFilePath.

var file = new BinaryFile
{
ContentFilePath = @"C:\Path\to\my-file.pdf",
// тут остальные свойства
};

Появился конструктор, принимающий местоположение контента, но его область применения преимущественно только в провайдерах.

BinaryFileBuilder

Предпочтительным вариантом создания файла с точки зрения клиента провайдера является BinaryFileBuilder: есть возможность установить часто используемые свойства, передать контент в виде файла, потока или массива байт или ссылки на местоположение. Работает и в сценариях.

Пример класса билдера, который расскажет о его возможностях:

public class BinaryFileBuilder
{
public BinaryFileBuilder Uid(Guid uid);
public BinaryFileBuilder Name(string name);
public BinaryFileBuilder ContentType(string contentType);
public BinaryFileBuilder Created(DateTime createDate);
public BinaryFileBuilder Content(byte[] contentBytes);
public BinaryFileBuilder Content(string contentFilePath, bool deleteContentFileAfterSave = false);
public BinaryFileBuilder Content(Stream contentStream, bool autoCloseStream = false);
public BinaryFileBuilder Content(Uri contentLocation, long contentLength, uint contentCrc);
public BinaryFile Build();
}
public BinaryFileBuilder Content(Uri contentLocation, long contentLength, uint contentCrc);
    public BinaryFile Build();
}

Билдер вызывается через методы BinaryFile.CreateNew() и BinaryFile.CreateFrom(). Второй метод позволяет использовать существующий BinaryFile в качестве шаблона для свойств (но контент в эти свойства не входит).

Пример:

return BinaryFile.CreateNew()
.Name(SR.T("Штрих-код.bmp"))
.ContentType("image/bmp")
.Content(bitmapStream)
.Build();

2. Публичный метод EleWise.ELMA.Runtime.Db.Migrator.Framework.ITransformationProvider.CutCommentsFromCommandtext(string commandText) – помечен устаревшим. Защищённый (protected) метод EleWise.ELMA.Runtime.Db.Migrator.Providers.TransformationProvider.CutComments(string commandText) – удален.

3. Добавлен сервис загрузки метаданных процесса в Runtime - IWorkflowMetadataLoaderService

Загрузка метаданных происходит:

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

4. Улучшено масштабирование среды исполнения процессов за счёт возможности использовать фоновые операции (ФО) в пользовательских сценариях. Созданы реализации фоновых операций "HTTP запрос" и "Получить BinaryFile".

5. Реализована работа распределенным файловым хранилищем. Данное изменение добавляет провайдер распределённого хранения файлов в систему, который оперирует точками хранения контента. Провайдер может содержать одну или несколько точек хранения. При работе все операции над контентом файлов делегируются им.

6. Оптимизирована работа с историей.

Остальное

1. Добавлен интерфейс пула потоков IElmaThreadPool.

2. Для класса ThreadSubPool добавлен конструктор ThreadSubPool(string appSettingsKey, int minThreadCount, string logPrefix, bool useElmaThreadPool, string elmaThreadPoolName), позволяющий включить использование встроенного пула потоков взамен системному.