DevelKit.MessageTemplates.SqlServer 0.1.0

dotnet add package DevelKit.MessageTemplates.SqlServer --version 0.1.0
                    
NuGet\Install-Package DevelKit.MessageTemplates.SqlServer -Version 0.1.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="DevelKit.MessageTemplates.SqlServer" Version="0.1.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="DevelKit.MessageTemplates.SqlServer" Version="0.1.0" />
                    
Directory.Packages.props
<PackageReference Include="DevelKit.MessageTemplates.SqlServer" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add DevelKit.MessageTemplates.SqlServer --version 0.1.0
                    
#r "nuget: DevelKit.MessageTemplates.SqlServer, 0.1.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package DevelKit.MessageTemplates.SqlServer@0.1.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=DevelKit.MessageTemplates.SqlServer&version=0.1.0
                    
Install as a Cake Addin
#tool nuget:?package=DevelKit.MessageTemplates.SqlServer&version=0.1.0
                    
Install as a Cake Tool

<img src="https://raw.githubusercontent.com/develmax/DevelKit.MessageTemplates/main/assets/logo.png" alt="DevelKit.MessageTemplates icon" width="96" height="96" />

DevelKit.MessageTemplates

Русский | English

Шаблонизатор сообщений для .NET: поля сущностей, переходы по связям, условия, форматы .NET и каталог именованных параметров. Подходит для SMS, email, push и других текстовых уведомлений. Библиотека подготавливает текст. Отправку и правила конкретного канала реализует приложение.

Version: 0.1.0 Build and tests License: MIT NuGet

.NET 10.0 .NET Framework 4.5.2 Dynamics CRM 2015 SQL Server Docs: EN / RU

Пакеты

Пакет Платформа Назначение
DevelKit.MessageTemplates net452; net10.0 Парсер, форматтер, каталог параметров, кеш и независимый план чтения
DevelKit.MessageTemplates.DynamicsCrm net452 Адаптер Dynamics CRM 2015 SDK 7.0.0.1
DevelKit.MessageTemplates.SqlServer net10.0 Генерация SQL Server и параметризованного DbCommand

Адаптеры зависят от ядра и подключаются отдельно. Ядро не имеет внешних runtime-зависимостей. Текущая версия: 0.1.0. Пакеты уже доступны на NuGet.org по ссылкам в таблице выше. Стабильная версия 0.1.0 подготовлена в исходниках и локальных пакетах. До её отдельной публикации на NuGet.org доступна 0.1.0-preview.3.

Быстрый пример без базы

using DevelKit.MessageTemplates;

var template = TextTemplateParser.Parse(
    "Здравствуйте, {{person:name}}! Встреча {{meeting:startsAt(dd.MM.yyyy HH:mm)}}.");

// Значения можно получить из уже загруженных данных приложения.
var text = TextTemplateFormatter.Format(template, parameter =>
    parameter.FieldName switch
    {
        "name" => "Анна",
        "startsAt" => new DateTime(2026, 9, 15, 14, 30, 0),
        _ => null
    });

Console.WriteLine(text);
// Здравствуйте, Анна! Встреча 15.09.2026 14:30.

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

Язык шаблонов

Поле: {{person:name}}
Формат: {{meeting:startsAt(dd.MM.yyyy HH:mm)}}
Связь: {{meeting:guest{{person:name}}}}
Условие: {{meeting:if[[isOnline = true ? meetingUrl ; address]]}}

Именованный параметр раскрывается перед разбором текста:

var aliases = new[]
{
    new TemplateAlias("{{meeting:date}}", "{{meeting:startsAt(dd.MM.yyyy)}}")
};
var expanded = TemplateAliases.Expand("Ждём вас {{meeting:date}}.", aliases);

Каталог можно загружать через ITemplateAliasRepository и кешировать с CachedTemplateAliases. После изменения каталога вызывайте Invalidate. В этой версии ключ псевдонима имеет вид {{entity:field}} без пробелов внутри имени сущности или поля.

Сборка и проверка

Для полного запуска нужны Windows, PowerShell 7, .NET SDK 10 и .NET Framework 4.8 для запуска приложений net452. Зависимости восстанавливаются с nuget.org.

./build.ps1

Скрипт собирает решение в Release, выполняет проверки ядра, SQL и CRM, запускает два примера и создаёт три пакета в artifacts. Примеры и тесты работают без серверов и учётных данных. GitHub Actions запускает тот же сценарий на Windows.

Документация и примеры

Границы применения

Шаблон выбирает данные только в пределах схемы, разрешённой приложением. Проверка SQL-идентификаторов не заменяет контроль доступа. Значения SQL передаются через DbParameter. Обе ветви if загружаются до выбора результата.

Парсер мягкий: нераспознанные фрагменты могут остаться текстом. HTML-кодирование, лимиты длины, стоимость SMS и часовые пояса задаёт приложение. План рассчитан на одну строку данных, без циклов по коллекциям. Живые CRM и SQL Server, CRM plugin sandbox и современный Dataverse не входят в автоматическую проверку.

Лицензия

MIT. Copyright (c) 2026 Maksim Moiseev (develmax).

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

Product Compatible and additional computed target framework versions.
.NET 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.1.0 100 9/8/2026
0.1.0-preview.3 61 9/8/2026