Создание плагина для Robin Studio

Для того чтобы добавить новый плагин в проект вам нужно проделать следующие шаги:

  1. Открыть проект плагинов нажать по Solution правой кнопкой мыши (ПКМ)AddNew Project...:
_images/AddNewProject.png

Рис.1 Добавление нового плагина в проект Plugin

2. Из списка предлагаемых шаблонов для создания проектов выбрать Class Library (.NET Framework). В строке Name написать название вашего плагина и выбрать Framework(если конечно он уже не стоит по умолчанию): .NET Framework 4.7.1. Далее жмем OK:

_images/NameProject.PNG

Рис.2 Выбор шаблона «Class Library»

  1. Кликаем ПКМ по только что созданному проекту (в данном случае Test)→ Properties:
_images/Properties.png

Рис.3 Свойства плагина

  1. Появится окно со свойствами вашего проекта:
_images/4.png

Рис.4 Cвойства плагина по дефолту

На вкладке Application нужно поменять следующие поля:

Assemblyname: Test→ Robin.Test,
Default namespace: Test→ Robin.RobotTools,
И на всякий случай перепроверить Target fraemwork должен быть: .NET Framework 4.7.1.

В итоге должно получится:

_images/41.png

Рис.5 Отредактированные свойства плагина

Сохраните изменения (Ctrl+S).

5. Переименуйте класс "Class1" в "ActionLibrary" и 2 папки со следующим наименованием: Actions и Studio. Должно выглядеть следующим образом:

_images/5.png

Рис.6 Дефолтный вид проекта плагина

  1. Добавьте в проект референсы System.ComponentModel.DataAnnotations и из Manage NuGet Packages… Скачайте пакет Studio.Core, log4net, Robot.Core:
_images/6.png

Рис.7 Добавление референсов в проект плагина

Если ссылки на пакеты добавились в packages.conf, перенести их в проджект-референс.

  1. Правой кнопкой нажмите по PropertiesAddNew Item...:
_images/7.png

Рис.8 Добавление в Properties нового ресурса

Находим шаблон Resources File и выбираем. В поле Name пишем следующие имя: Strings.resx и нажимаем Add:

_images/addStrings.PNG

Рис.9 Добавление ресурса с именем «Strings.resx»

После добавление появится структура ресурсного файла. В Access Modifier поменяем с Internal на Public :

_images/AccessModifier.PNG

Рис.10 Переключение Access modifier с Iternal на Public

В этом ресурсном файле задаются имена реализованных действий, которые будут отображаться в Robin.(см. примеры реализованных плагинов).

Проделываем теже самые шаги и для добавления ресурса для руссификации с наименованием "Strings.ru-RU.resx"

7. Добавьте в папку Actions class, например c именем вашего проекта(можно и с другим именем) он должен быть public. Поменяйте в нем namespace на Robin.RobotTools Далее в этом классе вы добавляете действия своего плагина в виде методов, которые должны быть статическими. Выглядит следующим образом:

_images/72.png

Рис.11 Пример дефолтного представления метода с действиями плагина

  1. В папку Studio добавляем классы с названиями действий плагина в нашем случае Deistvie1, Deistvie2. Проект плагина будет выглядеть следующим образом:
_images/8.png

Рис.12 Пример дефолтного вида проетка плагина

Откроем класс Deistvie1. Добавим:

using Studio.Core.Base;
using Studio.Core.CustomProperties;
using System;
using System.ComponentModel.DataAnnotations;

Поменяем на namespace Studio.Core.ИмяПроекта в нашем случае Studio.Core.Test. Добавим два атрибута к классу:

[Serializable]
[Actions.Serialization.StudioSerialization(Guid, DisplayName)]

Guid должен быть уникальным для каждого действия!

И унаследуемся от класса abstracAction. В итоге должно выглядеть следующим образом:

_images/81.png

Рис.13 Пример дефолтного вида действия плагина

Так как в данном примере действие(Deistvie1) принимает два параметра типа int и string добавим две переменные Str1 типа cpString и Val1 типа cpInt:

_images/82.png

Рис.14 Пример по добавлению входных параметров для действия плагина

Теперь добавим к вновь добавленным переменным атрибут [Display]:

_images/83.png

Рис.15 Добавление аттрибута [Display]

где:

GroupName = "Common__InParameters" - ключ для группы с переменной Str1; Name = "Deistvie1_Str1_N" -ключ для наименование переменной; Order = 1 - порядковый номер отображения переключения; ResourceType=typeof(Robin.RobotTools.Properties.Strings)) - Возвращает или задает тип, содержащий ресурсы. Тут идет обращение к созданному ресурсному файлу (см. п. 7). Далее переходим к ресурсному файлу Strings.resx в Properties проекта и отредактируем его:

_images/84.png

Рис.16 Редактирование ресурсного файла String.resx

В столбце Name указываем ключи, а в столбце Value указываем названия соответственно.

Есть правила именования ключей. В вики где-то зафиксировано. Надо сослаться в то место отсюда.

Аналогично редактируется ресурсный файл для руссификации с наименованием "Strings.ru-RU.resx", только там соотвестенно используетсца кириллица.

Далее перейдем назад к классу Deistvie1 и подредактируем следующие свойства:

CodeFunc => "Test.Deistvie1" - где Test-класс где находятся действия, Deistvie1- само действие; ParamNames=>"Val1,Str1" - имена параметров.

В итоге получается:

_images/85.png

Рис.17 Пример конечного вида действия плагина

Если действие что то возвращает, как в нашем случае: .. figure:: images/make_plugin/86.png

в классе Deistvie2 проделаем те же самые действия, что и в Deistvie1, только еще унаследуемся от

интерфейса IActionReturn реализуем его и добавим using Studio.Actions;. Так как Deistvie возвращает тип string, выберем из списка String:

_images/87.png

Рис.18 Наследование от интерфейса IActionReturn

Так же добавим атрибут [Display]:

_images/88.png

И не забудем отредактировать ресурсный файл:

_images/89.png

В итоге класс Deistvie2 должен выглядеть следующим образом:

_images/891.png

Рис.19 Пример финального вида действия, которое возвращает результат

  1. Перейдем в класс ActionLibrary.

добавим using:

using System.Collections.Generic;
using Studio.Core.Test;

Исправим namespace на Studio.Core Унаследуемся от интерфейса IActionLibrary видим следующее:

_images/6.png

Рис.20 Наследование от интерфейса IActionLibrary

Сделаем поправки:

_images/91.png

Рис.21 Отредактируемый класс ActionLibrary

Добавим в конструктор ActionLibrary класса наши действия и получим конечный вид нашего класса:

_images/92.png

Рис.22 Конечный вид класса ActionLibrary

Зайдем в ресурсный файл и добавим в него Test_LB:

_images/93.png

также добавим ключи на названия наших действий в Robin studio:

_images/94.png
  1. Перейдем в папку плагина нажмем пкм в данном примере на Test.csproj (имяПроектаПлагина.csproj) и откроем в notepad++(блокноте):
_images/10.png

Рис.23 Открытие проекта плагина через notepad++

Строки с тэгами Configuration и Platform удаляем:

_images/101.png

Рис.24 Удаление строк с тэгами Configuration и Platform

и вместо них вставляем следующие строки:

<BIN_PATH Condition="'$(BIN_PATH)'==''">$(SolutionDir)Bin</BIN_PATH>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">Win64</Platform>
<OutputPath>$(BIN_PATH)\$(Platform)\$(Configuration)</OutputPath>
_images/102.png

Далее из файла удаляем следующий контент:

_images/103.png

и вместо него вставляем следующий контент:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|Win32' ">
    <PlatformTarget>AnyCPU</PlatformTarget>
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|Win32' ">
    <PlatformTarget>AnyCPU</PlatformTarget>
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|Win64' ">
    <PlatformTarget>AnyCPU</PlatformTarget>
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|Win64' ">
    <PlatformTarget>AnyCPU</PlatformTarget>
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
</PropertyGroup>

В итоге файл должен иметь следующий вид:

_images/104.png

Рис.25 Конечный вид проекта плагина

Сохраняем файл.

Зайдем в свойства нашего плагина перейдем на вкладку Build и поставим галочку XML documentation file:

_images/105.png
  1. Далее переходим в Build.sln и запускаем его:
_images/106.png

ПКМ по Solution Build-> AddExisting project...:

_images/107.png

Рис.26 Добавление нового плагина в проект Build

В открывшемся проводнике переходи заходим в папку plugins ищем плагин в нашем случае папка TestTest.csprojОткрыть.

в проекте появится плагин:

_images/108.png

Все!!!

Запустим студию и проверим новый плагин!

Результат:

_images/109.png