Все сервисы находятся в пространстве имен Robin.Engine.Services.Interfaces, для удобства использования можно добавить директиву using
using Robin.Engine.Services.Interfaces; |
Для использования сервиса нужно добавить его в конструктор основного класса действия (класса, который наследует BaseRobinAction).
public class MyCustomAction : BaseRobinAction { private readonly IConfigurationService _configurationService; public MyCustomAction(IActionLogger logger, IConfigurationService configurationService) : base(logger) { _configurationService = configurationService; } public override IDictionary<string, object> Execute(IDictionary<string, object> parameters) { return null; } } |
Сервис логирования есть в родительском классе, доступен из каждого действия по имени Logger.
Есть перегрузки как с уже форматированной строкой, так и с коллбэком, который будет вызван, если сообщение подходит для логирования с текущим выбранным уровнем логирования сценария и текущего действия. Лог передается из действия в приложение-инициатор сессии (студия, плеер, и т. д.) и в файл лога робота.
void Debug(string message); void Debug(Func<IDictionary<string, string>> parameters); void Info(string message); void Info(Func<IDictionary<string, string>> parameters); void Warn(string message); void Warn(Func<IDictionary<string, string>> parameters); void Error(string message); void Error(Func<IDictionary<string, string>> parameters); void Business(Func<IDictionary<string, string>> parameters); |
using System.Collections.Generic; using Robin.ActionSDK; using Robin.Engine.Services.Interfaces; namespace Robin.SdkExamples { public class MyCustomAction : BaseRobinAction { public MyCustomAction(IActionLogger logger) : base(logger) { } public override IDictionary<string, object> Execute(IDictionary<string, object> parameters) { var infoMessage = (string)parameters["infoMessage"]; var debugMessage = (string)parameters["debugMessage"]; Logger.Debug(() => new Dictionary<string, string> { {"message", debugMessage} }); Logger.Info($"Получено сообщение {infoMessage}"); return null; } } } |
Сервис для получения конфигурационных параметров, расположенных в файле %LOCALAPPDATA%\robin\env.cfg
// Получение конфигурационного значения по ключу object GetConfigValue(string key); // Получение всех имеющихся в конфигурационном файле ключей по регулярному выражению List<string> GetKeys(string pattern); |
using System.Collections.Generic; using System.Linq; using Robin.ActionSDK; using Robin.Engine.Services.Interfaces; namespace Robin.SdkExamples { public class GetConfigValue : BaseRobinAction { private readonly IConfigurationService _configurationService; public GetConfigValue(IActionLogger logger, IConfigurationService configurationService) : base(logger) { _configurationService = configurationService; } public override IDictionary<string, object> Execute(IDictionary<string, object> parameters) { var key = (string)parameters["key"]; var pattern = (string)parameters["pattern"]; var valueByKey = _configurationService.GetConfigValue(key); var allKeys = _configurationService.GetKeys(pattern); return new Dictionary<string, object> { { "value", valueByKey }, { "keys", allKeys.Cast<object>().ToList() } }; } } } |
Сервис для освобождения неуправляемых ресурсов.
void RegisterResource(IDisposable disposableResource); |
Примеры использования
using System; using System.Collections.Generic; using Robin.ActionSDK; using Robin.Engine.Services.Interfaces; using Robin.Types; namespace Robin.SdkExamples { public class OpenFile : BaseRobinAction { private readonly IDisposeService _disposeService; public OpenFile(IActionLogger logger, IDisposeService disposeService) : base(logger) { _disposeService = disposeService; } public override IDictionary<string, object> Execute(IDictionary<string, object> parameters) { var filePath = ((RobinFilePath)parameters["filePath"]).Value; var file = new File(filePath); file.Open(); _disposeService.RegisterResource(file); return new Dictionary<string, object> { { "file", file } }; } } internal class File : IDisposable { private readonly string _filePath; private bool _isDisposed; public File(string filePath) { _filePath = filePath; } public void Open() { } public bool TryReadNextLine(out string line) { } public void Close() { } public void Dispose() { if (_isDisposed) return; Close(); _isDisposed = true; } } } |