================================= Создание плагина для Robin Studio ================================= Для того чтобы добавить новый плагин в проект вам нужно проделать следующие шаги: 1. Открыть проект плагинов нажать по Solution правой кнопкой мыши ``(ПКМ)`` → ``Add`` → ``New Project...``: .. figure:: images/make_plugin/AddNewProject.png **Рис.1** *Добавление нового плагина в проект Plugin* 2. Из списка предлагаемых шаблонов для создания проектов выбрать ``Class Library (.NET Framework)``. В строке ``Name`` написать название вашего плагина и выбрать Framework(если конечно он уже не стоит по умолчанию): ``.NET Framework 4.7.1.`` Далее жмем ``OK``: .. figure:: images/make_plugin/NameProject.PNG **Рис.2** *Выбор шаблона "Class Library"* 3. Кликаем ``ПКМ`` по только что созданному проекту (в данном случае Test)→ ``Properties``: .. figure:: images/make_plugin/Properties.png **Рис.3** *Свойства плагина* 4. Появится окно со свойствами вашего проекта: .. figure:: images/make_plugin/4.png **Рис.4** *Cвойства плагина по дефолту* На вкладке Application нужно поменять следующие поля: :: Assemblyname: Test→ Robin.Test, Default namespace: Test→ Robin.RobotTools, И на всякий случай перепроверить Target fraemwork должен быть: .NET Framework 4.7.1. В итоге должно получится: .. figure:: images/make_plugin/41.png **Рис.5** *Отредактированные свойства плагина* Сохраните изменения ``(Ctrl+S)``. 5. Переименуйте класс ``"Class1"`` в ``"ActionLibrary"`` и 2 папки со следующим наименованием: ``Actions`` и ``Studio``. Должно выглядеть следующим образом: .. figure:: images/make_plugin/5.png **Рис.6** *Дефолтный вид проекта плагина* 6. Добавьте в проект референсы ``System.ComponentModel.DataAnnotations`` и из Manage NuGet Packages... Скачайте пакет ``Studio.Core``, ``log4net``, ``Robot.Core``: .. figure:: images/make_plugin/6.png **Рис.7** *Добавление референсов в проект плагина* Если ссылки на пакеты добавились в packages.conf, перенести их в проджект-референс. 7. Правой кнопкой нажмите по ``Properties`` → ``Add`` → ``New Item...``: .. figure:: images/make_plugin/7.png **Рис.8** *Добавление в Properties нового ресурса* Находим шаблон ``Resources File`` и выбираем. В поле Name пишем следующие имя: ``Strings.resx`` и нажимаем ``Add``: .. figure:: images/make_plugin/addStrings.PNG **Рис.9** *Добавление ресурса с именем "Strings.resx"* После добавление появится структура ресурсного файла. В Access Modifier поменяем с ``Internal`` на ``Public`` : .. figure:: images/make_plugin/AccessModifier.PNG **Рис.10** *Переключение Access modifier с Iternal на Public* В этом ресурсном файле задаются имена реализованных действий, которые будут отображаться в Robin.(см. примеры реализованных плагинов). Проделываем теже самые шаги и для добавления ресурса для руссификации с наименованием ``"Strings.ru-RU.resx"`` 7. Добавьте в папку ``Actions`` class, например c именем вашего проекта(можно и с другим именем) он должен быть ``public``. Поменяйте в нем ``namespace`` на ``Robin.RobotTools`` Далее в этом классе вы добавляете действия своего плагина в виде методов, которые должны быть статическими. Выглядит следующим образом: .. figure:: images/make_plugin/72.png **Рис.11** *Пример дефолтного представления метода с действиями плагина* 8. В папку ``Studio`` добавляем классы с названиями действий плагина в нашем случае ``Deistvie1``, ``Deistvie2``. Проект плагина будет выглядеть следующим образом: .. figure:: images/make_plugin/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``. В итоге должно выглядеть следующим образом: .. figure:: images/make_plugin/81.png **Рис.13** *Пример дефолтного вида действия плагина* Так как в данном примере действие(Deistvie1) принимает два параметра типа int и string добавим две переменные ``Str1`` типа cpString и ``Val1`` типа cpInt: .. figure:: images/make_plugin/82.png **Рис.14** *Пример по добавлению входных параметров для действия плагина* Теперь добавим к вновь добавленным переменным атрибут ``[Display]``: .. figure:: images/make_plugin/83.png **Рис.15** *Добавление аттрибута [Display]* где: ``GroupName = "Common__InParameters"`` - ключ для группы с переменной Str1; ``Name = "Deistvie1_Str1_N"`` -ключ для наименование переменной; ``Order = 1`` - порядковый номер отображения переключения; ``ResourceType=typeof(Robin.RobotTools.Properties.Strings))`` - Возвращает или задает тип, содержащий ресурсы. Тут идет обращение к созданному ресурсному файлу (см. п. 7). Далее переходим к ресурсному файлу ``Strings.resx`` в ``Properties`` проекта и отредактируем его: .. figure:: images/make_plugin/84.png **Рис.16** *Редактирование ресурсного файла String.resx* В столбце ``Name`` указываем ``ключи``, а в столбце ``Value`` указываем ``названия`` соответственно. Есть правила именования ключей. В вики где-то зафиксировано. Надо сослаться в то место отсюда. Аналогично редактируется ресурсный файл для руссификации с наименованием ``"Strings.ru-RU.resx"``, только там соотвестенно используетсца кириллица. Далее перейдем назад к классу ``Deistvie1`` и подредактируем следующие свойства: ``CodeFunc => "Test.Deistvie1"`` - где Test-класс где находятся действия, Deistvie1- само действие; ``ParamNames=>"Val1,Str1"`` - имена параметров. В итоге получается: .. figure:: images/make_plugin/85.png **Рис.17** *Пример конечного вида действия плагина* Если действие что то возвращает, как в нашем случае: .. figure:: images/make_plugin/86.png в классе ``Deistvie2`` проделаем те же самые действия, что и в ``Deistvie1``, только еще унаследуемся от интерфейса ``IActionReturn`` реализуем его и добавим ``using Studio.Actions;``. Так как ``Deistvie`` возвращает тип ``string``, выберем из списка ``String``: .. figure:: images/make_plugin/87.png **Рис.18** *Наследование от интерфейса IActionReturn* Так же добавим атрибут ``[Display]``: .. figure:: images/make_plugin/88.png И не забудем отредактировать ресурсный файл: .. figure:: images/make_plugin/89.png В итоге класс ``Deistvie2`` должен выглядеть следующим образом: .. figure:: images/make_plugin/891.png **Рис.19** *Пример финального вида действия, которое возвращает результат* 9. Перейдем в класс ``ActionLibrary``. добавим using: :: using System.Collections.Generic; using Studio.Core.Test; Исправим ``namespace`` на ``Studio.Core`` Унаследуемся от интерфейса ``IActionLibrary`` видим следующее: .. figure:: images/make_plugin/6.png **Рис.20** *Наследование от интерфейса IActionLibrary* Сделаем поправки: .. figure:: images/make_plugin/91.png **Рис.21** *Отредактируемый класс ActionLibrary* Добавим в конструктор ``ActionLibrary`` класса наши ``действия`` и получим конечный вид нашего класса: .. figure:: images/make_plugin/92.png **Рис.22** *Конечный вид класса ActionLibrary* Зайдем в ресурсный файл и добавим в него ``Test_LB``: .. figure:: images/make_plugin/93.png также добавим ключи на названия наших действий в Robin studio: .. figure:: images/make_plugin/94.png 10. Перейдем в папку плагина нажмем пкм в данном примере на ``Test.csproj`` (имяПроектаПлагина.csproj) и откроем в notepad++(блокноте): .. figure:: images/make_plugin/10.png **Рис.23** *Открытие проекта плагина через notepad++* Строки с тэгами ``Configuration`` и ``Platform`` удаляем: .. figure:: images/make_plugin/101.png **Рис.24** *Удаление строк с тэгами Configuration и Platform* и вместо них вставляем следующие строки: :: $(SolutionDir)Bin Debug Win64 $(BIN_PATH)\$(Platform)\$(Configuration) .. figure:: images/make_plugin/102.png Далее из файла удаляем следующий контент: .. figure:: images/make_plugin/103.png и вместо него вставляем следующий контент: :: AnyCPU true full false DEBUG;TRACE prompt 4 AnyCPU pdbonly true TRACE prompt 4 AnyCPU true full false DEBUG;TRACE prompt 4 AnyCPU pdbonly true TRACE prompt 4 В итоге файл должен иметь следующий вид: .. figure:: images/make_plugin/104.png **Рис.25** *Конечный вид проекта плагина* ``Сохраняем файл``. Зайдем в свойства нашего плагина перейдем на вкладку Build и поставим галочку XML documentation file: .. figure:: images/make_plugin/105.png 11. Далее переходим в Build.sln и запускаем его: .. figure:: images/make_plugin/106.png ``ПКМ`` по ``Solution Build``-> ``Add`` → ``Existing project...``: .. figure:: images/make_plugin/107.png **Рис.26** *Добавление нового плагина в проект Build* В открывшемся проводнике переходи заходим в папку plugins ищем плагин в нашем случае папка ``Test`` → ``Test.csproj`` → ``Открыть``. в проекте появится плагин: .. figure:: images/make_plugin/108.png Все!!! Запустим студию и проверим новый плагин! Результат: .. figure:: images/make_plugin/109.png