Введение
Все сервисы находятся в пространстве имен Robin.Engine.Services.Interfaces, для удобства использования можно добавить директиву using
...
Блок кода |
---|
|
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;
}
} |
ActionLogger
Сервис логирования есть в родительском классе, доступен из каждого действия по имени 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); |
Примеры использования
Блок кода |
---|
language | c# |
---|
theme | RDark |
---|
linenumbers | true |
---|
|
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;
}
}
} |
ConfigurationService
Сервис для получения конфигурационных параметров, расположенных в файле %LOCALAPPDATA%\robin\env.cfg
Методы
Блок кода |
---|
|
// Получение конфигурационного значения по ключу
object GetConfigValue(string key);
// Получение всех имеющихся в конфигурационном файле ключей по регулярному выражению
List<string> GetKeys(string pattern); |
Примеры использования
Блок кода |
---|
language | c# |
---|
theme | RDark |
---|
linenumbers | true |
---|
|
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() }
};
}
}
} |
ConverterService
Сервис для получения презентационного значения для объекта (не путать с конвертацией в строку). Сервис возвращает значение объекта, представленное в удобном для чтения виде.
Методы
Блок кода |
---|
|
string GetDisplayValue(object nativeObject); |
Примеры использования
Блок кода |
---|
language | c# |
---|
theme | RDark |
---|
linenumbers | true |
---|
|
using System.Collections.Generic;
using Robin.ActionSDK;
using Robin.Engine.Services.Interfaces;
namespace Robin.SdkExamples
{
public class CheckCollection : BaseRobinAction
{
private readonly IConverterService _converterService;
public CheckCollection(IActionLogger logger, IConverterService converterService) : base(logger)
{
_converterService = converterService;
}
public override IDictionary<string, object> Execute(IDictionary<string, object> parameters)
{
var collection = (List<object>)parameters["collection"];
var displayValue = _converterService.GetDisplayValue(collection);
return new Dictionary<string, object>
{
{"displayValue", displayValue }
};
}
}
} |
DisposeService
Сервис для освобождения неуправляемых ресурсов. Метод Dispose будет вызван при завершении работы системы исполнения, даже если робот будет завершаться с ошибкой.
Методы
Блок кода |
---|
|
void RegisterResource(IDisposable disposableResource); |
Примеры использования
Блок кода |
---|
language | c# |
---|
theme | RDark |
---|
title | Пример IDisposableService |
---|
linenumbers | true |
---|
collapse | true |
---|
|
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;
}
}
} |
ResourcesFolderService
Сервис для получения полного пути до папки с ресурсами робота, в этой папке находятся файлы, которые были добавлены к роботу в студии.
После добавления в студии файла в ресурсы и использования его в параметрах действия, в действие передается имя файла. Для получения полного пути нужно соединить путь до папки с ресурсами и имя файла. Путь до этой папки каждый запуск разный.
Методы
Блок кода |
---|
|
string GetResourcesFolderPath(); |
Примеры использования
Блок кода |
---|
language | c# |
---|
theme | RDark |
---|
linenumbers | true |
---|
|
using System.Collections.Generic;
using System.IO;
using Robin.ActionSDK;
using Robin.ActionSDK.Exceptions;
using Robin.Engine.Services.Interfaces;
using Robin.Types;
namespace Robin.SdkExamples
{
public class ReadFile : BaseRobinAction
{
private readonly IResourcesFolderService _resourcesFolderService;
public ReadFile(IActionLogger logger, IResourcesFolderService resourcesFolderService) : base(logger)
{
_resourcesFolderService = resourcesFolderService;
}
public override IDictionary<string, object> Execute(IDictionary<string, object> parameters)
{
var fileName = ((RobinFilePath)parameters["fileName"]).Value;
if (!TryResolveFilePath(fileName, out var filePath))
throw new RobinException($"Файл не найден {fileName}", "Robin.Exception.FileNotFound");
var text = File.ReadAllText(filePath);
return new Dictionary<string, object>
{
{"text", text}
};
}
private bool TryResolveFilePath(string fileName, out string filePath)
{
filePath = fileName;
if (File.Exists(fileName))
return true;
filePath = Path.Combine(_resourcesFolderService.GetResourcesFolderPath(), fileName);
return File.Exists(filePath);
}
}
} |
...