Tisa.BpmCore
2026.1.9.321
dotnet add package Tisa.BpmCore --version 2026.1.9.321
NuGet\Install-Package Tisa.BpmCore -Version 2026.1.9.321
<PackageReference Include="Tisa.BpmCore" Version="2026.1.9.321" />
<PackageVersion Include="Tisa.BpmCore" Version="2026.1.9.321" />
<PackageReference Include="Tisa.BpmCore" />
paket add Tisa.BpmCore --version 2026.1.9.321
#r "nuget: Tisa.BpmCore, 2026.1.9.321"
#:package Tisa.BpmCore@2026.1.9.321
#addin nuget:?package=Tisa.BpmCore&version=2026.1.9.321
#tool nuget:?package=Tisa.BpmCore&version=2026.1.9.321
Tisa.BpmCore
Описание
Tisa.BpmCore — библиотека для прямого доступа к данным платформы BPMSoft из приложений .NET Core. Позволяет создавать UserConnection и работать с EntitySchemaQuery, процессами и прочими API BPMSoft без веб-хоста — из консольных приложений, фоновых сервисов, веб-API и т.д.
Поддерживаемые фреймворки: .NET 8.0, .NET 9.0, .NET 10.0.
Установка
.NET CLI
dotnet add package Tisa.BpmCore
Актуальный номер версии пакета смотрите на nuget.org/packages/Tisa.BpmCore.
NuGet Package Manager
Install-Package Tisa.BpmCore
После установки пакета файл BPMSoft.WebHost.dll.config автоматически копируется в выходную директорию вашего проекта (bin/Debug/net8.0/ и т.д.). Это минимально настроенная рабочая конфигурация BPMSoft, которую необходимо донастроить под ваше окружение (см. также раздел «Настройка» ниже).
Требования для проектов, использующих пакет и для прямого создания UserConnection
В проектах, использующих пакет Tisa.BpmCore, и при необходимости прямого создания объекта UserConnection внутри приложения (без веб-хоста) дополнительно необходимы:
Целевая платформа: при использовании класса
UserConnectionв проекте с данным пакетом указывайте целевую платформу .NET 8.0 — BPMSoft в настоящее время поддерживает только её.
1. Файл конфигурации ядра BPMSoft
Используйте файл Tisa.BpmCore/Docs/App.config: в нём приведена полная конфигурация (все типовые секции и настройки) — удобно как справочник и для переноса фрагментов в свой проект. Файл входит в пакет Tisa.BpmCore и должен быть подключён к проекту (например, как контент или копия в выходную директорию).
Для запуска приложения с пакетом обычно используют
BPMSoft.WebHost.dll.config— это минимально настроенная рабочая версия (см. «Шаг 1» в разделе «Настройка»);App.configне заменяет её автоматически, а дополняет документацией по полному составу настроек.
2. Ссылки на сборки платформы BPMSoft
Содержимое файла Tisa.BpmCore/Docs/BpmSoft.xml должно быть скопировано в проект (например, в .csproj в виде блока <ItemGroup> с <Reference>). Эти сборки не входят в NuGet-пакет вследствие лицензионных ограничений; пути HintPath нужно задать в соответствии с вашей установкой BPMSoft.
Список сборок BPMSoft для ссылок в проекте
- Autofac
- Autofac.Extensions.DependencyInjection
- BPMSoft.Authentication
- BPMSoft.Core.DI
- BPMSoft.Core.DI.Bindings
- BPMSoft.DB.PostgreSql
- BPMSoft.Licensing.Application
- BPMSoft.Messaging.Common
- BPMSoft.Monitoring
- BPMSoft.Redis
- BPMSoft.Redis.Abstractions
- BPMSoft.Redis.StackExchangeAdapters
- BPMSoft.Security
- BPMSoft.Store.WebAdapters
- BPMSoft.Web.Http.Abstractions
- BPMSoft.Web.Http.AspNetCore
- BPMSoft.Webhooks
- Ninject
- Ninject.Extensions.Factory
- StackExchange.Redis
Скопируйте блок <ItemGroup> с <Reference> из файла BpmSoft.xml в папке Docs пакета и при необходимости скорректируйте HintPath под вашу установку BPMSoft.
Настройка
Два файла конфигурации в Docs/
| Файл | Назначение |
|---|---|
Docs/App.config |
Полная конфигурация BPMSoft — все основные секции; используйте как эталон и справочник при настройке. |
Docs/BPMSoft.WebHost.dll.config |
Минимально настроенная рабочая версия: урезанный набор секций, достаточный для типового сценария; этот файл пакуется в NuGet и копируется в выходную директорию потребителя — его и правят под своё окружение. |
Шаг 1. Конфигурация BPMSoft (BPMSoft.WebHost.dll.config)
Файл BPMSoft.WebHost.dll.config — минимально настроенная рабочая XML-конфигурация платформы BPMSoft (секции bpmsoft, connectionStrings, redis, appSettings и др. в объёме, нужном для запуска). После установки пакета он появится в выходной директории с шаблонными значениями.
Откройте файл и замените плейсхолдеры:
Строка подключения к БД
Строку подключения достаточно задать в одном месте — либо здесь в XML, либо в appsettings.json (см. Шаг 2). Если она указана в appsettings.json, значение из XML-конфига будет переопределено автоматически.
<connectionStrings>
<add name="db"
connectionString="Pooling=true;Database=YOUR_DATABASE;Host=localhost;Port=5432;Username=postgres;Password=YOUR_PASSWORD;maxPoolSize=50;Timeout=5;CommandTimeout=400"/>
<add name="redis"
connectionString="host=localhost;db=0;port=6379"/>
</connectionStrings>
| Параметр | Описание |
|---|---|
Database |
Имя базы данных BPMSoft (PostgreSQL) |
Host |
Адрес сервера PostgreSQL |
Port |
Порт PostgreSQL (по умолчанию 5432) |
Username |
Логин PostgreSQL |
Password |
Пароль PostgreSQL |
redis |
Строка подключения к Redis (host, db, port) |
Ключи безопасности (appSettings)
Замените шаблонные значения на свои:
<add key="InitializationSecurityVector" value="CHANGE_ME_16CHARS"/>
<add key="CurrentSecurityKey" value="CHANGE_ME_24CHARS_KEY__X"/>
<add key="MsgUserPasswordDESCryptoServiceKey" value="CHANGE_ME"/>
<add key="UserManagementSauPassword" value="CHANGE_ME"/>
| Ключ | Описание | Требования |
|---|---|---|
InitializationSecurityVector |
Вектор инициализации шифрования | Ровно 16 символов |
CurrentSecurityKey |
Ключ шифрования данных | Ровно 24 символа (DES/TripleDES) |
MsgUserPasswordDESCryptoServiceKey |
Ключ шифрования паролей для MessageService | Base64-строка |
UserManagementSauPassword |
Пароль сервисного пользователя портала | Произвольная строка |
Важно: значения этих ключей должны совпадать с теми, которые используются на вашем экземпляре BPMSoft. Скопируйте их из конфигурации сервера BPMSoft.
Альтернативный путь к конфигурации
Вместо размещения файла в выходной директории можно указать путь через переменную окружения:
set BPMSOFT_CONFIG_PATH=C:\MyApp\config\BPMSoft.WebHost.dll.config
BpmFactory ищет конфигурационный файл в следующем порядке:
- Переменная окружения
BPMSOFT_CONFIG_PATH BPMSoft.WebHost.dll.configв директории приложения (AppContext.BaseDirectory)App.configв директории приложения
Шаг 2. Конфигурация приложения (appsettings.json)
Настройте секцию подключения к BPMSoft в appsettings.json вашего приложения.
Строка подключения:
ConnectionStringвappsettings.json— необязательна. Если она не указана,BpmFactoryавтоматически возьмёт её изBPMSoft.WebHost.dll.config(секцияconnectionStrings/db). Это позволяет хранить строку подключения только в одном месте.
Вариант A: Использование через токены (рекомендуется для API-приложений)
{
"BpmSoft": {
"Url": "https://your-bpmsoft-instance.com",
"UserName": "Supervisor",
"Password": "your-password",
"ConnectionString": "Pooling=true;Database=...;Host=...;Username=...;Password=..."
},
"Tokens": {
"DEFAULT": "BpmSoft"
}
}
ConnectionString можно опустить — тогда используется значение из XML-конфига:
{
"BpmSoft": {
"Url": "https://your-bpmsoft-instance.com",
"UserName": "Supervisor",
"Password": "your-password"
},
"Tokens": {
"DEFAULT": "BpmSoft"
}
}
В этом сценарии IBpmCoreService.ValidateToken("DEFAULT") найдёт секцию Tokens:DEFAULT → "BpmSoft" → прочитает BpmSoft:Url, UserName, Password (и ConnectionString, если задана).
Вариант B: Прямая конфигурация через секцию BpmCore
{
"BpmCore": {
"BaseUrl": "https://your-bpmsoft-instance.com",
"User": "Supervisor",
"Password": "your-password",
"ConnectionString": "Pooling=true;Database=...;Host=...;Username=...;Password=..."
}
}
ConnectionString также можно опустить.
Шаг 3. Регистрация сервисов в DI
В Program.cs или Startup.cs:
using Tisa.BpmCore.Extensions;
var builder = WebApplication.CreateBuilder(args);
// Регистрация BpmCore
builder.Services.AddBpmCore(builder.Configuration);
Или с ручной настройкой:
builder.Services.AddBpmCore(options =>
{
options.BaseUrl = "https://your-bpmsoft-instance.com";
options.User = "Supervisor";
options.Password = "your-password";
options.ConnectionString = "Pooling=true;Database=...";
options.Timeout = TimeSpan.FromSeconds(60);
});
Использование
Получение UserConnection
UserConnection — центральный объект BPMSoft SDK для доступа к данным. BpmFactory создаёт и кеширует его (singleton, потокобезопасно).
Через IBpmCoreService (DI)
public class MyService
{
private readonly IBpmCoreService _bpmCore;
public MyService(IBpmCoreService bpmCore)
{
_bpmCore = bpmCore;
}
public void DoWork()
{
_bpmCore.ValidateToken("DEFAULT");
var userConnection = BpmFactory.CreateUserConnection(_bpmCore);
// Используйте userConnection для EntitySchemaQuery, Select и т.д.
}
}
Через IConfiguration (без токенов)
var config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();
var userConnection = BpmFactory.CreateUserConnection(config, "BpmCore");
Работа с данными BPMSoft (EntitySchemaQuery)
using BPMSoft.Core.Entities;
var esq = new EntitySchemaQuery(userConnection.EntitySchemaManager, "Contact");
esq.AddAllSchemaColumns();
var contacts = esq.GetEntityCollection(userConnection);
foreach (var contact in contacts)
{
Console.WriteLine(contact.GetTypedColumnValue<string>("Name"));
}
Прямой доступ к БД через Npgsql
При вызове AddBpmCore(configuration) в DI автоматически регистрируется NpgsqlDataSource (singleton) с той же строкой подключения, что использует BpmFactory. Дублировать строку подключения не нужно.
Через DI (рекомендуется)
using Npgsql;
public class MyRepository(NpgsqlDataSource dataSource)
{
public async Task<string?> GetContactNameAsync(Guid id, CancellationToken ct)
{
await using var cmd = dataSource.CreateCommand(
"SELECT \"Name\" FROM \"Contact\" WHERE \"Id\" = @id");
cmd.Parameters.AddWithValue("id", id);
return (string?)await cmd.ExecuteScalarAsync(ct);
}
}
Без DI
var cs = BpmFactory.GetConnectionString(configuration);
await using var dataSource = NpgsqlDataSource.Create(cs);
await using var conn = await dataSource.OpenConnectionAsync();
С EF Core
builder.Services.AddDbContext<MyDbContext>((sp, options) =>
{
var cs = BpmFactory.GetConnectionString(builder.Configuration);
options.UseNpgsql(cs);
});
BpmFactory.GetConnectionString() определяет строку подключения по тому же приоритету: appsettings.json → BPMSoft.WebHost.dll.config.
После первого вызова CreateUserConnection строка также доступна через свойство BpmFactory.ConnectionString.
Режимы инициализации
BpmFactory автоматически выбирает режим в зависимости от наличия конфигурационного файла:
| Режим | Условие | Что инициализируется |
|---|---|---|
Полный (Full) |
Найден BPMSoft.WebHost.dll.config |
Redis, HttpContext, ClassFactory (Ninject), CoreApiContainer (MS DI), Workspace, SQLitePCL |
Упрощённый (Simple) |
Файл не найден | Только AppConnection + установка ConnectionString |
Полный режим необходим для автономных приложений, работающих напрямую с БД BPMSoft. Упрощённый может использоваться в окружениях, где платформа уже инициализирована хостом.
Диагностика
При полной инициализации BpmFactory записывает подробный лог в файл bpmfactory-diag.log в директории приложения. Лог содержит:
- Состояние Redis-конфигурации на каждом этапе
- Результаты инициализации HttpContext
- Статус ClassFactory и CoreApiContainer
- Ошибки загрузки сборок и Workspace
При возникновении ошибок проверьте этот файл в первую очередь.
Структура проекта
Tisa.BpmCore/
├── Abstractions/ # Интерфейсы (IBpmCoreService, IBpmClient, ...)
├── Clients/ # HTTP-клиенты для REST API BPMSoft
├── Data/ # Модели данных
├── Exceptions/ # Кастомные исключения
├── Extensions/ # Методы расширения (AddBpmCore, ...)
├── Infrastructure/ # BpmFactory, BpmCoreService, BpmCoreOptions
├── Requests/ # Модели запросов
├── Responses/ # Модели ответов
└── Resources/ # Ресурсы
Требования
- .NET 8.0 SDK или выше
- PostgreSQL (или MSSQL — требуется изменить секцию
db/generalв конфиге) - Redis — для кеширования и сессий BPMSoft
- BPMSoftSDK — подтягивается автоматически как транзитивная зависимость
Безопасность
- Не храните пароли и строки подключения в системе контроля версий
- Для локальной разработки используйте User Secrets
- В production используйте Azure Key Vault, HashiCorp Vault или переменные окружения
- Файл
BPMSoft.WebHost.dll.configиз пакета содержит шаблонные значения — замените их перед использованием - Путь к конфигурации можно задать через переменную окружения
BPMSOFT_CONFIG_PATH
FAQ
Ошибка: «Группа секций 'bpmsoft' не найдена в конфигурации»
Файл BPMSoft.WebHost.dll.config отсутствует в выходной директории или повреждён. Убедитесь, что:
- Пакет Tisa.BpmCore установлен
- Файл копируется при сборке (проверьте
bin/Debug/net8.0/BPMSoft.WebHost.dll.config) - Файл содержит корректную секцию
<bpmsoft>с типомBPMSoft.Core.AppConfigurationSectionGroup
Ошибка: «Строка подключения не найдена»
Строка подключения не найдена ни в одном из источников. Укажите её хотя бы в одном месте:
BPMSoft.WebHost.dll.config— секция<connectionStrings>, элемент сname="db"appsettings.json— полеConnectionStringв секцииBpmSoftилиBpmCore- Переменная окружения
BpmSoft__ConnectionStringилиBpmCore__ConnectionString
Как использовать MSSQL вместо PostgreSQL?
В файле BPMSoft.WebHost.dll.config замените секцию <db><general .../> — укажите типы движков MSSQL:
<db>
<general connectionStringName="db"
securityEngineType="BPMSoft.DB.MSSql.MSSqlSecurityEngine, BPMSoft.DB.MSSql"
executorType="BPMSoft.DB.MSSql.MSSqlExecutor, BPMSoft.DB.MSSql"
engineType="BPMSoft.DB.MSSql.MSSqlEngine, BPMSoft.DB.MSSql"
metaEngineType="BPMSoft.DB.MSSql.MSSqlMetaEngine, BPMSoft.DB.MSSql"
metaScriptType="BPMSoft.DB.MSSql.MSSqlMetaScript, BPMSoft.DB.MSSql"
typeConverterType="BPMSoft.DB.MSSql.MSSqlTypeConverter, BPMSoft.DB.MSSql"
binaryPackageSize="1048576" currentSchemaName="dbo"/>
</db>
И добавьте соответствующую строку подключения:
<add name="db" connectionString="Data Source=localhost;Initial Catalog=YOUR_DB;User ID=sa;Password=YOUR_PASSWORD;Encrypt=False;"/>
Как переопределить файл конфигурации в своём проекте?
Если шаблонный конфиг из пакета не подходит, создайте свой BPMSoft.WebHost.dll.config в корне проекта:
<ItemGroup>
<Content Include="BPMSoft.WebHost.dll.config">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
Локальный файл приоритетнее файла из пакета благодаря PreserveNewest.
Лицензия
MIT License
Поддержка
По вопросам и сообщениям об ошибках: support@tisn.ru
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- BPMSoftSDK (>= 1.9.0.14114)
- Common.Logging (>= 3.4.1)
- dotless.Core (>= 1.6.7)
- Flurl (>= 4.0.0)
- Flurl.Http (>= 4.0.2)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.5)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.5)
- Microsoft.Extensions.Options (>= 10.0.5)
- Newtonsoft.Json (>= 13.0.4)
- Npgsql (>= 10.0.2)
- Npgsql.EntityFrameworkCore.PostgreSQL (>= 10.0.1)
- Npgsql.Json.NET (>= 10.0.2)
- Pipelines.Sockets.Unofficial (>= 2.2.8)
- Polly (>= 8.6.6)
- Polly.Contrib.WaitAndRetry (>= 1.1.1)
- Serilog (>= 4.3.1)
- SQLitePCLRaw.bundle_e_sqlite3 (>= 3.0.2)
- System.CodeDom (>= 5.0.0)
- System.Configuration.ConfigurationManager (>= 10.0.5)
- System.DirectoryServices.Protocols (>= 8.0.0)
- System.Drawing.Common (>= 10.0.5)
- System.ServiceModel.Federation (>= 10.0.652802)
- System.ServiceModel.Primitives (>= 10.0.652802)
- Tisa.Infrastructure (>= 2026.1.9.321)
-
net8.0
- BPMSoftSDK (>= 1.9.0.14114)
- Common.Logging (>= 3.4.1)
- dotless.Core (>= 1.6.7)
- Flurl (>= 4.0.0)
- Flurl.Http (>= 4.0.2)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.5)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.5)
- Microsoft.Extensions.Options (>= 10.0.5)
- Newtonsoft.Json (>= 13.0.4)
- Npgsql (>= 10.0.2)
- Npgsql.EntityFrameworkCore.PostgreSQL (>= 8.0.11)
- Npgsql.Json.NET (>= 10.0.2)
- Pipelines.Sockets.Unofficial (>= 2.2.8)
- Polly (>= 8.6.6)
- Polly.Contrib.WaitAndRetry (>= 1.1.1)
- Serilog (>= 4.3.1)
- SQLitePCLRaw.bundle_e_sqlite3 (>= 3.0.2)
- System.CodeDom (>= 5.0.0)
- System.Configuration.ConfigurationManager (>= 10.0.5)
- System.DirectoryServices.Protocols (>= 8.0.0)
- System.Drawing.Common (>= 10.0.5)
- System.ServiceModel.Federation (>= 10.0.652802)
- System.ServiceModel.Primitives (>= 10.0.652802)
- Tisa.Infrastructure (>= 2026.1.9.321)
-
net9.0
- BPMSoftSDK (>= 1.9.0.14114)
- Common.Logging (>= 3.4.1)
- dotless.Core (>= 1.6.7)
- Flurl (>= 4.0.0)
- Flurl.Http (>= 4.0.2)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.5)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.5)
- Microsoft.Extensions.Options (>= 10.0.5)
- Newtonsoft.Json (>= 13.0.4)
- Npgsql (>= 10.0.2)
- Npgsql.EntityFrameworkCore.PostgreSQL (>= 9.0.4)
- Npgsql.Json.NET (>= 10.0.2)
- Pipelines.Sockets.Unofficial (>= 2.2.8)
- Polly (>= 8.6.6)
- Polly.Contrib.WaitAndRetry (>= 1.1.1)
- Serilog (>= 4.3.1)
- SQLitePCLRaw.bundle_e_sqlite3 (>= 3.0.2)
- System.CodeDom (>= 5.0.0)
- System.Configuration.ConfigurationManager (>= 10.0.5)
- System.DirectoryServices.Protocols (>= 8.0.0)
- System.Drawing.Common (>= 10.0.5)
- System.ServiceModel.Federation (>= 10.0.652802)
- System.ServiceModel.Primitives (>= 10.0.652802)
- Tisa.Infrastructure (>= 2026.1.9.321)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Tisa.BpmCore:
| Package | Downloads |
|---|---|
|
Tisa.BpmApp
Базовые классы и компоненты приложений ТИСА для работы с использованием NetCore на платформе BPMSoft. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated | |
|---|---|---|---|
| 2026.1.9.321 | 33 | 3/21/2026 | |
| 2026.1.9.320 | 35 | 3/20/2026 | |
| 2026.1.9.316 | 110 | 3/16/2026 | |
| 2026.1.9.313 | 98 | 3/13/2026 | |
| 2026.1.9.310 | 94 | 3/8/2026 | |
| 2026.1.9.300 | 92 | 3/4/2026 | |
| 2025.1.8.1120 | 379 | 11/17/2025 | |
| 2025.1.8.1101 | 235 | 10/28/2025 | |
| 2025.1.7.410 | 276 | 4/9/2025 | |
| 2025.1.7.400 | 360 | 4/8/2025 |