RPA
UiPath

【UiPath】カスタムアクティビティの作成(事前準備と実践初級)

前から興味があったカスタムアクティビティの作成にチャレンジして、手順や理解した事をまとめます。
初心者なのでUiPath Activity ガイドのCreating a Custom Activity に沿って進めます。

準備① Visual Studioのインストール

Microsoft Visual Studioサイトより、右上の「無償版」をクリック。
free.png

左の「Visual Studio Community」のダウンロードボタンをクリック。
select.png

基本はインストーラに沿って進めますが、全部入りだと数十GByteもの容量を食うので最低限に絞る。
といっても今回の目的で最低限必要なコンポーネントってなんだろう?
とりあえず"ワークロード"は選ばず、"個別のコンポーネント"から[Windows Workflow Foundation]を選択。
(1つ選ぶと、必要な関連コンポーネントが自動で選択されます。)
 wwf.png

「インストール」を押すと↓ の警告が出るけど気にせず「続行」。これだけでも7GBの容量が必要。
 warning.png

Visual StudioについてはこれでOK。

準備② NuGet Package Explorerのインストール

GitHubのNuGet Package Explorerページから一番上のzipをダウンロード。
 Nuget.png

適当なフォルダを作ってzipの中身を解凍。
NPE.png

NuGet Package ExplorerについてもこれでOK。
この後は、UiPathガイドの手順に沿って簡単なカスタムアクティビティを作ってみます。

実践① Visual Studioでプロジェクト作成

Visual Studioでプロジェクトを新規作成。
プロジェクトの種類は「クラスライブラリ(.NET Framework)」
 Project.png

プロジェクトができたら、メニュー「プロジェクト」→「参照の追加」で、
 System.Activities
 System.ComponentModel.Composition
の2つを追加。どちらもカスタムアクティビティの作成に必要。
 ref.png

ここから先は、カスタムアクティビティをCodeActivity/NativeActivityどちらで作るか決めないといけない。
情報があまり出回ってないのでしっかり理解はできてないけど、

  • CodeActivity → 作るのカンタンだけど単純な制御しかできない
  • NativeActivity → 作るの難しいけど高度な制御ができる

という事らしい。自作アクティビティで難しい事をやるつもりは無いので、CodeActivityで行く。

実践② コーディング開始

といってもUiPathガイドにあるソースのコピペです。初心者は欲を出さずにまずコピペから。

Class1.cs(デフォルト名)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.Activities;
using System.ComponentModel;

namespace MathSquareOfSum
{
    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);
        }
    }
}

コード書いてエラーが無ければ、ソリューション構成のプルダウンをDebug → Releaseに変更して
「ソリューションのビルド」で、プロジェクトフォルダの\bin\Release にDLLが出来ました。
 dll.png
これをNuGet Package ExplorerでUiPathが食える形にすればいいんだな。

実践③ NuGet PackageでUiPath Studioにインストール

DLL → nupkgに変換

さっきzip解凍した中のNuGetPackageExplorer.exeを実行。

上から3つ目「Create a new Package」を選択。
 CreateNew.png

右ペインPackage contentsの空欄を右クリック → Add Lib Folder
 AddLib.png

ペイン中に"lib"ができるので、それを右クリック → Add Existing File..を選択
 AddLib2.png

さっきBuildしたDLLを選択
 select.png

Edit → Edit Metadataを選択
 edit.png

左ペインがMetadataの入力欄に変わるので、適当に値を入力。
※UiPathガイド曰く、Idは"Activities"を入れないと後でStudioのManage Packagesに出てこないとの事。
 metadata.png

File → Saveで保存するとnupkgファイルができた。これがUiPathが食える形式。
 nupkg.png

StudioにManage Packagesからインストール

このnupkgファイルを、UiPath Studioのパッケージ置き場である
"C:\Users\xxxx(ユーザー名)\.nuget\packages" の下に適当なフォルダを掘ってコピーする。
とりあえず他の既存パッケージにならって \packages\Umemaru\1.2.3 というフォルダにした。
 pkg.png

これだけではManage Packagesに出てこないので、アクティビティパッケージの管理に従い
Availableの下にフィードを追加し、Sourceに先程のパッケージフォルダを指定。
 feed.png

出た!
 testactivity.png

早速インストールすると…なるほどツリーのトップレベルに追加されるのね。
 list.png

ワークフローに置いてみた。確かにコードの通りのプロパティが表示されている。
 activity.png

アイコンとかフローに置いた時の見た目とか、他に色々とカスタマイズできそうです。




これは・・・この設定は・・・燃える!!熱いぞ!
UiPathに自分が設計し自分が開発したアクティビティが追加できる!そして自分で使える
つまりロボットに自分だけのオリジナルの機能や武装を追加し自分で使いこなすという、まさに
超戦士ガンダム野郎やダッシュ四駆郎といったボンボンコロコロのホビー漫画で育った我々にとって
その熱いスピリットの行き場がここにある、という事だ!

気分が高まって太字ばかりになってしまった。

まとめ

最後に、ソースコード/NuGetプロパティ/パッケージ/アクティビティの関係を図にしました。
relation.png


今回はここまで。
UiPathのカスタムアクティビティは世に出回っている事例や参考になるサイトがまだ少ないのですが、UiPathのGitHubにもいくつかサンプルコードが載っているので、少しずつ勉強してTips等を紹介できたらと思います。

次回> カスタムアクティビティのアイコンを変更する