Для создания серверных модулей расширения к Pilot-Server требуется один из следующих выпусков Visual Studio
Чтобы создать новое расширение для Pilot-Server выполните следующие действия:
.servext
Например PilotServerExtension.servext
Assembly Information...
и заполните необходимые поля.Обязательно заполните поля Title, Product и Assembly version, т.к. Pilot-Server при загрузке вашего расширения будет искать информацию именно в этих полях.
Для подключения SDK Pilot к проекту расширения можно воспользоваться встроенным в Visual Studio механизмом распространения пакетов - NuGet Packages Manager.
Для того, чтобы подключить SDK с помощью Nuget Package Manager выполните следующие шаги:
Выполните команду:
Install-Package Ascon.Pilot.ServerExtensions.SDK
Щелкните правой кнопкой мыши на проекте и вызовите команду Manage NuGet Packages
;
Система расширений основана на стандартном механизме расширений приложений в .NET - Managed Extensibility Framework (MEF). SDK содержит ряд экспортируемых и импортируемых интерфейсов. К экспортируемым интерфейсам относятся интерфейсы, которые описывают тип расширения. К импортируемым интерфейсам относятся интерфейсы взаимодействия с клиентом и работы с данными.
Данный интерфейс позволяет добавить новое действие, доступное в серверных скриптах автоматизаций.
string IServerActivity.Name { get; };
Имя действия, используемое в скрипте автоматизации.
Task IServerActivity.RunAsync(IModifierBase modifier, IModifierBackend backend, IServerActivityContext serverActivityContext, IAutomationEventContext automationEventContext);
Асинхронный метод обработки запуска действия.
где:
modifier
- модификатор, позволяющий вносить изменения в объекты;backend
- обеспечивает доступ к данным системы;serverActivityContext
- контекст запуска действия, позволяющий получить параметры запуска действия;automationEventContext
- контекст события, позволяющий определить объект-источник события и другую дополнительную информацию. Пример IServerActivity:
[Export(typeof(IServerActivity))]
public class SetLastWriteTimeActivity : IServerActivity
{
public string Name => "SetLastWriteTime";
public Task RunAsync(IModifierBase modifier, IModifierBackend backend, IServerActivityContext serverActivityContext, IAutomationEventContext automationEventContext)
{
modifier.EditObject(automationEventContext.Source).SetAttribute("LastWriteTime", DateTime.UtcNow);
return Task.CompletedTask;
}
}
Контекст запуска действия, позволяющий получить параметры запуска действия.
Dictionary<string, object> IServerActivityContext.Params { get; }
Словарь параметров запуска действия, заданных в json скрипта автоматизации.
List<string> IServerActivityContext.SourceTypes { get; }
Список типов, заданных в json скрипта автоматизации, для которых должно выполняться действие.
TargetType? IServerActivityContext.Target { get; }
Определяет, должно ли действие быть применено к объекту-источнику события либо к связанным с ним объектам.
RelationType? IServerActivityContext.RelationType { get; }
Определяет, к каким типам связанных объектов должно применяться действие (применимо только в случае IServerActivityContext.Target==TargetType.Relations).
RelationFilterByChangeKind? IServerActivityContext.RelationFilterByChangeKind { get; } { get; }
Определяет, должно ли применяться действие ко всем связанным объектам, или же только к добавленным или удаленным.
Dictionary<string, string> IServerActivityContext.Errors { get; }
Список ошибок при разборе json действия.
Контекст события-триггера действия.
INObject IAutomationEventContext.Source { get; }
Объект-источник события.
IEnumerable<INChange> IAutomationEventContext.Changes { get; }
Набор изменений, в результате которого сработал триггер. Включает в себя изменение по объекту-источнику события, если он был изменен.
INPerson IAutomationEventContext.InitiatingPerson { get; }
Пользователь-инициатор события.
DateTime IAutomationEventContext.EventDate { get; }
Время наступления события в формате UTC.