6.3.3 Чтение конфигурации фоновой задачи
Каждая фоновая задача запускается с определенным набором параметров. Такими параметрами являются время создания, время последнего изменения, следующего запуска, сообщение ФЗ, ошибки и др. Они отображаются в таблице фоновых задач на странице управления ФЗ. Данные параметры обычно не используются напрямую при разработке ФЗ, время следующего запуска устанавливается при выполнении метода CalculateNextTime для системной и автоматической ФЗ, сообщение устанавливается по методу MarkInfoMessage, ошибка по методу MarkInfoError.
Для классов, наследующих BaseEventDispatcher / BaseDispatcher, получение параметров ФЗ реализовано через методы GetDefaultAppSettingsParams<T>(), GetJobAppSettingsParams<T>(). Для классов, наследующих BaseDaemon конфигурацию, необходимо получать с помощью методов сервиса IAppSettingsService.
Для всех фоновых задач также доступен параметр UserID (идентификатор пользователя), указанного в настройках пула хоста, по умолчанию WFAGENT. Данный параметр обычно используется для указания пользователя для контекста соединения с БД. Чтобы получить значение данного параметра используется метод загрузки конфигурации сервера ФЗ DaemonsDomain.Instance.LoadDomainConfiguration().UserID.
Для фоновых задач, которые поддерживают различные экземпляры (экземплярные), автоматические вида DaemonKind.JOB, присутствует параметр JobId, содержащий идентификатор текущего выполняемого экземпляра. Для получения значения параметра используется метод GetParam(“JobId”).
Для получения пользовательской конфигурации (в случае указания в атрибуте Daemon значения DaemonTypeConfig.USER_CONFIG) фоновой задачи используются методы GetJobAppSettingsParams<T>() – настройки экземпляра ФЗ и GetDefaultAppSettingsParams<T>() – общие настройки ФЗ. В параметре T указывается immutable класс настроек, сохраняемых в таблице app_setting, в проекте ФЗ необходимо описать immutable класс настроек, а также зарегистрировать в методе ConfigureServices класса Startup.
В классе настроек для параметра, содержащего список значений, например, множественный выбор из справочника, задается тип IReadOnlyList<T>, где T – тип элементов в списке. Для числовых значений задается тип long.
Работа с AppSettings описана в Приложение В.
Описание конфигурационного файла для ФЗ с пользовательской конфигурацией описано в пункте “4.1 Подготовка конфигурационного файла”.
Классы настроек криптографии и электронной почты содержатся в Eos.Delo.Platform.Storage.Model, с namespace Eos.Delo.Settings.Cryptography и в Eos.Platform.Notification.Email с namespace Eos.Platform.Settings.Email соответственно.
Пример класса конфигурации ФЗ:
|
// Класс конфигурации фоновой задачи
namespace Eos.Delo.Settings.TestDaemon
{
public class DaemonCfg
{
public string Directory { get; init; }
public bool CheckPlanDate { get; init; }
public string EmailCfgInstanceId { get; init; }
public string CryptographyCfgInstanceId { get; init; }
public string StorageName { get; init; }
}
}
|
Получение параметров в коде ФЗ:
|
// Получение параметров фоновой задачиusing Eos.Platform.AppSettings;using Eos.Platform.Settings.Email;
using Eos.Delo.Settings.TestDaemon;
using Eos.Delo.Settings.Cryptography;
namespace Eos.Delo.TestDaemons.Daemons.Module
{
[Daemon("Тестовая группа", "Тестовая ФЗ", "Описание ФЗ", 1.0, DaemonKind.MANUAL, DaemonTypeConfig.AUTO_CONFIG, typeof(DaemonCfg))]
public class TestDispatcher : BaseDispatcher
{
private DaemonCfg _cfg;
private CommonCfg _emailCommonCfg;
private SendCfg _emailSendCfg;
private CryptographyCfg _cryptoCfg;
private string _storagePath;
protected override void FillParams()
{
MarkInfoMessage(“Получение параметров ФЗ”);
InContext((context, provider) => {
var appSettingsSrv = provider.GetRequiredService<IAppSettingsService>();
//для получения настроек хранилищ используется LibLibraryCachingService
var libService = provider.GetRequiredService<LibLibraryCachingService>();
var libLibraries = libService.GetOrAddAsync().Result;
_cfg = appSettingsSrv.GetAsync<DaemonCfg>().Result;
//Общие настройки email
_emailCommonCfg = appSettingsSrv.GetAsync<CommonCfg>(_cfg.EmailCfgInstanceId).Result;
//Настройки отправки email
_emailSendCfg = appSettingsSrv.GetAsync<SendCfg>(_cfg.EmailCfgInstanceId).Result;
//Настройки криптографии
_cryptoCfg = appSettingsSrv.GetAsync<CryptographyCfg>(_cfg.CryptographyCfgInstanceId).Result;
//определение пути к хранилищу зависит от ОС
if (OperatingSystem.IsLinux())
{
var baseVarDirPath = Abstractions.DI.StaticServiceProvider.GetService<IConfiguration>().GetValue<string>("Eos:BaseVarDirPath");
var mountName = libLibraries.GetMountName(_cfg.StorageName);
_storagePath = Path.Combine(baseVarDirPath, mountName);
}
else
{
_storagePath = libLibraries.GetStoragePath(_cfg.StorageName);
}
}
protected override void WorkProcess()
{
MarkInfoMessage(TestLocalization.StartWorkProcess);
//Обработка объектов фоновой задачей
}
}
}
|
Для загрузки конфигурации ФЗ в классе-наследнике BaseDaemon используется сервис IAppSettingsService. Также для ДЕЛО API 2009.
Пример получения конфигурации:
|
using IServiceScope serviceScope = DaemonsDomain.Instance.ServiceProvider.GetRequiredService<IServiceScopeFactory>().CreateScope();
IServiceProvider serviceProvider = serviceScope.ServiceProvider;
var appSettingsService = serviceProvider.GetRequiredService<IAppSettingsService>();
var commonParams = appSettingsService.GetAsync<CommonAddresseeDirectionCfg>().Result;
string jobId = GetParam("JobId");
var jobParams = appSettingsService.GetAsync<JobAddresseeDirectionCfg>(jobId).Result;
|
Для регистрации класса для работы через API с использованием стандартного обработчика MutationLogic (проверка права системного технолога и права Параметры системы) используйте метод расширения в Eos.Delo.Platform.Storage.Extensions:
|
// Регистрация класса для работы через API
public class Startup : IModule
{
public void ConfigureServices(IServiceCollection services)
{
services.AddAppSettingsTypeMappingServicePartWithDefaultLogic(new HashSet<Type>() { typeof(DaemonCfg) });
}
}
|
API системных настроек (APP_SETTINGS) описаны в 8.3. API системных настроек (APP_SETTINGS).
Пример регистрации класса см. в дистрибутиве системы в архиве «APISamples.zip» (проект Eos.Delo.Samples.AppSettings.Module).
