Укажите особенности клиентских сценариев элма365

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

Введение в написание сценариев

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

С версии 3.2.9.20379 в системе доступен ELMA API. Подробнее…

Начало работы. Ваш первый сценарий

Перейдем сразу к делу. Для успешного обучения лучший метод – это практика.

Работа со сценариями ведется в Дизайнере ELMA. Сами сценарии используются во многих местах системы, наиболее же распространенным является использование их в операциях Сценарий бизнес-процессов.

Создадим наш первый сценарий. Для этого создадим бизнес-процесс и назовем его «Калькулятор». Имя класса для работы с контекстными переменными – P_Calculator. Также желательно задать соотвествующие названия классов для метрик процесса и для экземпляра процесса. Не забывайте, что классам, переменным, методам рекомендуется давать английские названия. Использование транслитерации и названий символов русского языка нежелательно, поэтому лучше сразу приучать себя к использованию английского языка в коде программы.

В созданный процесс добавим следующие сущности:

  • динамическая зона ответственности (так, чтобы все пользователи могли запускать процесс);
  • контекстные переменные:
    • Поле ввода (InputField) – дробное число, не пустое, по умолчанию = 0;
    • Текущий результат (CurrentResult) – дробное число, не пустое, по умолчанию = 0;
  • на диаграмме процесса расположите одну пользовательскую задачу и одну операцию Сценарий. В пользовательской задаче выведите контекстные переменные:
    • Поле ввода – для редактирования;
    • Текущий результат – для чтения.

Рис. 1. Графическая модель процесса «Калькулятор»

После этого можно приступать к написанию самого сценария. Для этого откройте настройки операции Сценарий и добавьте новый метод – Calculate. Текст сценария пока не заполняйте, нажмите кнопку Ок и потом на той же вкладке в настройках кнопку Перейти. При этом на карточке процесса откроется другая вкладка – Сценарии. На этой вкладке расположены все сценарии процесса. На данной вкладке используется компонент редактора SharpDevelop, он позволяет использовать автодополнение кода, что существенно упрощает разработку.

Для каждого процесса создается отдельный класс, наследующий базовый класс EleWise.ELMA.Workflow.Scripts.ProcessScriptBase<Context> (где Context – это класс контекста процесса, вы можете увидеть строку using Context = EleWise.ELMA.Model.Entities.ProcessContext.P_Calculator). В этом классе методы представляют собой отдельные сценарии. В нашем случае создается пустой метод Calculate, в который передается контекст процесса context:

public void Calculate(Context context)
{

}

Для начала сложим текущее значение и то, что пользователь ввел в поле ввода:

public void Calculate(Context context)
{
context.CurrentResult = context.CurrentResult + context.InputField;
}

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

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

Но это, конечно, очень простой пример. Он показывает самые базовые операции, и цель его в том, чтобы познакомить пользователя с принципом работы со сценариями.

Второй пример сценария. Работа с объектами

Наиболее интересными, конечно, являются возможности по работе с объектами системы (иногда их называют сущности). Создадим в Дизайнере ELMA свой собственный объект Питомец (Pet) (будем вести учет домашних питомцев наших клиентов) в группе Работа с клиентами. Добавим в объект следующие свойства:

  • Имя (Name) – тип Строка, обязательно для заполнения, является наименованием, отображать в таблице. Рекомендуется добавлять поле с наименованием через добавление стандартных полей в справочнике. Для этого необходимо нажать правой кнопкой мыши в область, где описаны поля объекта, и выберать в контекстном меню пункт Добавить свойства по умолчанию, но в нашем примере сделаем это вручную;
  • Вид (Kind) – тип Выпадающий список: Кошка, Собака, Попугай, Рыбка, Черепаха, Змея;
  • Возраст (Age) – тип Целое число, может иметь пустое значение;
  • Хозяин (Master) – ссылка на объект Контакт, обязательно для заполнения, отображать в таблице.

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

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

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

  1. Создание записи объекта в сценарии.
  2. Проверка на наличие записи по определенному условию.

Создание записи объекта

Для выполнения первой части нам необходимо создать процесс «Добавление нового питомца» (NewPetAdding). Создадим для данного процесса следующие контекстные переменные:

  • Контакт (Contact) – ссылка на объект Контакт, является входной;
  • Имя питомца (PetName) – тип Строка;
  • Вид питомца (PetKind) – тип Выпадающий список: Кошка, Собака, Попугай, Рыбка, Черепаха, Змея;
  • Возраст питомца (PetAge) – тип Целое число;
  • Новый питомец (NewPet) – ссылка на объект Питомец;
  • Ошибка заполнения (FillingError) – тип Строка (нужна для вывода ошибки, если не выполнено какое-то условие).

После этого расположим на графической модели процесса 2 пользовательские задачи и один сценарий.

Рис. 2. Графическая модель процесса «Добавление нового питомца»

В задаче «Ввести данные о питомце» добавим на форму задачи переменные Контакт, Имя питомца, Вид питомца, Возраст питомца, доступные для редактирования. В задаче «Проверить» выведем все переменные контекста только для чтения. Обратите внимание, что поле Имя питомца не нужно делать обязательным для заполнения, так как мы проверим его в скрипте (однако при настройке реального приложения нужно проверять обязательность заполнения этого поля еще и на форме).

Теперь перейдем к редактированию сценария. Создайте новый метод CreateNewPet и вставьте туда следуюший код:

public void CreateNewPet(Context context)
{
    //Проверяем, что переменная Контакт выбрана
    if(context.Contact == null)
    {
        context.FillingError = "Не указан Контакт";
        //Выход из скрипта
        return;
    }
    
    //Проверяем, что Имя питомца не пустое
    if(String.IsNullOrWhiteSpace(context.PetName))
    {
        context.FillingError = "Не указано Имя питомца";
        //Выход из скрипта
        return;
    }
    
    //Создаем новую запись для объекта Питомец
    var newPet = EntityManager<Pet>.Create();
    
    //Присваиваем значения из контекста
    newPet.Name = context.PetName;
    newPet.Kind = context.PetKind;
    newPet.Age = context.PetAge;
    newPet.Master = context.Contact;
    
    //Сохраняем новую запись в БД
    newPet.Save();
    
    //Присваиваем новую запись в контекст
    context.NewPet = newPet;
}

Как видите, все достаточно понятно из комментариев. Единственный момент, который нужно прояснить, – это использование класса EntityManager<Pet>.

Менеджер сущности

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

В нашем случае мы использовали статический класс для доступа к базовому типизированному менеджеру сущности. Сам класс EntityManager<T> – типизированный, и для доступа к конкретному менеджеру мы должны указать тип объекта (в нашем случае это как раз Питомец, имя класса у него Pet). После этого можно обратиться к статическому полю Instance, которое вернет объект менеджера сущности, или вызвать статический метод Create, который создаст новый объект указанного типа (в нашем случае Питомец) без записи в базу.

Далее идет присвоение значений свойств нового объекта из контекста процесса и сохранение объекта в БД при помощи метода Save.

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

Попробуйте теперь опубликовать процесс: при этом отобразится сообщение об ошибке:

Тип «EleWise.ELMA.CRM.Models.IContact» определен в сборке, ссылка на которую отсутствует. Следует добавить ссылку на сборку «EleWise.ELMA.CRM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null».

Давайте теперь добавим ссылку на сборку. Для этого необходимо в окне редактирования сценария справа в панели Настройки нажать кнопку Добавить — Добавить ссылку на сборку.

Рис. 3. Панель настройки. Кнопка «Добавить»

Далее в окне можно отфильтровать по имени сборки, например указать CRM в поле фильтра и после этого выбрать нужную сборку (в нашем случае это EleWise.ELMA.CRM, как указано в тексте ошибки).

Рис. 4. Диалоговое окно добавления ссылок на сборку

Вы можете добавлять ссылки на сборки системы ELMA или на глобальные сборки .NET, зарегистрированные в GAC.

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

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

Поиск записи по условию

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

public void CreateNewPet(Context context)
{
    //Проверяем, что переменная Контакт выбрана
    if(context.Contact == null)
    {
        context.FillingError = "Не указан Контакт";
        //Выход из скрипта
        return;
    }
    
    //Проверяем, что Имя питомца не пустое
    if(String.IsNullOrWhiteSpace(context.PetName))
    {
        context.FillingError = "Не указано Имя питомца";
        //Выход из скрипта
        return;
    }
    
    //Получаем список питомцев для указанного контакта и для указанного имени (полное совпадение)
    var pets = EntityManager<Pet>.Instance.Find(p => p.Master == context.Contact && p.Name == context.PetName);
    
    //Проверяем, есть ли в коллекции хоть одна запись
    if(pets.Any())
    {
        context.FillingError = "Уже есть питомец с указанным именем";
        //Выход из скрипта
        return;
    }
    
    //Создаем новую запись для объекта Питомец
    var newPet = EntityManager<Pet>.Create();
    
    //Присваиваем значения из контекста
    newPet.Name = context.PetName;
    newPet.Kind = context.PetKind;
    newPet.Age = context.PetAge;
    newPet.Master = context.Contact;
    
    //Сохраняем новую запись в БД
    newPet.Save();
    
    //Присваиваем новую запись в контекст
    context.NewPet = newPet;
}

Как видите, здесь мы снова обращаемся к менеджеру сущности, но на этот раз используем метод Find для поиска по выражению.

В нашем случае мы ищем все объекты типа Питомец (Pet), где поле Хозяин (Master) совпадает с переменной Контакт, и поле Имя (Name) равно переменной Имя питомца в контексте процесса. Мы можем использовать поиск по выражению, так как у нас используются только условия сравнения. Далее проверяется наличие записи в результирующей коллекции. В нашем случае, если найдется хоть одна запись удовлетворяющая условию, то нужно вывести сообщение об ошибке.

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

Третий пример сценария. Редактирование и выпадающие списки

В этом примере мы будем использовать тот же процесс и объект, что и в предыдущем, но теперь при выборе контакта мы будем выводить список питомцев пользователю на форму. Также добавим возможность прямо на форме задаче редактировать данные питомца. Для выбора питомца создадим переменную Питомец (Pet) типа Выпадающий список с возможностью ввода своих вариантов. В этот список мы будем заносить уже существующих питомцев для контакта и давать редактировать возраст, либо сразу дадим добавить питомца.

Чтобы корректно обработать все варианты (ведь процесс может быть запущен с уже указанным контактом на входе), нужно добавить еще один сценарий. Данный сценарий должен быть расположен сразу после стартового события, функцию назовем OnStartProcess:

public void OnStartProcess(Context context)
{
    FillPetDDL(context);
}
private void FillPetDDL(Context context)
{
    //Получаем настройки выпадающего списка для контекстной переменной Питомец
    var settings = (DropDownListSettings) context.GetSettingsFor(c => c.Pet);
    
    //Очищаем все элементы
    settings.Items.Clear();
    
    if(context.Contact == null)
    {
        //Если контакт не выбран - дальше ничего не делаем
        return;
    }
    
    //Находим всех питомцев, для выбранного контакта
    var pets = EntityManager<IPet>.Instance.Find(p => p.Master == context.Contact);
    
    foreach (var pet in pets)
    {
        //Добавляем питомца в выпадающий список
        settings.Items.Add(new DropDownItem(pet.Id.ToString(), pet.Name));
    }
    
    //Сохраняем настройки выпадающего списка
    settings.Save();

     //Обнуляем ранее выбранное значение переменной Питомец
    context.Pet = null;
}

Как видите, тут мы используем определение дополнительной функции FillPetDDL, в которой производим заполнение выпадающего списка Питомец (данная функция понадобится нам еще раз в дальнейшем для обработки событий на форме). Обратите внимание, что настройки выпадающего списка привязаны к контексту процесса, а значит, для каждого экземпляра они будут свои.

Следующим шагом необходимо настроить форму первой задачи в процессе так, чтобы можно было создавать либо редактировать связанных с контактом питомцев на одном шаге. Для этого добавим на форму переменные Контакт, Питомец, Вид питомца и Возраст питомца. Далее настроим для формы скрипт при загрузке (функция OnPetCreateFormLoad):

public void OnPetCreateFormLoad(Context context, EleWise.ELMA.Model.Views.FormViewBuilder<Context> form)
{
    var pet = GetPet(context);
    
    if(pet != null)
    {
        //Устанавливаем признак Только для чтения на форме для свойства Вид питомца
        form.For(c => c.PetKind).ReadOnly(true);
    }
}
private Pet GetPet(Context context)
{
    if(context.Contact == null)
    {
        return null;
    }
    
    var pName = context.Pet.Value;
    if(string.IsNullOrWhiteSpace(pName))
    {
        return null;
    }
    
    var pet = EntityManager<Pet>.Instance.Find(p => p.Master == context.Contact && p.Name == pName).FirstOrDefault();
    
    return pet;
}

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

Далее нам нужно настроить поведение переменных на форме. Для этого зайдем в Настройки задачи и добавим для переменных на форме сценарии при изменении. Для переменной Контакт (функция OnContactSelect):

public void OnContactSelect(Context context, EleWise.ELMA.Model.Views.FormViewBuilder<Context> form)
{
    FillPetDDL(context);
    
    form.For(c => c.PetKind).ReadOnly(false);
    context.PetKind = null;
    context.PetAge = null;
}

и для переменной Питомец (функция OnPetSelect):

public void OnPetSelect(Context context, EleWise.ELMA.Model.Views.FormViewBuilder<Context> form)
{
    if(context.Contace == null)
    {
        return;
    }
    
    //Выбираем питомца
    var pet = GetPet(context);
    
    if(pet != null)
    {
        //Если уже сохранен в справочнике, то заполняем поля контекста
        context.PetName = pet.Name;
        context.PetAge = pet.Age;
        context.PetKind = pet.Kind;
        context.NewPet= (Pet)pet;
        
        //Запрещаем редактирование переменной Вид питомца
        form.For(c => c.PetKind).ReadOnly(true);
    }
    else
    {
        //Иначе сбрасываем на пустые значения и устанавливаем имя из выпадающего списка
        context.PetName = context.Pet.Value;
        context.PetAge = 0;
        context.PetKind = null;
        context.NewPet = null;
        
        //Разрешаем редактирование переменной Вид питомца
        form.For(c => c.PetKind).ReadOnly(false);
    }
}

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

Рис. 5. Форма задачи «Ввести данные о питомце». Автозаполнение полей при выборе питомца из выпадающего списка

Если же ввести в поле Питомец имя, которого еще нет у данного контакта, то поле Вид будет снова доступно для редактирования.

Рис. 6. Форма задачи «Ввести данные о питомце». Добавление нового питомца

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

После всех изменений нам нужно только немного переписать сценарий сохранения питомца:

public void CreateNewPet(Context context)
{
    //Проверяем, что переменная Контакт выбрана
    if(context.Contact == null)
    {
        context.FillingError = "Не указан Контакт";
        //Выход из скрипта
        return;
    }
    
    //Проверяем, что Имя питомца не пустое
    if(String.IsNullOrWhiteSpace(context.PetName))
    {
        context.FillingError = "Не указано Имя питомца";
        //Выход из скрипта
        return;
    }
    
    context.NewPet = null;
    
    //Получаем питомца для указанного контакта и для указанного имени (полное совпадение)
    var pet = GetPet(context);
    
    if(pet != null)
    {
        //Если питомец найден, присваиваем его в контекст
        context.NewPet = pet;
    }
    
    //Проверяем переменную в контексте
    if(context.NewPet == null)
    {
        //Создаем новую запись для объекта Питомец
        var newPet = EntityManager<Pet>.Create();
        
        //Присваиваем значения из контекста
        newPet.Name = context.PetName;
        newPet.Kind = context.PetKind;
        newPet.Age = context.PetAge;
        newPet.Master = context.Contact;
        
        //Сохраняем новую запись в БД
        newPet.Save();
        
        //Присваиваем новую запись в контекст
        context.NewPet = newPet;
    }
    else
    {
        //Обновляем только возраст питомца
        context.NewPet.Age = context.PetAge;
        context.NewPet.Save();
    }
}

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

Что почитать дальше

Изучив эти три примера, вы уже сможете самостоятельно реализовать очень много сценариев в системе. Комбинируя сценарии на форме и сценарии между задачами, можно обрабатывать самые сложные бизнес-задачи.

Для более глубокого изучения работы со сценариями и разбора примеров рекомендуем ознакомиться со статьями:

  • Структура модели данных и менеджеры сущностей;
  • Поиск объектов в сценарии;
  • Использование сценариев «при изменении на форме»;
  • Работа с документами в сценариях;
  • Пользовательские расширения;
  • Взаимодействие с модулем CRM в сценариях;
  • Работа с процессами в сценариях.


Online

23 — 27 января с 15:00 (МСК)


junior

Изучайте TypeScript и SDK ELMA365. Cоздавайте удобные интерфейсы, реагирующие на действия пользователя на лету.

О курсе

Для занятий потребуется:

Технологии:

Требования к студенту:

Формат

Online

Лекции в Zoom

Время

с 15:00 до 17:00 (МСК)

Ближайшие курсы

Все курсы


30 января — 3 февраля с 15:00 (МСК)


Online

Экспресс-курс по созданию прототипа решения

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


Записаться

Запись до 26 января

person Для аналитиков, технических специалистов


middle


27 февраля — 3 марта с 16:00 (МСК)


Online

Обзор и практика применения продукта ELMA365 Service

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


Записаться

Запись до 23 февраля

person Для low-code разработчиков


junior


13 — 17 марта с 15:00 (МСК)


Online

Методология создания и доработки бизнес-решений ЭДО

Из курса вы узнаете про базовую модель и жизненный цикл электронного документа. Вместе выделим эталонную модель ЭД и процессов в ЭДО. Рассмотрим типовые сценарии в ЭДО и способы их реализации.


Записаться

Запись до 10 марта

person Для low-code специалистов


junior


20 — 31 марта с 15:00 (МСК)

Практический курс по созданию решения на базе ELMA365 Портал

Платно

Online

Практический курс по созданию решения на базе ELMA365 Портал

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


Записаться

Запись до 15 марта

person Для low-code разработчиков


middle

Начните изучать ELMA

Если у вас есть вопросы о формате или вы не знаете что выбрать, оставьте свой номер: мы позвоним, чтобы ответить на все ваши вопросы.

Нажимая на кнопку, я соглашаюсь
на обработку персональных данных

Архитектура платформы

ELMA365 построена на микросервисной архитектуре и состоит примерно из 40 микросервисов, написанных на языке Go (Golang или Go Programming Language). Каждый из сервисов отвечает за определенный набор функций или даже за одну конкретную функцию. Выбор в пользу микросервисной архитектуры был сделан по трем основным причинам.

Во-первых, она обеспечивает отказоустойчивость: если упадет один сервис, остальные части системы останутся работоспособны. Во-вторых, эта архитектура дает легкую масштабируемость: когда один сервис испытывает чрезмерную нагрузку, его можно масштабировать без выделения лишних ресурсов для других компонентов. Установленная из коробки система может автоматически масштабировать микросервисы, адаптируясь под профиль нагрузки эксплуатанта. И третье преимущество — производительность. Результаты тестов производительности для различных сценариев использования и объемов нагрузок регулярно публикуются.

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

thumb2

Преимущества и ограничения микросервисной архитектуры

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

Система ELMA365 имеет несколько вариантов инсталляции, в их числе есть варианты, когда система устанавливается автоматически с помощью скрипта, а от пользователя требуется лишь указать простейшие настройки.
В поставке класса Enterprise автоматически устанавливается система визуализации данных Grafana с несколькими преднастроенными дашбордами для удобства мониторинга. Система поддерживает и автоматическое масштабирование микросервисов в зависимости от нагрузки.

Свободная система визуализации данных Grafana — лишь одна из целого стека технологий на базе открытого ПО, использованных при построении платформы ELMA365.

Стек технологий

Фронтальная часть платформы (фронтенд) построена на Angular — это современная, открытая и свободная платформа для разработки веб-приложений. Бизнес-логика системы (бэкенд) написана, как уже говорилось выше, на Go (Golang) — это современный быстрый и многопоточный язык, с простым и понятным синтаксисом.

Система разворачивается на платформе для управления контейнеризованными приложениями Kubernetes. Это один из наиболее популярных инструментов на сегодняшний день. Его поддерживают большинство крупных облачных провайдеров, а кроме того инсталляция может быть развернута и на локальных мощностях.

В окружении приложения также задействованы две СУБД: PostgreSQL и MongoDB, брокер сообщений RabbitMQ, кэш-сервер Redis и файловое хранилище S3 Minio.

Выбор именно этих компонентов был сделан по следующим причинам:

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

Важно и то, что все перечисленные решения являются открытым кодом (Open Source), что минимизирует зависимость от санкций.

Еще одна важная составляющая платформы ELMA365 — low-code-инструментарий, дающий заказчику возможность самостоятельного создания решений на базе платформы.

Low-code-составляющая

Большинство действий в системе настраиваются с помощью двух визуальных конструкторов – редактора виджетов и редактора бизнес-процессов. Они позволяют настроить пользовательский интерфейс и логику мышкой, по методу «бери и переноси» (drag-n-drop).

Легкость разработки обеспечивается и большим набором готовых компонентов в редакторах: преднастроенных виджетов, активити бизнес-процессов. Например, пользователю не обязательно писать скрипт, чтобы определить руководителя сотрудника или отобразить все связанные с объектом элементы, — такие действия уже заложены в платформу. Если требуется расширить логику, система умеет исполнять код TypeScript и таким образом можно вызвать скрипты точечно в процессах или в режиме реального времени на формах. Но и здесь используется low-code, и разработчику, как правило, не нужно ничего выдумывать. Для решения задач ELMA365 предоставляет набор инструментов (SDK), который очень хорошо описан в руководстве пользователя.

Что можно роботизировать

Low-code-инструменты — не единственная актуальная «фишка» платформы ELMA365: наряду со стандартной автоматизацией бизнес-процессов, система поддерживает роботизацию рутинных действий с помощью компонента ELMA RPA.

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

Дизайн

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

На основе таких же универсальных шаблонов проектируются интерфейсы в Low-code-редакторе. Но если разработчик решения все же захочет придать интерфейсу индивидуальность, фирменный стиль — поменять цветовую гамму или расположить элементы на формах по-своему, то система позволит сделать ему и это.

Безопасность

Система обеспечивает авторизацию на стороне сервера по JWT-токену, созданному на основе открытого стандарта JSON Web Token (JWT). Все соединения между сервисами осуществляются внутри кластера kubernetes по защищённым протоколам gRPC и HTTP. Для взаимодействия с сервисами кластера из внешнего мира используется тонкая конфигурация правил ingress в кластере и доступ только к выделенным сервисам по протоколу HTTP и WebSocket.

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

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

Что такое и для чего ELMA365 Private Cloud

ELMA365 Private Cloud — это вариант поставки платформы ELMA365 для крупных компаний и холдингов корпоративного сегмента. В рамках данной поставки клиент получает возможность решить множество задач, таких как:

  • разнесение бизнес-единиц по независимым источникам вычислительных ресурсов (тенантам);
  • распределение уникальных внутренних решений между бизнес-единицами за счёт модуля ELMA365 private store;
  • распределение нагрузки на систему через выделение отдельных тенантов;
  • разнесение кластеров/тенантов по различным географическим зонам с учётом особенностей местного законодательства по хранению персональных данных (Закона РФ ФЗ-152, регламента ЕС GDPR и др.).

Лицензионная политика

Лицензии на платформу ELMA365 бывают двух видов: именные и конкурентные. Именная лицензия закрепляется за конкретным пользователем, что обеспечивает ему постоянный доступ в систему. Конкурентные же лицензии не привязываются к конкретным пользователям. Они определяют общее количество сотрудников, которые могут работать в системе одновременно. Выбрать и определить пользователей, которым будут доступны именные лицензии, может администратор из интерфейса системы.

Поддержка решений

В рамках технической поддержки решения на площадке заказчика предоставляются консультации по базовым возможностям системы, осуществляются локализация и исправление ошибок платформы. Время реакции на обращение составляет не более 8 рабочих часов, время решения — не более 16. В случае, когда инцидент можно устранить только посредством будущих доработок системы, дата выпуска исправления определяется в соответствии с общим планом разработки программного продукта.

Для облачной поставки системы обеспечивается доступность в режиме 24/7, а процент времени безотказной работы должен составлять не менее 99,95 % в течение срока предоставления подписки.

Технологические достижения

В начале этого года была выпущена дорожная карта на год вперед, зафиксировав в ней время выпуска релизов. И 2022 год стал для ELMA365 годом динамичного развитие продукта, а Low-code-компонента остается главным инструментом, «ответственным» за идеально точную подгонку решений под бизнес-требования компании.

Важными новшествами ELMA365 в области бизнес-процессов являются описание моделирования процессов принятия решений на понятном для бизнес-пользователей языке (Decision Model and Notation), аналитика бизнес-процессов и proxy-приложения.

Основа любой Low-code системы — это объектная модель, и в платформе ELMA365 эту роль выполняют корпоративные приложения. На базе приложений были реализованы CRM-система, ChatDesk/ServiceDesk. Специалисты компании продолжают функционально насыщать приложения, делать их еще производительнее и удобнее как для Low-code-разработчиков, так и для конечных пользователей.

ELMA365 CRM — решение для организации продаж, включающее традиционную платформу для работы с клиентами и BPM-систему. Такой подход обеспечивает прозрачность и прогнозируемость действий, а также создаёт эффективный механизм связи с другими департаментами

1 мин. чтения

(1)

Система сочетает в себе продажи, контроль исполнения работ и внутренние процессы, и к тому же, обладает приятным современным дизайном и понятным интерфейсом, что делает работу лёгкой и комфортной, а технология Low-code обеспечивает гибкость настройки для ещё более удобного пользования.

Организация продаж

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

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

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

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

Каждой сделке присваивается статус в зависимости от ее завершения. Это позволяет оценить уровень положительной и отрицательной динамики и скорректировать план продаж. 

Коммуникации

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

Для удобства работы с обращениями клиентов в ELMA365 предусмотрены линии, которые позволяют централизованно обрабатывать запросы из мессенджеров. Система бесшовно интегрируется с Telegram, WhatsApp, Instagram и другими платформами для обмена сообщениями. История переписки сохраняется в карточке клиента, чтобы менеджер в любое время мог открыть её и посмотреть когда и с какими вопросами обращался клиент. 

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

ELMA365 Portal

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

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

Бизнес-процессы

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

Для того чтобы выстроить долгосрочные отношения с клиентом, работа с ним не заканчивается после выполнения условий сделки. В системе ELMA365 CRM удобно вести контроль исполнения заказа и иных обязательств по договору. Так, результатом проделанной работы будет не факт продажи, а качественные характеристики и, как следствие, долгосрочное сотрудничество, поскольку довольный клиент всегда будет возвращаться к хорошо зарекомендовавшей себя фирме. 

Электронный документооборот

Ускорить сделку и упростить работу с поставщиками и контрагентами помогает электронный документооборот. В ELMA365 выстроена бесшовная интеграция с Контур.Диадок и операторами ЮЗДО, что позволяет форсировать процедуру подписания договоров и выставления счетов. Такое взаимодействие исключает риски задержек и позволяет облегчить процесс обработки документов. 

С помощью инструментов Low-code система растёт вместе с компанией и обеспечивает широкие возможности масштабирования, что существенно при увеличении количества документов и маршрутов согласования. 

Отраслевые CRM

Благодаря технологии Low-code в ELMA365 есть возможность строить решения для отраслей гораздо быстрее и целостнее. Система может создать CRM, которая охватывает не только отдел продаж, но и всех задействованных участников. Это позволяет избежать информационных разрывов между продажами и производством. 

Low-code помогает расширить функциональность системы и решить задачи каждой конкретной отрасли, отразив все особенности бизнес-процессов компании. Если появляется необходимость добавить новые поля или функции, в ELMA365 это можно сделать в визуальном конструкторе  без привлечения программистов либо с малым их участием. 

Современные технологии

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

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

Синергия BPM и CRM-системы дает возможность перейти от простого учета клиентов и сделок к точным процессам продаж, помогая тем самым повысить конверсии и сократить время проведения цикла продаж. 

Михаил Самойлов

Пишу о бизнесе, стартапах, историях создания своего дела и факапах.

Цифровая трансформация — это глобальный процесс, который затрагивает все сферы деятельности организации, начиная от основного процесса бизнеса и заканчивая управлением ценностью, клиентским опытом, HR-стратегией и культурой внутри компании.

Когда компания находится на достаточно высоком уровне технологической зрелости, основной процесс зачастую цифровизован. При этом вспомогательные процессы могут быть автоматизированы не полностью. Например, такие, как HR-процессы. Отсюда вытекает очевидный вывод: чтобы компания оставалась на плаву, цифровая трансформация должна затрагивать все кадровые процессы.

К сожалению, в 2020 году основным толчком к преобразованиям стал коронавирус, из-за которого многие компании перешли на удаленный формат работы. В связи с этим стали возникать существенные проблемы — в условиях «удаленки» совершенно неудобно согласовывать заявления в старом формате. По статистике, 55% компаний до сих пор продолжают генерировать заявления на бумаге, то есть сотрудник приносит заявление руководителю на подпись в бумажном виде.

В какой момент необходимо внедрять автоматизацию HR-процессов? Для чего это необходимо? В этом кейсе мы подробно расскажем, как сохранить гибкость, уменьшить расходы и избавиться от кадровой рутины на примере ижевской компании «РИТ».

Компания «Русские информационные технологии» — это одновременно продуктовая и сервисная компания. На протяжении 17 лет специалисты разрабатывают и сопровождают информационные системы разного уровня. Среди продуктов компании «Помощник арбитражного управляющего», F-Анализ, HUDWAY и другие веб-сервисы.

«Безусловно, 2020 год с удаленным форматом работы подтолкнул нас к изменениям. Мы решили, что компании пора идти в ногу со временем. При этом мы не хотели загонять процессы в какие-то шаблоны, потому что считаем себя гибкой компанией. Нам было важно не выносить процессы на бумагу и разводить бюрократию. Мы хотели сохранить гибкость процессов, но избавиться от Google-таблиц, передачи информации в чатах и по почте» — говорит HR-менеджер «РИТ» Анна Рябчикова.

В связи с этим основные цели внедрения ELMA365 были следующие:

  • автоматизировать кадровые процессы и сохранить гибкость;
  • расставить приоритеты в работе ключевых сотрудников;
  • сохранить расходы на обслуживание кадровых процессов;
  • уменьшить затраты и количество рутины в процессах.

С ELMA365 компания закрыла следующие боли:

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

Как работает ELMA365 в компании «Русские информационные технологии»?

Был проделан большой пул работы. Автоматизировано 2 больших раздела — раздел административных вещей (заявления на отпуск, больничный, отгул, переработку) и процесс поиска кандидатов в компанию.

  • Теперь в ELMA365 хранится вся база кандидатов. К карточке кандидата приложены все выполненные тестовые задания, комментарии HR и руководителя, рассматриваемые позиции в компании, дата приема на работу и прочее. При увольнении сотрудника карточка остается в системе, в случае запроса или повторного приема ее можно найти и актуализировать информацию по кандидату.
  • Автоматизирован процесс приема на работу. Ранее HR менеджер должен был в ручном формате предупреждать необходимых сотрудников о выходе кандидата. В ELMA365 реализован процесс приема на работу, который объединяет HR, руководителей, бухгалтерию, технический департамент, офис-менеджера. Так, к выходу кандидата подготовлено рабочее место, заведена карточка сотрудника в системе, готовы учетные записи в необходимых сервисах и др. HR не держит в голове подготовку, получая оповещения по каждому выполненному этапу процесса, и занимается более важными задачами.

  • Автоматизированы процессы отпусков и отгулов с учетом гибких часовых перерывов. Раньше заявления на отпуск принимались через корпоративную почту, после чего руководитель отправлял также по почте заявление на согласование исполнительному директору, который в свою очередь отправлял бухгалтеру. После HR вносил данные в таблицу. «Мы супергибкая компания, разрешаем дробить и брать отпуск на часы, поэтому 2 часа в день я проводила с калькулятором, внося данные в таблицу», — говорит HR-менеджер «РИТ».

С ELMA365 сотрудник заполняет заявление внутри системы, после чего оно отправляется по пути согласования. Заявление не теряется, руководитель, сотрудник, HR и бухгалтер в курсе статусов заявления. Кроме того, каждый работник видит актуальную информацию по количеству дней/часов оставшегося отпуска и может планировать заранее. Из явных преимуществ: теперь HR-менеджер не тратит рабочее время на мониторинг процесса.

  • Автоматизированы процессы приема на работу, увольнения и прохождения испытательного срока с учетом особенностей должностей. При увольнении у сотрудника необходимо забрать все доступы, закрыть учетки и рассчитать остаток. Раньше надо было вручную писать сисадмину о доступах, бухгалтеру о расчете, предупреждать руководителя и офис-менеджера. При этом это все надо контролировать, напоминать. Сейчас автоматически всем участникам процесса приходят задачи, информирующие об увольнении и действиях.

Также автоматизирован процесс прохождения испытательного срока. Теперь после 3 месяцев работы HR-менеджеру приходит задача, что нужно переговорить с руководителем и сотрудником о будущем, а также пересмотреть зарплату. «Если человек решает остаться с нами, и мы увеличиваем зарплату, то процесс уходит на бухгалтера, а я в курсе этапности» — говорит HR-менеджер Анна.

Итак, какой эффект получила компания «Русские информационные технологии» от внедрения?

  • 90-120 тыс. в год экономия за счет снятия с HR-менеджера рутинных операций;
  • 2 часа в неделю вместо 2 часов в день — на администрирование кадровых процессов;
  • < 1 часа в неделю вместо 3-5 часов тратит HR-менеджер на обработку заявлений.

Планы

Внутренняя потребность в автоматизации процессов, конечно, есть. Сейчас у компании «РИТ» есть запрос на работу с управлением договорами в системе ELMA365. Есть задачи, связанные с расчетом прибыльности проекта: сколько часов было потрачено на конкретную задачу. В том числе бухгалтерские отчеты. Как говорит HR-менеджер Анна Рябчикова, ELMA365 зарекомендовала себя как гибкая и удобная система — то, что надо.

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

Понравилась статья? Поделить с друзьями:
  • Укажите однозначное слово праздник рукав форма свекла
  • Украинские народные праздники список
  • Укажите название государственного праздника на котором была сделана данная фотография объясните
  • Украинские народные праздники реферат
  • Укажи однозначное слово праздник рукав форма свекла

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии