【UiPath】これから定番？[定数]の定義（データ マネージャ）

## 皆もすなるQiitaといふものを、儂もしてみむとてするなり。

と言う訳で、こん＊＊は！はなっち！です。

この記事はUiPathブログ発信チャレンジ2023サマーの25日目の記事です。

## 初めに
UiPath Friendsの重要イベントの一つに、毎月最終土曜日開催（たまにずれる）の **「もくもく会」** と言うのがあります。

https://uipath-friends.doorkeeper.jp/events/160502

このイベントは、とかく忙しい方でもこの時間枠に「`参加`」し、「`もくもく`」と「`いろんな`」事をやってみましょうってコンセプトのものです。

先日のイベントで、「**定数を定義したPROCESSを、後世への資産登録のために、PUBLISHではなくWindows標準のZIP圧縮で圧縮した。内容確認のために解凍した後のPROCESSから、定数の定義が消えてしまい、困っている**」と言う方がいらっしゃいました。

かつて「**スクリーンショットの画像が見られなくなった**」事があった著者は、「Windowsの標準機能でzip化すると、ピリオドで始まるフォルダの2個目が消える」話をして、ご納得いただきました。

併せて、**他の参加者**からも以下のリンクを共有していただき、お困りの方は更に一歩前進したようです。

https://qiita.com/yuji38kwmt/items/aa398723618a03553eeb

と、前振りがながくなってしまいましたが、**浅学者である著者**は、その`データマネージャで定数を定義したことがなく`、ちょっとやってみようと思いました。

今回は、「**データマネージャにある`定数`**」に関してまとめてみます。

- - - 
## １）「データマネージャ」って？
**データマネージャ**は、UiPath Studioの2022.10.x辺りから実装された、PROCESS内部で使用している変数、引数などを**ひとまとめに管理できる機能**です。

https://docs.uipath.com/ja/studio/standalone/2022.10/user-guide/managing-your-project-data

例えば、**変数タグ**にて、`変数V`と`変数C`を定義します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/e076e21f-2321-7423-547a-c5da6c1034b5.png)

例えば、**引数タグ**にて、`引数A`を定義します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/8bdbd74c-cbf2-1269-d802-e03e752e9506.png)

その状態で、一番右のタブリストにある「**データ マネージャー**」を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/3bb4d414-e99f-0f3e-3cf6-f3abce2eedc5.png)

すると、
<img width="250" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/d7d4b525-bef9-1bb7-370b-12a3db6e9821.png"><img width="250" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/2bf838d4-ae25-659e-33a5-d34e27cf6d1f.png">
のような画面が現れます。

- どのような変数が、どのスコープで、どのデータ型で定義されているのか
- どのような引数が、どの方向で、どのデータ型で定義されているのか
が、わかりますね。

## ２）「データマネージャ」中の`定数`って？
「**データマネージャ**」の画面上に**定数**の文字が見えます。この画面から**定数**が作れそうですね。
<img width="250" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/2bf838d4-ae25-659e-33a5-d34e27cf6d1f.png">
この画面の**＋新しい定数**をクリックしてみましょう。このような画面が現れますので、 **[定数に名前を付ける]** に`定数C`、 **[規定値]** に`"CONSTANTX"`を設定して、[OK]をクリックします。
<img width="350" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/02cd7399-6157-bc0d-af72-292e67a9abf5.png">

一番右のタブリストにある「**データ マネージャー**」をみると、なるほど先ほど定義した`定数C`が現れています。
<img width="250" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/4e9874aa-2be4-e9e0-d786-763185eead96.png">

## ３）「データマネージャ」で定義した`定数`ってどう使うの？
定義はしました。さて、どうやって使うのでしょう。
それは至って簡単。変数のように、普通に参照利用すればいいのです・

#### ３）-1「メッセージボックス」アクティビティで参照
例えば、**「メッセージボックス」アクティビティ**で参照してみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/e2a5e4eb-7a9f-c9b4-e9aa-9b8a716b5782.png)
〔設定内容〕
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/43f687f1-3ce3-b946-fef7-cda8400c73dd.png)
〔実行結果〕
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/19786ef7-e2df-0ca3-cd21-c9039e603e1d.png)
`定数C`は、ちゃんと設定された値`CONSTANTX`が表示されましたね。

#### ３）-2「代入」アクティビティで参照
実際には、**「代入」アクティビティ**を使って色々な変数に代入するとか、**「条件分岐」アクティビティ**での条件値として使う事が多いでしょう。

ここでは、**「代入」アクティビティ**を使ってみましょう。

:::note warn
- 「代入」アクティビティの左辺
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/bb199417-3122-d5fe-b83d-6707a8836a61.png)
- 「代入」アクティビティの右辺
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/b14deff2-d1b1-b2b4-eff1-da9a2d3e8848.png)
- 「代入」アクティビティの右辺２
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/407fe57d-55a1-c1cf-6cc0-e6e4d0903a89.png)

どうやら、**変数などの候補値には出てこない**ようです。
:::

:::note info
仕方ないので、固定的に`定数C`を右辺に設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/de1134a9-deb0-f878-7c26-79d0a517d1d8.png)
〔実行結果〕
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/82c8e56e-4b98-5350-2327-001a92eb2af2.png)

`定数C`の値が、`変数V`に転記され、それが表示されていますね。
:::

:::note alert
一方で、間違えて、`定数C`を左辺に設定してしまったらどうでしょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/9df5f49b-147a-6443-dd24-3d7f96376a04.png)
無論、`定数`ですので、**実行中に陽に変更する事はできません**。
:::

## まとめ
- `定数`は、PROCESS全体で使用できる`固定値`を定義するに向いています。
- `定数`は、**ロジックの途中で変更する事はできません**。ですので、`恒久的な固定値を定義`するには向いています。
　例えば、以下のような値でしょうか。
    - 円周率：3.14159265359
    - 日曜日：0   ...   業務縛りで、必ず日曜日が`0`として扱えうようにする。
    - その他 ...
- `定数`は、例えば**半期に一回変わるような性質の値の定義には向いていません**。`定数`の値の変更は、`UiPath Studioにて再定義`し、`PUBLISHし、再配布する`必要があるからです。ですので、このような性質の値の定義には、**CONFIG.xlsxで定義する**か、**OrchestratorのAssetで定義する**などの方法が最適ですね。

::: note
この変数の定義自体は、どこに格納されるのかは。設定前と設定後のProcess中のファイルの差を見て確認しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/9778ec07-20da-c941-7a31-8b2034fbded7.png)
`プロセス名\.project`フォルダ配下の`globalVariables.json`に格納されるんですね。
::: 
::: note warn
定義自体はこちらをご覧ください（見やすいように、適宜改行を入れています。**直接編集しないでね**）。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/19c9294f-5363-1f23-8e38-6c3c6ad5ef7d.png)
:::

## 【追加の情報 2023/7/25】

:::note warn
> どうやら、**変数などの候補値には出てこない**ようです。

と書きましたが、“GlobalConstants” namespaceの手助けで、定数は参照できます！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/125b93dc-7e2d-8535-1c3d-f5ed8a0ca8a7.png)
※ただ、本来の使い方ではないので、あくまでも`回避方法`ってぇ事で...
※画面は**編集パネル部**と**データマネージャパネル部**とを**合成**してあります。
:::

- - - 
## おわりに
いかがでした？

今回も読んでいただきありがとうございました！
是非UiPathでのロボ開発の一助になればと思っています。

ありがとうございました！