Аннотация¶
Инструкция предназначена для разработчика пользовательских действий на платформе Robin с использованием языка программирования C# и содержит описание решения следующих задач:
- создание проекта действия,
- создание артефактов действия,
- тестирование и логирование действия,
- как интегрировать действие в ROBIN Studio.
Основные понятия¶
| Понятие | Описание |
|---|---|
| Действие | Функция (операция), повторно выполняемая пользователем с помощью компьютерной техники для решения своих повседневных задач, и реализованная в программном коде. |
| Контракт действия | Строковая константа заданного формата. Позволяет однозначно идентифицировать функциональный тип действия в системе. |
| Реализация действия | Программный код, реализующий функцию действия. |
| Версия реализации действия | Реализация действия может иметь несколько версий для каждого языка. |
| Платформа (тип) реализации действия | Язык программирования (Java, C#, Python), на котором реализовано действие. |
| Версия действия | Версия действия на пользовательском уровне. Скрывает от пользователя версию реализации и тип реализации действия. |
| Супер-действие | Чисто техническая сущность - создается в файле ListActions.xml, используется для регистрации пользовательских действий, их версий и платформ реализации в системе. |
| Определение действия | Обязательный артефакт действия, содержащий описание действия, а также его входных параметров и результата исполнения действия. Работа с описанием действия происходит только через интерфейс редактора действий. Этот файл зашифрован и хранится в пакете (архиве), его прочитать нельзя из файловой системы. |
| Описание реализации действия | Описание реализации действия хранится в файле
Более детальная информация содержится в схеме ActionImpScheme_ActionImp.xsd - см. Приложение 1. |
| Проект робота | Проект содержит функциональный план решения прикладной задачи с использованием функциональных возможностей действий. Задает последовательность выполнения действий с заданными наборами входных и выходных параметров для каждого действия из этой последовательности. |
| Проект действия | Проект, содержащий мета-информацию о действии и его пакеты |
| Maven-проект | Содержит код действия, реализованный на Java, а также его артефакты |
| .Net-проект | Содержит код действия, реализованный на C#, а также его артефакты |
| Python-проект | Содержит код действия, реализованный на Python, а также его артефакты |
| Артефакты действия |
|
Общая схема по созданию и интеграции пользовательских действия с ROBIN Studio¶
Необходимое ПО¶
Для создания .net-действий на компьютере разработчика должно быть установлено следующее ПО:
- .net framework 4.8 sdk - https://dotnet.microsoft.com/download/visual-studio-sdks
- Visual Studio 2019 - https://visualstudio.microsoft.com/ru/
- Robin.SDK в составе:
- набор стандартных библиотек и классов, необходимый для разработки действия на платформе Robin,
- Robin.ActionEditor - редактор действия,
- Robin.ActionLoader - утилита импорта пакетов с действиями в Робин Студию,
- ActionImpScheme_ActionImp.xsd - XSD-схема описания реализации действия.
Общий порядок разработки пользовательского действия¶
При разработки .net-действия и его интеграции в Студию следует придерживаться следующего порядка:
- До начала разработки действия или уже в процессе его разработки
разработчик должен определиться с его контрактом и его артефактами:
- наименование контракта
- наименование действия
- описание действия
- описание входных параметров
- описание выходных параметров
- svg-иконка
- Если разработчик определился с контрактом действия до его разработки, то он может сразу же приступить к созданию Проекта действия, а потом к его реализации в программном коде.
- Если разработчик планирует определиться с контрактом действия в процессе его разработки, то он может приступить к созданию Проекта действия уже после завершения его реализации в программном коде.
- С помощью Robin.ActionEditor разработчик:
- заполняет форму для создания определения нового действия, в
котором указаны:
- наименование контракта
- описание входных параметров
- описание выходных параметров
- выполняет сохранение определения действия в файл
*.robin-action(в процессе сохранения создается папка с проектом действия для размещения в нем пакетов и атрибутов действия)
- заполняет форму для создания определения нового действия, в
котором указаны:
- В IDE разработчика:
- создать новый проект на платформе .Net и реализовать в нем действие
- создать файл с описанием реализации действия
*.robin-impinfoи разместить его в проекте вместе с кодом - создать пакеты со скомпилированным кодом, с транзитивными зависимостями и исходным кодом (только в Enterpise)
- Далее разработчик должен импортировать из проекта программного кода
в Проект действия следующие пакеты:
- Пакет с реализацией действия
- Пакеты с транзитивными зависимостями действия
- Пакет с исходным кодом действия (только в Enterpise)
- Добавить действие через существующее или новое супер-действие в
ListActions.xml - Если было создано новое супер-действие, то его необходимо добавить в
ListGroups.xmlв подгруппу или группу супер-действий. - С помощью редактора действий
Robin.ActionEditorсоздать дистрибутив - файл с расширением*.robin-package. - С помощью утилиты импорта
Robin.ActionLoaderвыполнить публикацию пакетов в Робин Студию.
Контракт действия¶
До начала разработки действия (или уже в процессе его разработки) разработчик должен определиться с его контрактом. Для этого он должен:
- придумать или использовать уже существующее наименование вендора
- придумать или использовать уже существующую группу действий, которой будет принадлежать новое действие
- придумать наименование нового действия
- определиться с платформой, на которой разработчик предполагает создавать действие
Формат наименования контракта:
<Vendor>.<Group>.<ActionName>
<Vendor>- наименование компании разработчика действия<Group>- наименование группы действия<ActionName>- название действия
Во всех названиях действий каждое слово выделяется заглавной буквой, например: MyCustomAction.
Создание Проекта действия¶
Структура проекта действия¶
Создание Проекта действия включает в себя создание структуры папок проекта и подготовку следующих пакетов:
- Пакет с определением действия (+ документация в html внутри)
- Пакет с реализацией действия
- Пакеты с транзитивными зависимостями действия
- Пакет с исходным кодом действия (только в Enterpise)
ListActions.xml- файл со списком супер-действийListGroups.xml- файл со списком групп
Создание действия начинается с его определения. Создание определения
происходит с помощью Robin.ActionEditor, который, помимо создания
пакета, создаёт ещё и проект с действием, имеющий особую структуру
папок.
Имя папки с проектом действия задаётся в Robin.ActiorEditor при
создании проекта. Местоположение по умолчанию - папка Robin Actions
в документах пользователя.
Создание проекта действия¶
Для создания Проекта действия необходимо выполнить следующие действия:
Запустить
Robin.ActionEditorМеню/Создать(нажать на «+»):
Заполнить форму:
Нажать «Создать». В результате в папке
C:\Users\%USER%\Documents\Robin\Robin Actions\OOOTest.Const.GetPassбудет создан Проект действия со следующим списком артефактов:OOOTest.Const.GetPass.action-project- файл с Проект действиямListActions.xml- XML-файл с описанием всех действий в проектеListGroups.xml- XML-файл с описанием всех групп действий в проекте\definition\1.0.0\OOOTest.Const.GetPass-1.0.0.robin-def- шаблон XML-файла с описанием действия:
и папки для хранения файла с реализацией, исходников и зависимостей действия:
Создание определения действия (.robin-action)¶
После формирования папки проекта Robin.ActiorEditor позволяет
пользователю создать определение действия. Для этого пользователь
указывает наименование группы действий и название действия, которые
будут потом использованы при формировании контракта действия.
Наименование компании указано в конфигурации Robin.ActiorEditor, а
для варианта Enterprise - в LDAP. Начальная версия - 1.0.0.
Robin.ActiorEditor формирует пакет c определением действия (архив),
имеющий следующее название:
[компания].[группа действий].[действие]-[версия].robin-def
Пример наименования пакета:
Robin.Dialogs.ShowMessage-1.0.0.robin-def
| Описание | Допустимые значения | ||
|---|---|---|---|
| Контракт | Компания | Наименование компании, разработавшей определение действия | Буквы латинского алфавита, цифры, нижнее подчёркивание, тире |
| Группа действий | Наименование группы, к которой относится действие | Буквы латинского алфавита, цифры, нижнее подчёркивание, тире | |
| Действие | Наименование действия | Буквы латинского алфавита, цифры, нижнее подчёркивание, тире | |
| Версия | Версия | Версия
определения
действия в
формате
X.Y.Z |
Цифры, точка |
Чтобы создать XML-файл с определением действия, необходимо с помощью
Robin.ActiorEditor выполнить следующие действия:
Нажать
Меню/ОткрытьВыбрать файл с проектом действия -
MyCompany.CustomActions.CustomAction.action-project:
В результате откроется форма, в которой нужно последовательно заполнить следующие разделы определения действия:
Параметры

Результат

Завершение работы с редактором:
- Нажать «Файл/Сохранить» для сохранения определения действия
Файл с определением действия OOOTest.Const.GetPass-<x.y.z>.robin-def
будет сохранен в папку
C:\Users\<user>\Documents\Robin\Robin Actions\OOOTest.Const.GetPass\definition\<x.y.z>\,
где <x.y.z> - версия действия, начальная версия - 1.0.0, <user>
- имя пользователя на компьютере разработчика.
Документация действия¶
Документация действия подготавливается разработчиком в виде
html-документа и кладется в папку
C:\Users\<user>\Documents\Robin\Robin Actions\OOOTest.Const.GetPass\definition\<x.y.z>\documentation
Создание описания реализации действия (.robin-impinfo)¶
Файл с описанием реализации действия имеет расширение
.robin-impinfo, а его имя формируется по следующему правилу:
<Vendor>.<GroupName>.<ActionName>-<ExecType>.robin-impinfo
где:
<Vendor>- название вендора действия<GroupName>- название группы действий, к которой принадлежит действие<ActionName>- название действия<ExecType>- платформа, на которой реализовано действие
Файл хранится в проекте .Net-действия.
Далее приведены рекомендованные и обязательные элементы и их атрибуты для реализаций, а также их назначения в файле описания реализации действия:
| Имя элемента | Атрибуты элемента | Родитель элемента | Обязательность | Описание значения |
| ImplementationInfo | Да | Корневой элемент описания реализации действия | ||
| contract | Да | <vendor-name>.<action-group>.<action-name> | ||
| version | Да | Версия действия | ||
| execType | Да | Тип реализации | ||
| schemaVersion | Да | Версия xml-схемы описания реализации действия | ||
| Author | ImplementationInfo | Да | Автор | |
| RequiredInterfaces | ImplementationInfo | Да | Обязательный элемент. Должен быть даже, если ни одного требуемого интерфейса нет | |
| RequiredInterface | RequiredInterfaces | Нет | Полное название, включая namespace (или имя пакета, в зависимости от платформы) интерфейса, который требуется действию для его работы. | |
| RequireUiThread | ImplementationInfo | Да | Флаг говорящий о том, что данному действию необходим для работы графический контекст. Если реализация действия взаимодействует с UI, данное значение должно true | |
| Exceptions | ImplementationInfo | Да | Список исключений, которое может генерировать данное действие | |
| ExceptionInfo | Exceptions | Нет | Исключение | |
| DeprecatedVersions | ImplementationInfo | Нет | Список запрещенных версий реализаций данного действия | |
| DeprecatedVersion | DeprecatedVersions | Нет | Запрещенная версия реализации действия | |
| AssemblyName | ImplementationInfo | Нет | Для .NET - полное имя сборки. Элемент специфичен только для платформы .NET | |
| PackageName | ImplementationInfo | Нет | Имя пакета содержащего реализацию действия | |
| CommitHash | ImplementationInfo | Нет | Хеш комита из которого собрано действие | |
| ListPermittedOS | ImplementationInfo | Нет | Список разрешенных версий ОС | |
| PermittedOS | ListPermittedOS | Нет | Разрешенная версия ОС | |
| TypePermittedOS | PermittedOS | Нет | Тип, представляющий информацию о релизах ОС | |
| OSRelease | PermittedOS | Нет | Номер релиза | |
| OSType | PermittedOS | Нет | Разрядность ОС | |
| OSDistributorID | PermittedOS | Нет | Название дистрибутива |
Особенности создания файла .robin-impinfo для каждой платформы описаны в соответствующих каждой платформе разделах по созданию действий
Создать действие¶
Подробные инструкции создания действия на языках программирования располагаются в разделе Создание .Net-действия
Импорт действия из .Net-проекта в проект действия¶
Далее разработчик подготавливает пакеты:
- Пакет с реализацией действия
- Пакеты с транзитивными зависимостями действия
- Пакет с исходным кодом действия (только в Enterpise)
и копирует их в структуру Проекта действия.
ListActions.xml¶
Для того чтобы добавить новое действие, нужно либо создать новое
супер-действие в ListActions.xml, либо включить действие в уже
существующее супер-действие.
| Намерения пользователя | Действия пользователя |
|---|---|
| Добавление действия в существующее супер-действие | Сначала ListActions.xml
выгружается из кэша студии с
помощью утилиты импорта,
выгруженный файл включает в себя
только список супер-действий без
конкретных реализаций. После
этого пользователь добавляет
туда новое действие |
| Добавление действия в новое супер-действие | У пользователя есть пример
ListActions.xml,
поставляемый в качестве примера
в составе SDK. После этого
пользователь добавляет туда
новое действие |
ListActions.xml содержит корневой XML-элемент <ListSuperActions>,
внутри которого располагаются один или несколько XML-элементов
<SuperAction>.
Разработчик для своего нового действия должен создать новый
<SuperAction> или воспользоваться имеющимся, если он есть.
<SuperAction> имеет следующую структуру:
- заголовочную часть
<Titles/> - описательную часть
<Descriptions/> - список с контрактами
<ActionContracts/> - иконку в формате SVG
<IconSvg/>
<ActionContracts/> содержит список контрактов с реализациями
действий - <ActionContract/>
Если разработчик создал еще одну версию созданного ранее действия, то
ему необходимо в файл ListActions.xml добавить новый XML-элемент
<ActionContract/> следующего содержания:
<ActionContract contract="<контракт>" impVersion="<версия контракта>" superActionVersion="<версия супер-действия>" execType="<платформа>"/>
Пример ListActions.xml
<?xml version="1.0" encoding="utf-8"?>
<ListSuperActions
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xsi:noNamespaceSchemaLocation="http://packages.itbs.it.ru:8083/repository/raw-robin-artifacts/schemes/ListActions/1.2.0/ListActions.xsd"
schemaVersion="1.0.0"
version="1.2.0"
>
<SuperAction actionID="Const.GetPass">
<Titles>
<Title lang="ru-RU">
<content>Получить пароль</content>
</Title>
<Title lang="en-US">
<content>Get pass</content>
</Title>
</Titles>
<Descriptions>
<Description lang="ru-RU">
<content>Получить пароль</content>
</Description>
<Description lang="en-US">
<content>Get pass</content>
</Description>
</Descriptions>
<ActionContracts>
<ActionContract contract="OOOTest.Const.GetPass" impVersion="1.3.0" superActionVersion="1" execType="net" />
</ActionContracts>
<IconSvg>
<svg width="54" height="29" viewBox="0 0 54 29" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M1.42595 28.3864L1.23442 28.8482C1.47024" fill="#474F64" />
</svg>
</IconSvg>
</SuperAction>
</ListSuperActions>
ListGroups.xml¶
Если было создано новое супер-действие, то его необходимо добавить в
ListGroups.xml в подгруппу или группу супер-действий.
| Намерения пользователя | Действия пользователя |
|---|---|
| Добавление супер-действия в существующую подгруппу существующей группы | Сначала ListGroups.xml
выгружается из кэша студии с
помощью утилиты импорта,
выгруженный файл включает в себя
только структуру групп и
подгрупп без наполнения. После
этого пользователь добавляет
супер-действие туда, куда ему
нужно |
| Добавление супер-действия в существующую группу | |
| Добавление супер-действия в новую подгруппу существующей группы | |
| Добавление супер-действия в новую подгруппу новой группы | У пользователя есть пример
ListGroups.xml, поставляемый
в качестве примера составе SDK.
После этого пользователь
добавляет туда новое
супер-действие |
ListGroups.xml содержит корневой XML-элемент <ListGroups>, внутри
которого располагаются один или несколько XML-элементов <Group>.
Разработчик для своего нового действия должен создать новый элемент
<Group> или воспользоваться имеющимся, если он есть.
<Group> имеет следующую структуру:
- заголовочную часть
<Titles/> - описательную часть
<Descriptions/> - иконку в формате SVG
<IconSvg> - список с контрактами
<Actions/>
<Actions/> содержит список супер-действий - <Action/>
Пример ListGroups.xml
<?xml version="1.0" encoding="utf-8"?>
<ListGroups
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xsi:noNamespaceSchemaLocation="http://packages.itbs.it.ru:8083/repository/raw-robin-artifacts/schemes/ListGroups/1.1.0/ListGroups.xsd"
schemaVersion="1.1.0"
version="1.0.0"
>
<Group name="Const">
<Titles>
<Title lang="ru-RU">
<content>Константы</content>
</Title>
<Title lang="en-US">
<content>Const</content>
</Title>
</Titles>
<Descriptions>
<Description lang="ru-RU">
<content>Группа действий "Константы"</content>
</Description>
<Description lang="en-US">
<content>"Const" actions group</content>
</Description>
</Descriptions>
<IconSvg>
<svg width="17" height="21" viewBox="0 0 17 21" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8.5 0L0 3.77778V9.44444C0 14.6861 3.62667 19.5878 8.5 20.7778C13.3733 19.5878 17 14.6861 17 9.44444V3.77778L8.5 0ZM8.5 10.3794H15.1111C14.6106 14.2706 12.0133 17.7367 8.5 18.8228V10.3889H1.88889V5.00556L8.5 2.06833V10.3794Z" fill="#3B4C77"/>
</svg>
</IconSvg>
<Actions>
<Action actionID="Const.GetPass" />
</Actions>
</Group>
</ListGroups>
Создать дистрибутив с действием¶
Теперь можно создать дистрибутив с действием. Для этого необходимо
запустить Robin.ActionEditor и выполнить следующие действия:
- открыть Проект действия с пользовательским действием
- нажать на «Файл/Сохранить как пакет»
В результате этой операции в корне Проекта действия появится пакет с
дистрибутивом - OOOTest.Const.GetPass-1.0.0.robin-package
Импорт действия в ROBIN Studio¶
Для импорта действия в Робин Студию необходимо:
- Запустить утилиту импорта
- Выбираем подготовленный пакет для импорта -
*.robin-package - Нажимаем кнопку «импортировать»
- Нажимаем кнопку «обновить кэш»
- Запускаем Робин студию и находим добавленное действие
- Используем действие
Создание .Net-действия¶
Установка ПО
Для создания .net-действий на компьютере разработчика должно быть установлено следующее ПО:
- .Net framework 4.8 SDK и .NET Core 2.0 SDK и выше - https://dotnet.microsoft.com/download/visual-studio-sdks
- Visual Studio 2019 - https://visualstudio.microsoft.com/ru/
Создание проекта действия¶
Перед созданием проекта требуется установить пакет с шаблоном действия, для этого нужно в командной строке выполнить
dotnet new -i <%AppData%\Local\Programs\Robin Platform\Robin SDK\2.0\TemplatePack\Internal.Build.ActionTemplate.1.0.1.nupkg>
После этого в списке шаблонов появится новый шаблон:
Для создания проекта нужно выполнить команду:
dotnet new action --force -o <путь, по которому будет создан проект> --company <имя компании> --group <имя группы, к которой принадлежит действие> --action <название действия>
Все параметры должны быть написаны латинскими буквами и символами (не
позволительны русские буквы и пробелы) и будут использованы для создания
контракта в формате company.group.action.version. Также есть
опциональный параметр --actionVersion <версия действия>, значение по
умолчанию: 1.3.0.
После выполнения в указанной директории должны появиться следующие файлы:
Action.sln- решение, содержащее проект с действиемAction.csproj- проект действияAction.cs- исходный код действияCompany.Group.Action-net.robin-impinfo- информация о реализации
Указанные при создании проекта параметры будут использоваться для генерации содержимого в файлах.
Описание проекта¶
Файл Company.Group.Action-net.robin-impinfo содержит информацию о
реализации: название, издателя и версию. Ниже приведен пример созданного
файла, сгенерированного с использованием в указанных в примере
параметрах
<?xml version="1.0" encoding="UTF-8"?>
<ImplementationInfo version="$version$" contract="$company$.$group$.$action$" execType="net" schemaVersion="1.0.8">
<Author>$company$</Author>
<RequireUiThread>true</RequireUiThread>
<RequiredInterfaces>
<RequiredInterface>Robin.Engine.Services.Interfaces.IActionLogger</RequiredInterface>
</RequiredInterfaces>
<RequireUiThread>false</RequireUiThread>
<AssemblyName>$company$-Imp.$group$.$action$, Version=$version$.0, Culture=neutral, PublicKeyToken=null</AssemblyName>
<PackageName>$company$-Imp.$group$.$action$</PackageName>
</ImplementationInfo>
version- версия действия, ее необходимо поднять при создании новой версии.execType- платформа, на которой написана реализацияschemaVersion- версия схемы с определением impinfo, сейчас используется 1.0.8Author- издатель действия
Решение Action.sln содержит следующую структуру файлов
Перед редактированием кода необходимо восстановить пакеты Nuget,
используемые в проекте. Для этого, нажмите правой кнопкой мыши по
решению и выберите «Восстановить пакеты Nuget». Если пакеты были
восстановлены успешно, то сборка проекта завершится без ошибок.
Подробнее о пакетах указано ниже.
Состав пакетов SDK¶
В состав Robin SDK входят nuget-пакеты, содержащие интерфейсы и
классы, необходимые для написания действий. Ниже приведено краткое
описание пакетов и их содержимого:
| Наименование пакета | Версия пакета | Описание пакета |
|---|---|---|
nuget.build.tasks.pack |
5.3.1 | Необходим для создания
nuget пакетов с
реализацией
пользовательского
действия. Должен быть
использован во всех
действиях. |
robin.sdk.actions |
1.4.0 | Основной пакет для действий, в нем предоставлены: абстрактный класс BaseRobinAction, от которого должны наследоваться реализации действий и интерфейсы сервисов. |
Для групп действий, где несколько действий работают с общими объектами, используются nuget пакеты с определением контекстов для их дальнейшей передачи действиям. Такие пакеты имеют наименование robin.%group%.commonclasses. При разработке действий, работающих с контекстами издателя, необходимо добавить в проект соответствующий пакет CommonClasses. Список пакетов указан ниже:
robin.xml.commonclasses 1.0.0robin.web.commonclasses 2.0.0robin.ftp.commonclasses 2.0.5robin.pdf.commonclasses 1.0.1robin.word.commonclasses 2.0.2
Если тип, используемый в действии, не является нативным типом языка разработки, то необходимо включить в проект пакет с определением типа. Более подробно можно узнать в Приложении 2. Список пакетов, содержащих определение типов, указан ниже:
robin.type.filepath 2.0.0robin.type.folderpath 2.0.0robin.type.hotkeys 2.0.0robin.type.image 2.0.0robin.type.webelement 2.0.0robin.type.winelement 2.0.0robin.type.password 2.0.0
Написание реализации¶
Исходный код реализации расположен в файле Action.cs. Ниже приведен
код, полученный после генерации проекта
using Robin.ActionSDK;
using Robin.Engine.Services.Interfaces;
using System.Collections.Generic;
using System;
namespace OOO.Test
{
public class Test : BaseRobinAction
{
public Test(IActionLogger logger) : base(logger) { }
public override IDictionary<string, object> Execute(IDictionary<string, object> parameters)
{
return null;
}
}
}
Класс BaseRobinAction - абстрактный класс для действия, от которого
необходимо наследовать свое действие при разработке, находящийся в
пространстве имен Robin.ActionSDK.
Интерфейс IActionLogger содержит интерфейс для работы с классами
логирования, интерфейс находится в пространстве имен
Robin.Engine.Services.Interfaces.
В конструкторе текущего класса необходимо указать все необходимые для
работы сервисы, например, для работы с ресурсами необходимо указать в
аргументах IResourcesFolderService.
При выполнении действия роботом вызывается метод Execute, на вход
которому передается Dictionary с параметрами, указанными в действии,
результаты действия возвращаются как результат выполнения метода
Execute, при его отсутствии возвращается null, если действие
должно возвращать результат, то необходимо написать следующий фрагмент
кода.
IDictionary<string, object> result = new Dictionary<string, object>
{
{"Result", resultValue}
};
return result;
Добавление логирования¶
В конструкторе класса действия на вход был получен
IActionLogger logger. Мы можем обратиться к сервису логирования
через наследуемый атрибут Logger, сервис логирования имеет несколько
уровней логирования:
DebugInfoWarningError
При указании в студии у действия нужного уровня логирования, мы получим при выполнении логи от соответствующего уровня. Для создания логов в исходном коде необходимо вызвать
Logger.<Level>(<message>);
Например:
Logger.Error("Возникла ошибка при работе действия");
Logger.Debug("Первый этап действия завершился успешно");
Сборка проекта и создание Nuget пакета¶
При помощи утилиты nuget соберите пакет действия.
Приложение 1. Схема имплементации действия ActionImpScheme_ActionImp.xsd¶
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.5.0">
<xs:element name="ImplementationInfo">
<xs:annotation>
<xs:documentation>Корневой элемент описания реализации действия</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="RequiredInterfaces">
<xs:annotation>
<xs:documentation>Обязательный тег. Должен быть даже если ни одного требуемого интерфейса нет. (дабы отловить файлы в которые забыли это добавить)</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="RequiredInterface" type="xs:string" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>Полноге название (включая неймспейс) интерфейса, который требуется действию для его работы. (действие его запрашивает, помещая в свой конструктор)</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="DeprecatedVersions" minOccurs="0">
<xs:annotation>
<xs:documentation>Список запрещенных версий реализаций данного действия</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="DeprecatedVersion" type="xs:string" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>Запрещенная версия реализации действия</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Author" type="xs:string" minOccurs="0">
<xs:annotation>
<xs:documentation>Автор последних изменений</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Build" type="xs:string" minOccurs="0">
<xs:annotation>
<xs:documentation>Номер билда</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="DateBuild" type="xs:dateTime" minOccurs="0">
<xs:annotation>
<xs:documentation>Дата и время сборки действия</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="RequireUiThread" type="xs:boolean" minOccurs="0">
<xs:annotation>
<xs:documentation>Флаг говорящий о том, что данному действию необходим для работы графический контекст</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="AssemblyName" type="xs:string" minOccurs="0">
<xs:annotation>
<xs:documentation>Для .NET - полное имя сборки</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="PackageName" type="xs:string" minOccurs="0">
<xs:annotation>
<xs:documentation>Имя пакета содержащего реализацию действия</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="CommitHash" type="xs:string" minOccurs="0">
<xs:annotation>
<xs:documentation>Хеш комита из которого собрано действие</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Exceptions" minOccurs="0">
<xs:annotation>
<xs:documentation>Список исключений, которое может генерировать данное действие</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="ExceptionInfo" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="typeID" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>Идентификатор типа исключения</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute ref="version" use="required">
<xs:annotation>
<xs:documentation>Версия описания типа исключения</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ListPermittedOS" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="PermittedOS" type="TypePermittedOS" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute ref="version" use="required"/>
<xs:attribute name="contract" type="xs:string" use="required"/>
<xs:attribute name="schemaVersion" type="xs:string" use="required"/>
<xs:attribute name="execType" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:attribute name="version" type="xs:string">
<xs:annotation>
<xs:documentation>Версия чего либо</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:complexType name="TypePermittedOS">
<xs:annotation>
<xs:documentation>Тип представляющий информацию о релизах ОС</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="OSDistributorID" type="xs:string">
<xs:annotation>
<xs:documentation>Название дистрибутива</xs:documentation>
<xs:documentation>Позволительно указывать перечисление дистрибутивов ОС через запятую (для линукса справедливо) Позволительно вообще не указывать данный атрибут и это значить любой дистрибутив ОС</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="OSRelease" type="xs:string" minOccurs="0">
<xs:annotation>
<xs:documentation>Номер релиза</xs:documentation>
<xs:documentation>Позволительно префиксом указывать ">=" что означает от данной версии и выше. Позволительно указывать перечисление версий ОС через запятую. Позволительно вообще не указывать данный атрибут и это значить любая версия ОС</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="OSType" default="64" minOccurs="0">
<xs:annotation>
<xs:documentation>разрядность ОС</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:enumeration value="32"/>
<xs:enumeration value="64"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:schema>
Приложение 2. Типы в SDK Robin¶
Тип Robin.Boolean¶
Сериализация типа: Да
Нативный тип .NET: System.Boolean
Презентационное значение объекта: Получается с помощью
toString()
Пример: true
Тип Robin.Collection¶
Сериализация типа: Да
Нативный тип .NET: List<object>
Презентационное значение объекта: Количество записей в коллекции.
Получается с помощью toString()
Пример: Записей = 5 - выдает число элементов (записей) в
коллекции.
Тип Robin.DataTable¶
Сериализация типа: Да
Нативный тип .NET: System.Data.DataTable
Презентационное значение объекта: Получается с помощью
toString()
Пример: Столбцов = 45, Строк = 74 - выдает число столбцов и
строк в таблице.
Тип Robin.DateTime¶
Сериализация типа: Да
Нативный тип .NET: System.DateTime
Презентационное значение объекта: Получается с помощью
toString()
Пример: Дата и время в формате dd-MM-yyyy HH:mm:ssXXX:
22-07-2020 10:17:34 +03:00
Тип Robin.Dictionary¶
Сериализация типа: Да
Нативный тип .NET:
System.Collections.Generic.Dictionary<string, object>
Презентационное значение объекта: Получается с помощью
toString()
Пример: Записей = 68 - выдает число элементов (записей) в
словаре.
Тип Robin.Exception¶
Сериализация типа: Нет
DTO-тип .NET: Robin.SDK.Types.Interfaces.RobinException из
Nuget-пакета Robin.SDK.Actions.1.3.0
Презентационное значение объекта: Получается с помощью
toString()
Пример: Поля структуры ошибки, выведенные каждое на новой строке:
- Тип: …
- Сообщение: …
- Источник: …
- Дополнительная информация: ключ=значение, ключ=значение
- Вложенное исключение: есть/нет
Тип Robin.FilePath¶
Сериализация типа: Да
DTO-тип .NET: Robin.Type.RobinFilePath из Nuget-пакета
Robin.Type.FilePath.2.0.0
Презентационное значение объекта: Получается с помощью
toString()
Пример: C://Temp/1.txt - строка внутри обёртки FilePath
Тип Robin.FolderPath¶
Сериализация типа: Да
DTO-тип .NET: Robin.Type.RobinFolderPath из Nuget-пакета
Robin.Type.RobinFolderPath.2.0.0
Презентационное значение объекта: Получается с помощью
toString()
Пример: C://Temp/1.txt - строка внутри обёртки FolderPath
Тип Robin.HotKeys¶
Сериализация типа: Да
DTO-тип .NET: Robin.Type.RobinHotKeys из Nuget-пакета
Robin.Type.RobinHotKeys.2.0.0
Презентационное значение объекта: Отсутствует
Пример:
Тип Robin.Image¶
Сериализация типа: Да
DTO-тип .NET: Robin.Type.RobinImage из Nuget-пакета
Robin.Type.RobinImage.2.0.0
Презентационное значение объекта: Получается с помощью
toString()
Пример: C://Temp/1.png - строка внутри обёртки Image
Тип Robin.LocationPoint¶
Сериализация типа: Да
Нативный тип .NET: System.Drawing.Point
Презентационное значение объекта: Получается с помощью
toString()
Пример: (24, 32) - координаты точки в формате (x, y)
Тип Robin.Numeric¶
Сериализация типа: Да
Нативный тип .NET: double
Презентационное значение объекта: Получается с помощью
toString()
Пример: 28.5
Тип Robin.Object¶
Сериализация типа: Нет
Нативный тип .NET: object
Презентационное значение объекта: Отсутствует
Пример:
Тип Robin.Password¶
Сериализация типа: Да
DTO-тип .NET: Robin.Type.RobinPassword из Nuget-пакета
Robin.Type.RobinPassword.2.0.0
Презентационное значение объекта: Отсутствует
Пример:
Тип Robin.RectangleSize¶
Сериализация типа: Да
Нативный тип .NET: System.Drawing.Size
Презентационное значение объекта: Получается с помощью
toString()
Пример: 240 x 320 - размер прямоугольной области в формате W x H
Тип Robin.Selenium¶
Сериализация типа: Нет
Нативный тип .NET: object
Презентационное значение объекта: Отсутствует
Пример: Экземпляр Web-драйвера
Тип Robin.String¶
Сериализация типа: Да
Нативный тип .NET: string
Презентационное значение объекта: Сама строка и является презентационным значением объекта
Пример: Строка объекта
Тип Robin.WebElement¶
Сериализация типа: Да
DTO-тип .NET: Robin.Type.RobinWebElement из Nuget-пакета
Robin.Type.RobinWebElement.2.0.0
Презентационное значение объекта: Выводится одно из полей структуры.
Какое поле выводить указано в поле activeAttribute этой же
структуры.
Пример:
Тип Robin.WinElement¶
Сериализация типа: Да
DTO-тип .NET: Robin.Type.RobinWinElement из Nuget-пакета
Robin.Type.RobinWinElement.2.0.0
Презентационное значение объекта:
Пример:
Тип Robin.XmlDoc¶
Сериализация типа: Да
Нативный тип .NET: System.Xml.XmlDocument
Презентационное значение объекта: XML представление xml документа(при презентации пользователю в виде одной строки - обрезается (программой презентующей), но есть возможность посмотреть полный текст.
Пример:
Тип Robin.Email¶
Сериализация типа: Нет
Нативный тип .NET: нет соответствия
Презентационное значение объекта: Отсутствует
Пример:
Тип Robin.FTP¶
Сериализация типа: Нет
Нативный тип .NET: нет соответствия
Презентационное значение объекта: Отсутствует
Пример:
Тип Robin.MQ¶
Сериализация типа: Нет
Нативный тип .NET: нет соответствия
Презентационное значение объекта: Отсутствует
Пример:
Тип Robin.PDF¶
Сериализация типа: Нет
Нативный тип .NET: нет соответствия
Презентационное значение объекта: Отсутствует
Пример:
Тип Robin.SpreadSheets¶
Сериализация типа: Нет
Нативный тип .NET: нет соответствия
Презентационное значение объекта: Отсутствует
Пример:
Тип Robin.Word¶
Сериализация типа: Нет
Нативный тип .NET: нет соответствия
Презентационное значение объекта: Экземпляр Word
Пример:
Тип Robin.XML¶
Сериализация типа: Нет
Нативный тип .NET: нет соответствия
Презентационное значение объекта: Отсутствует
Пример: