Help us understand the problem. What is going on with this article?

UiPathでライブラリを直接呼出す

UiPathでライブラリを直接呼出す

UiPathでは、OrchestratorやUiPath Goなどから、カスタムライブラリを追加することが容易になりましたが、実証実験の段階から、Orchstratorを入れたり、UiPath Goにお客様専用のライブラリを登録することは困難だったり、そもそもネットワークのホワイトリストですら登録いただくことに、大変だったりしますよね

本投稿では、自分で作ったカスタムライブラリ(DLL)を.nugetからではなく、直接、呼び出す方法を紹介します。

開発のきっかけ

最近では当たり前ですが、昔はUiPathでカスタムライブラリを作成するには、
Visual StudioでDLLを作成し、Nuget ExplorerなどでDLLをnuget化して利用しかありませんでした。

UiPathでデバッグするにも、Immediate Panelがなかったり、現時点でもComやラムダ式をデバッグしたり
解析することができませんでした。

お約束事項(免責事項)

この記事は2020年6月時点の情報を基に作成しております。
記事の内容は私個人の見解であり、所属する組織の公式見解ではありません。

利用イメージ

利用イメージは、カスタムライブラリのDLLを特定のフォルダ(例えばプロジェクトの配下など)に格納し、
xamlファイルをInvokeするのと同じような感じで、DLLファイルから呼び出してみたいと思います。

image.png

カスタムライブラリ

サンプルで利用できるDLLはこちらで用意しました。
https://github.com/takusonix/UiPathCustomLibrary/raw/master/UiPathCustomLibrary/bin/Release/UiPathCustomLibrary.dll

ソース内容はこちらです。

using System.Windows;

namespace UiPathCustomLibrary
{
    public static class TestClass
    {
        public static void Test1()
        {
            MessageBox.Show("Hello World");
        }
        public static void Test2(string message)
        {
            MessageBox.Show(message);
        }

        public static int Test3(int a, int b)
        {
            return a + b;
        }
    }
}

サンプルDLLを利用せずに、ご自身で用意いただいても構いません。

UiPathのプロジェクト構成

UiPathのプロジェクト構成は、このようになっています。
カスタムライブラリのサンプル(UiPathCustomLibrary.dll)はプロジェクト直下に格納しています。
image.png

UiPathの実装

1. アセンブリ変数の作成

UiPathでasmという変数を作成します。
image.png

2. 型を変更

asmの型をBrowse for Types...を選択します。
image.png

3. 型名

Type NameにSystem.Reflection.Assemblyを入力し、Asssemblyを選択します。
image.png

4. Assignの追加

Assign(代入)アクティビティを追加し、左辺にasmを設定します。
image.png

5. Assignの値を設定

Assignの右辺に以下の値を設定します。

Assembly.LoadFile( _
    Path.Combine( _
        Environment.CurrentDirectory, _
        "UiPathCustomLibrary.dll" _
    ) _
)

image.png

これで、DLLをロードすることができました。

6. 変数の追加

実行するメソッドの変数を追加します

  • 名前空間(usingName)
  • クラス名(className)
  • メソッド名(methodName)

image.png

7. 変数の値を設定

変数に値をそれぞれ設定します。

  • usingName = "UiPathCustomLibrary"
  • className = "TestClass"
  • methodName = "Test1"

image.png

8. 実行結果の変数を追加

実行結果を設定する変数 resultObj を追加し、変数の型をObjectに変更します。
image.png

9. Assignの追加

実行と実行結果を設定するAssignを追加します。
image.png

10. 処理の呼び出し

resultObjの値に、以下の値を設定します

asm _
    .GetType( usingName + "." + className ) _
    .GetMethod(methodName) _
    .Invoke(Nothing, Nothing)

image.png

UiPathの実行

実行すると、Hello Worldのメッセージが表示されます。
(メッセージボックスが前面に表示されてない場合、画像の通り、タスクバーからUiPathRobotの無名のタスクをせんたくしてください。)
image.png

終わりに

本投稿では、メソッドの呼び出しまでに留めております。
サンプルのカスタムライブラリで用意している Test2やTest3のメソッドや、引数の設定、実行結果の取得については、別投稿します。

もし、よければLGTMをお願いします。

takusonix
記事の内容は私個人の見解であり、所属する組織の公式見解ではありません。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away