=================================
Создание плагина для 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