1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mengtree-workflow-engine

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Демонстрационный адрес

Демонстрационная среда для пакета dev-ветки.

http://39.101.74.14:8083/index.html

Демонстрационное подключение к бизнес-системе de.

http://39.101.74.14:8183/index.html

Логин: admin
Пароль: 123qwe

Подключение к демонстрационному git:
https://gitee.com/mengtree/workflow-engine-docking

QQ группа для общения: 558038638

Введение

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

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

Особенности проекта

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

Традиционный подход

Традиционный способ объединяет процесс утверждения с бизнес-системой, особенно в отношении определения формы данных и выбора персонала (организации) в процессе утверждения. Alt text

Подход этого проекта

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

Быстрый запуск

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

  • В методе PreConfigureServices класса WorkFlowCoreFrameworkModule настройте требуемую базу данных. По умолчанию доступны LocalMemory и Mysql, LocalMemory — это sqlite в памяти, не требует создания базы данных, можно сразу же попробовать.
public override void PreConfigureServices(ServiceConfigurationContext context)
{
    WorkFlowCoreFrameworkOptions.DbType = FrameworkConfigOrmType.LocalMemory;
}
  • Если вы выберете Mysql:
    • Настройте строку подключения к базе данных. Если это Mysql, вам также необходимо настроить версию. Рекомендуется версия 8.0 или выше. В разделе:
"ConnectionStrings": {
  "Default": "${ConnectionStrings_Default}|HLPexHv+EZ1OHtlrnL2oQLRNTMuY5C1pXgEKuqBqgjaQVWczq9OMn5PErX0cHGUKz7ABrPJZHhI2l4OsnpG7pBt3LAkCvWYfEku7MyTgWjwqVgXq7T6KIMzEdFugrolAFVLC8AChraWFael7QKbJaWUlHEo8mSu1i5wcl+iiFenu8mVYGiIm7+0B0VIhtKbEsBcvvbXhBhrqUsuKXmg9iQ==",
  "DefaultVersion": "8.0.26",
  "SecretPath": "C:\\workflowcore\\secret.config",
  "IsEncrypt": "true",
  "Secret": "${ConnectionStrings_Secret}|"
}
  • Используйте формат ${переменная|значение по умолчанию}, чтобы настроить параметры через переменные среды, переменные консоли при запуске, если не указано, используйте значение по умолчанию. Здесь строка подключения зашифрована. Режим: CBC, заполнение: PKCS7

  • Если IsEncrypt пуст, можно настроить незашифрованную строку подключения.

  • SecretPath используется только для локального ключа дешифрования. Это удобно для локального дешифрования. При фактическом запуске вы можете указать ключ дешифрования через переменную ConnectionStrings_Secret.

  • Пример настройки незашифрованной строки подключения

"ConnectionStrings": {
"Default": "${ConnectionStrings_Default}|Database=WorkflowCore;Data Source=;Port=3308;UserId=;Password=;Charset=utf8;TreatTinyAsBoolean=false;Allow User Variables=True",
"DefaultVersion": "8.0.26",
"SecretPath": "",
"IsEncrypt": "",
"Secret": "${ConnectionStrings_Secret}|"
}
  • Установите Host как параметр запуска.

  • Инициализируйте миграцию (если база данных не Mysql, по умолчанию Mysql не требуется).

  • Удалите папку Migrations в папке WorkFlowCore.Framework.

  • Введите команду add-migration init в консоли диспетчера пакетов NuGet по умолчанию для проекта WorkFlowCore.Framework и нажмите Enter.

  • Создайте начальные данные таблицы. Введите команду update-database в консоли диспетчера пакетов NuGet по умолчанию для проекта WorkFlowCore.Framework и нажмите Enter.

  • Примечание: система использует orm ef, если требуется настраиваемая реализация, перепишите репозиторий

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

Бизнес-модель

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

Структура исходного кода

Прежде чем представить использование, давайте кратко рассмотрим структуру кода. Весь проект состоит из четырёх частей:

  • 1.WorkFlowCore — ядро домена, где инкапсулируется вся бизнес-логика. В этой части есть несколько модулей:
    • Authorization — аутентификация, которая содержит абстрактный интерфейс для получения информации о текущем пользователе. Поскольку проект не зависит от других систем пользователей, при доступе к интерфейсу (или другим формам) во время входа в систему необходимо получить информацию о текущем вошедшем пользователе через интерфейс идентификации. Пользователи могут реализовать конкретные реализации в зависимости от ситуации.
    • EventData — модель данных события (объект данных, публикуемый издателем).
    • IRepositories — абстрактное хранилище. При проектировании системы учитывалось, что конкретная база данных неизвестна для разных сценариев использования, поэтому введено хранилище, которое легко расширить (по умолчанию предоставляется расширение EF).
    • UserSelectors — модуль выбора пользователя. Особенный модуль. Управляет выбором пользователя. Во время фактического использования необходимо реализовать соответствующий интерфейс выбора пользователя для расширения модуля выбора пользователя. Позже будет подробно объяснено.
    • Conditions — обработчик условий. Особенный модуль. Пользователь может предоставить богатые варианты обработки и логику через настраиваемый обработчик условий. Будет подробно объяснено позже.
    • Workflows — модуль проектирования рабочего процесса, который будет представлен позже.
    • WorkTasks — модуль экземпляра рабочего процесса, который будет представлен позже.
    • Plugins — модуль управления плагинами.
  • WorkFlowCore.Framework — реализация абстрактного ядра домена. Здесь реализуется, какая база данных используется в ядре домена, какие существуют модули выбора пользователя и обработчики условий и т. д.
  • WorkFlowCore.Host — интерфейс.
  • WorkFlowCore.Test — модульный тест.

Схема плагина выбора пользователя и условия обработки

  • Обработчик условий Alt text

  • Выбор пользователя Alt text

Схема взаимодействия рабочего процесса и бизнес-системы

  • Автоматический вход бизнес-платформы в платформу рабочего процесса

    Alt text

  • Бизнес-платформа инициирует рабочий процесс через интерфейс для запуска утверждения

    Alt text

  • Схема синхронизации состояния утверждения рабочего процесса

    Alt text

Краткое введение в использование рабочего процесса

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

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

  • Реализовать пользовательский выборщик. Реализуйте интерфейс IUserSelector для реализации собственного выбора пользователя.

    
    [UserSelector("Выбор пользователя по имени","Выбрать всех пользователей")]
    public class UserSelectorB : IUserSelector
    {
    
        public **List<Selection> GetSelections()**
    
    {
        return UserList.Users.Select(u => new Selection { Id = u.Id, Name = u.Name }).ToList();
    }
    
    public List<User> GetUsers(SelectorInput input)
    {
        var result = new List<User>();
        switch (input.SelectionId)
        {
            default:
                result.Add(new User { Id = input.SelectionId, Name = UserList.GetUserById(input.SelectionId).Name });
                break;
        }
        return result;
    }

}

Описание пользовательского селектора:

  1. Селектор пользователя имеет атрибут UserSelector. Этот атрибут присваивает селектору имя и описание для отображения на интерфейсе.
  2. Имя класса используется как уникальный идентификатор для селектора.
  3. Метод GetSelections определяет доступные опции для этого типа селектора. Опции могут быть разнообразными, например, при использовании в качестве селектора ролей он может возвращать список ролей.
  4. Метод GetUsers возвращает фактический список пользователей на основе выбранного идентификатора опции. Например, если в роли селектора передаётся роль, то метод вернёт всех членов этой роли.

Пользовательский селектор также может реализовывать интерфейс IDefaultUserSelector для создания «стандартного» селектора.

Пространство имён WorkFlowCore.UserSelectors

public interface IDefaultUserSelector: IUserSelector { List GetDefaultSelectionIds(); }

Пользовательский обработчик условий

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

[Condition("Обработчик условий A")] public class ConditionA : ICondition { public bool CanAccept(ConditionInput input) { try { // Простой анализ выражения var keyvalue = input.Expression.Split('='); JObject jObject = JObject.Parse(input.WorkTask.FormData); var token = jObject.SelectToken(keyvalue[0]); var value = token.Value(); return value.Equals(keyvalue[1]); } catch (Exception) { return false; } } }

Обработчик условий:

  1. Атрибут Condition помечает класс. Подобно пользовательскому селектору, атрибут Condition предоставляет имя и описание условия для просмотра на интерфейсе.
  2. Метод CanAccept возвращает логическое значение. Он анализирует выражение, информацию о текущей задаче рабочего процесса и другие данные, чтобы определить соответствие условиям. Информация для анализа может быть разнообразной, включая возможность анализа данных формы рабочего процесса или использования SQL или других методов для проверки данных. Методы анализа также могут быть расширены в зависимости от ситуации, например, для анализа JSON, XML или других нестандартных структур данных.

Создание дизайна рабочего процесса

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

  • Узлы: этапы проверки или пересылки другим участникам.
  • Пользовательские селекторы: определяют, кто будет проверять или пересылать работу на каждом этапе.
  • Линии: используются для соединения узлов. Линии образуют пути между узлами.
  • Обработчики условий: линии могут иметь обработчики условий, которые определяют, какие узлы могут быть достигнуты.

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

Способ развёртывания

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

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

Быстрый старт

Быстрый старт (/QuickStart.md) содержит инструкции по быстрому запуску административной панели.

API

API-документация (/Api.md) предоставляет базовое описание основных открытых интерфейсов.

Система плагинов

Система включает логику управления плагинами, позволяя настраивать и повторно использовать определённые плагины (расширения). Администраторы могут управлять и настраивать плагины после входа в систему.

Документация по системе плагинов (/Plugin.md).

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
LGPL-3.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/mengtree-workflow-engine.git
git@api.gitlife.ru:oschina-mirror/mengtree-workflow-engine.git
oschina-mirror
mengtree-workflow-engine
mengtree-workflow-engine
master