【SetROBO】共通変数の作成と使い方

# はじめに
こんにちは。今年度から社内PCのキッティングに携わるようになった@Cheeeeeseです。

今日はSetROBOのグローバル変数(共通変数)について記載します。

SetROBOのコーディングには、SetROBOの関数とC#が使えて、変数の宣言とかはC#の書き方と一緒なんだけど、グローバル変数はC#の書き方では出来ないみたいなんです。

少し複雑だったので、ここに記録しておきます！

# 環境
- Windows 11 Pro 21H2 (64bit)
- SetROBO for Kitting V1.9.5体験版

# SetROBOの共通変数とは
> 共通変数とは、Code間・Plan間をまたいで使用可能な変数のことです。
> 共通変数の値は、Code間・Plan間をまたいだ場合でも保持されます。
> (引用：SetROBO for Kitting 入門ガイド Ver.2.4)

# 手順
### 01.共通変数を作成
SetROBOの場合、変数を宣言ではなく、関数で共通変数に値を格納します。
今回はint型のの「varInt」という共通変数に、「100」を格納します。
```ruby:共通変数を作成するコード
// エラー内容を受け取る変数
PlayLib.GlobalErrorCode errCode;
// int型の共通変数「varInt」を作成し、int型の値「100」を格納する
PlayLib.GlobalSetInt("varInt", 100, out errCode);
```

ちなみに型によってそれぞれ関数が用意されています。
|  型  |  関数  |
| ---- | ---- |
| Int型 |  PlayLib.GlobalSetInt(string name, int value, out GlabalErrorCode errCode)  |
| Double型 |  PlayLib.GlobalSetDouble(string name, double value, out GlabalErrorCode errCode)  |
| String型 |  PlayLib.GlobalSetString(string name, string value, out GlabalErrorCode errCode)  |
| Bool型 |  PlayLib.GlobalSetBool(string name, bool value, out GlabalErrorCode errCode)  |

【引数】
　name：共通変数名
　value：格納するint型の共通変数の値
　out errCode：エラー内容を受け取る変数(正常に読み込めた場合は「OK」)


### 02.別のCodeで共通変数から値を取得
共通変数から値を取得する際も関数を使用します。
手順01で作成した共通変数「varInt」の値を取得します。
```ruby:共通変数から値を取得するコード
// エラー内容を受け取る変数を宣言する
PlayLib.GlobalErrorCode errCode;
// int型の値を受け取る変数を宣言
int num = 0;
// int型の共通変数「varInt」の値を取得し、numに格納する
PlayLib.GlobalGetInt("varInt", out num, out errCode);
```

これも型によってそれぞれ関数が用意されています。
|  型  |  関数  |
| ---- | ---- |
| Int型 |  PlayLib.GlobalGetInt(string name, out int value, out GlabalErrorCode errCode)  |
| Double型 |  PlayLib.GlobalGetDouble(string name, out double value, out GlabalErrorCode errCode)  |
| String型 |  PlayLib.GlobalGetString(string name, out string value, out GlabalErrorCode errCode)  |
| Bool型 |  PlayLib.GlobalGetBool(string name, out bool value, out GlabalErrorCode errCode)  |

【引数】
　name　共通変数名
　out value　取得したint型の値を格納する変数
　out errCode　エラー内容を受け取る変数(正常に読み込めた場合は「OK」) 

### 03.実行確認
実行時はまず共通変数を作成したCodeを実行し、その後に共通変数から値を取得するCodeを実行します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2830862/8656b7f7-7323-1d4f-be88-4947b3b2daf2.jpeg" width="50%">
:warning: 必ず先に共通変数を作成したCodeを実行しないと、エラーが発生します。


### 応用
私の場合、設定値の取得によくCSVを使うので、CSVファイルのパスを共通変数にしています。
こうするとCSVのファイル名を変更した場合でも共通変数を作成したCodeだけので済みます。

```ruby:設定値ファイルの共通変数作成
//変数宣言
PlayLib.GlobalErrorCode errCode;
	
// 設定値ファイル(csv)のパスを取得
string filePath = Path.Combine(Path.GetDirectoryName(Application.StartupPath), "Setting.csv");
// PCの製造番号を取得
string serialNumber = PCInfo.GetMySerialNumber();
		
//-------------------共通変数に格納-------------------
// 共通変数「gfilePath」に設定値ファイルのパスを格納
PlayLib.GlobalSetString("gFilePath", filePath, out errCode);
		
// 共通変数「gserialNumber」に製造番号を格納
PlayLib.GlobalSetString("gSerialNumber", serialNumber, out errCode);
```

```ruby:共通変数から設定値ファイルを取得
// 変数宣言
PlayLib.GlobalErrorCode errCode;	//エラーコード
string sFilePath;	//設定値ファイルパス
string sSerialNumber;	//製造番号
		
// 設定値ファイルパスを取得
PlayLib.GlobalGetString("gFilePath", out sFilePath, out errCode);
// 製造番号を取得
PlayLib.GlobalGetString("gSerialNumber", out sSerialNumber, out errCode);
		
// 設定値ファイルから製造番号をキーにコンピューター名を取得
string pcName = CsvLib.GetField(sFilePath, "製造番号", sSerialNumber, "コンピューター名");
PlayLib.TestLog(pcName);

```


# 最後に
SetROBOの共通変数は関数を使用しなければいけないので、少しコーディングが面倒ですが、慣れれば便利です。

# 参考にしたサイト
- [SetROBO入門ガイド](https://www.setrobo.jp/entry_guide/files/SetROBO_EntryGuide_Ver2.4.pdf)