Как стать автором
Обновить

Что делать, если для постройки робота не хватает кубиков?

Программирование *.NET *Разработка под Windows *
Моя предыдущая статья была написана, в первую очередь, для менеджеров проектов и руководителей направления RPA. Эту статью я хотел бы адресовать, в первую очередь, программистам и тем, кому приходится с роботизацией сталкиваться face-to-face.

Первые несколько процессов, которые приходится создавать новоиспеченному программиста RPA, обычно обходятся набором стандартных «кубиков», которые лежат в коробке с платформой. Но что если их не хватает? Почти любую современную платформу RPA можно тем или иным способом расширить, будь то вызов метод DLL в AA, код на Groovy в WF или Code Stage в BP.

Но эта статья написана о платформе, с которой я хорошо знаком (UiPath), поэтому тем, кто предпочитает другие вкусы и цвета роботов — заранее просьба не обижаться.



Хотя некоторые вещи в статье достаточно банальны и их можно узнать, пройдя соответствующие курсы, почитав документацию или изучив форум, как мне кажется, многим будет полезно увидеть их в одном месте, в виде статьи на русском языке. Если у вас появятся дополнения или замечания — я постараюсь статью доработать, чтобы она была максимально полезной и актуальной.
Способы расширения функциональности в статье идут от самого простого (скачать готовое) к самому сложному (написать свое).

Магазин приложений


Хитовые решения на UiPath Go!

С конца 2018 года у UiPath есть что-то вроде «магазина приложений», который называется Go. Разработчики со всего света, и, в том числе, сами сотрудники компании, делятся полезными (или не очень) пользовательскими действиями, кусками кода, шаблонами для приложений и другими полезными разработками, которые значительно упрощают жизнь.

Там есть много всякого, например отличный коннектор к Salesforce, который берет на себя львиную долю работы или написанный самим Abbyy коннектор к Abby Flexicapture.

Сейчас это рекомендованный самим производителем способ расширения функциональности, более того, туда уже началась миграция расширений, которые раньше жили в официальном репозитории NuGet (Галерее).

В PackageManager смотрели?


UiPath PackageManager

Немножко более хардкорный, но, все еще, вполне доступный обычному пользователю, способ — это использование функционала менеджера пакетов.

Реализован он через NuGet, а значит, что помимо использования «общественных» репозиториев, никто нам не мешает поднять свой и использовать его внутри компании для распространения действий и библиотек собственной разработки.

Ищем в менеджере пакетов по ключевому слову UiPath и получаем большое количество разных действий, которые резко увеличивают наши возможности, не требуя от нас никаких усилий.

Таким образом, сейчас, распространяются, в том числе и вполне официальные компоненты платформы, такие как Web Activities Pack (для работы с SOAP и REST API), Word (на основе Xceed DocX) или Zip (для работы угадайте с чем).

Репозитории, где лежат основные «вкусности»:


Через Invoke Code


Самый простой и быстрый способ добавить функциональность в ваш процесс, если не хватает готовых «кубиков» и не удалось их найти.

Можно написать небольшой кусок кода на VB.Net и вставить его в действие InvokeCode. Так можно, например, работать с хитрыми вызовами API на Rest, в случаях, когда стандартного UiPath.Web.Activities.HttpClient не хватает или использовать внешние библиотеки, такие как Xceed DocX или PdfSharp.
Не стоит увлекаться этим и другими подобными методами, если у вас больше чем 10 строчек кода внутри InvokeCode. Хотя там и действует Intellisense и валидация, за поддержку таких «программ» коллеги вас не поблагодарят. Вынесите их в пользовательское действие или внешнюю программу, благо методов для этого достаточно.
Из похожего еще есть Invoke Method, который, в принципе, позволяет вызвать метод любого класса, который добавляется в проект через зависимости.
Например вот тут он используется для разархивирования архива

Пример использования Invoke Method

Через Invoke <еще что-нибудь>


Помимо «родного» VB.NET UiPath позволяет использовать и множество других методов программирования, как говорится «на все вкусы, на все нужды».

Powershell


Powershell Excel

Если не хватает VB.NET, на помощь приходят другие языки программирования. Например, с офисными приложениями, бывалому админу будет удобно работать через Powershell, и использовать, соответственно, действие Invoke Power Shell.

В том же Outlook, например, можно бесконечно жать кнопки, чтобы сделать то, что с помощью PS делается парой команд.

Вот такой скрипт, например, вернет последнее письмо в произвольной папке
Add-type -assembly "Microsoft.Office.Interop.Outlook" | out-null
$olFolders = "Microsoft.Office.Interop.Outlook.olDefaultFolders" -as [type]
$outlook = new-object -comobject outlook.application
$namespace = $outlook.GetNameSpace("MAPI")
$inbox = $namespace.getDefaultFolder($olFolders::olFolderInbox)
$folder = $inbox.Folders.Item(“Название папки”)
($folder.Items.Restrict('[UnRead] =   True') | Select-Object -Last 1)


COM-объекты


В современных системах потребность в этом, конечно, уже не так велика, но с помощью Invoke COM Methodможно обратится к функциональности, зарытой в какую-нибудь DLL.

VBA


Если вы работаете с Excel, можно «натравить» на него VBA-скрипт через запуск Invoke VBA. Скрипт должен лежать в отдельном файле (это удобно, учитывая, что сейчас офисные файлы с макросами не очень в почете). Такое будет удобно тем, кто хорошо умеет программировать на VBA и не желает бросать наработанные библиотеки.

Python


Большим подспорьем для работы с ML и всякими вычислениями является возможность встраивания в процесс питоньих скриптов. Чтобы начать с ними работать необходимо сделать несколько дополнительных телодвижений. Во-первых, эти действия теперь выложены в классный, но не поддерживаемый официально набор действий Community Activities на GitHub. Во-вторых, нужно поставить Python, причем обязательно версии 3.6 и обязательно в корень диска C.
Кстати, в том же Community Activities есть и криптография, и FTP и еще несколько потенциально полезных штук.

Документацию и (устаревший) пример кода можно скачать здесь. Если кому-то понадобится помощь с интеграцией UiPath и Python — пишите, попробую рассказать подробнее.

Java


Примерно тоже самое — пакет собирается самостоятельно из Community Activities. Поддерживается .jar-файлы, собранные с использованием JDK 1.5 и выше. Путь к Java должен быть прописан в PATH.

На сайте UiPath есть документация по использованию и пример процесса с использованием Java.

Через пользовательские действия


К сожалению, не всем подходит вариант с использованием магазина приложений или чужих пакетов. Часто, например, служба безопасности не разрешат использовать куски роботов, написанные не вендором и не внутри компании. Тогда приходится засучить рукава.

Платформа UiPath построена с использованием Microsoft Workflow Foundation. Для нас это значит, что всегда можно написать свое действие (Activity) и добавить в процесс. Если предполагается активное использование бизнес-пользователями, действию можно сделать красивый пользовательский UI с помощью дизайнера форм, а если нужно побыстрее — то сойдет и простой прямоугольничек, настраиваемый из Properties.

К счастью, процесс создания действия документирован, хоть и не очень подробно, но всегда можно воспользоваться масштабной [документацией MS](https://docs.microsoft.com/en-us/dotnet/framework/windows-workflow-foundation/) по написанию действий и статьями о них в интернете.

Пример простейшего действие на C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Activities;
using System.ComponentModel;

namespace ClassMathCustomActivity
{
    public class SimpleFormula : CodeActivity
    {
        [Category("Input")]
        [RequiredArgument]
        public InArgument<double> FirstNumber { get; set; }
        [Category("Input")]
        public InArgument<double> SecondNumber { get; set; }
        [Category("Output")]
        public OutArgument<double> ResultNumber { get; set; }
        protected override void Execute(CodeActivityContext context)
        {
            var firstNumber = FirstNumber.Get(context);
            var secondNumber = SecondNumber.Get(context);
            var result = System.Math.Pow(firstNumber + secondNumber, 2);
            ResultNumber.Set(context, result);
        }
    }
}


Созданное действие нужно запаковать в .nupkg с помощью NuGet Package Explorer, а дальше созданный пакет добавить в Студию.

Первое действие лучше не начинать создавать с ноля, а воспользоваться уже ранее упомянутыми Community Activities, где есть много готовых действий разной сложности.

В заключение


Как видите, вариантов для расширения фунциональности более чем достаточно, от простейшего InvokeCode до написания своего действия. Это значит, что какая бы задача перед вами не стояла, всегда есть возможность ее быстро решить, часто даже не изобретая велосипеда :)

Надеюсь, эта статья будет вам полезна при создании классных процессов роботизации. Буду рад, если вы расскажете, насколько для вас эта информация была релевантна и о чем еще вы хотели бы узнать.
Теги:
Хабы:
Всего голосов 9: ↑8 и ↓1 +7
Просмотры 3.2K
Комментарии 0
Комментарии Комментировать