【SetROBO】記録したコードを編集する

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

[前回](https://qiita.com/Cheeeeese/items/8bd8e89d8a35e3b58d42)に引き続き、付属してきたマニュアルを参考にして、記録したコードの編集方法について記載します！


>コードの記録を行ったままだと、不要なコードが記述されてたり、チェックが入っていない、固定の条件しかできないなど、そのままではキッティングに使用することはできません。そこで、必ず編集を行います。(引用：SetROBO for Kitting 入門ガイド Ver.2.4)

ということで、SetROBOでキッティング作業を記録すると自動でコードを出力してくれますが、やはり記録した作業のみになってしまうので、必ずコードの編集が必要みたいです。

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

# 参考にしたマニュアルについて
ダウンロードした際に付属してきた「**SetROBO for Kitting 入門ガイド Ver.2.4**」 の「STEP06 コンピュータ名の変更② ～記録後の編集～」を参考にしました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2830862/22f2eec9-1dd5-8251-75da-5f4d3e8d738b.png" width="40%"><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2830862/4dca9374-e263-ee31-bc88-460300190a6f.png" width="40%">

# 前回まで
前回、記録したコンピュータ名変更のコードはこちらです。
このコードを編集していきます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2830862/ba1b27f1-a191-6dec-31dc-6e3974116e4c.jpeg" width="70%">

# 手順
### 01.変数を追加
待機時間と設定するコンピュータ名の変数を追加します。
```ruby:追加する変数
//待機時間
int basicWait = 1000;
//長めの待機時間
int longWait = 15000;

//コンピュータ名の変数
string PCName = "PC01";
```
変数は`// セットアップコードの記述`の下に追加！
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2830862/e374de1a-ef7f-6720-704f-fda14e408925.jpeg" width="70%">

### 02.追加した変数で記録したコードを修正
記録したコードの待機時間とコンピュータ名を修正します。

待機時間は記録した際に自動で入力された`PlayLib.Sleep(5313);`の数字を待機時間の変数に置き換えます。
基本的に待機時間1秒の「basicWait」を使用しますが、次の操作画面が出るまで1秒以上かかるところは「longWait」を使用します。

**👉Sleep関数について**
Sleep関数は、次のコードの実行を指定の時間待機してくれます。
ちなみに時間はミリ秒で設定する必要があります！（1秒なら1000ミリ秒）

コンピュータ名は`～.Input("PC01")`の文字列を「PCName」に置き換えます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2830862/2f6a8cdf-0606-fe20-7408-1737a618759d.jpeg" width="70%">


### 03.画面が表示されるまで待機するコードを追加
「システムのプロパティ画面」を開いた後と「コンピューター名/ドメイン名の変更画面」を開いた後に、その画面が表示されるまで待機するコードを追加します。

```ruby:システムのプロパティ画面が表示するまで待機するコード
//システムのプロパティ画面が表示するまで待機
PlayLib.WaitWindow("システムのプロパティ", true ,60);
```

```ruby:コンピューター名/ドメイン名の変更画面が表示するまで待機するコード
//システムのプロパティ画面が表示するまで待機
PlayLib.WaitWindow("コンピューター名/ドメイン名の変更", true ,60);
```

**👉WaitWindow関数について**
WaitWindow関数は、指定の画面が表示されるまで待機したり、逆に画面が消えるまで待機したりできます。
引数には[画面名]、[表示(true))/非表示(false)]、[待機時間(秒)]を設定。

画面待機のコードを入れると、操作対象の画面がちゃんと表示されてから次の操作を実行したり、画面が確実に消えてから次の操作を実行するなど、次の操作が確実に行えるようになるようです。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2830862/608df10c-82c7-49a2-d3c3-9a8677a8cea6.png" width="70%">

### 04.設定した値が正しいか確認するコードを追加
`～.Input(PCName)`で入力したコンピュータ名が、正しく入力されているか確認するコードを追加します。
```ruby:入力したコンピュータ名が正しいか確認するコード
//コンピュータ名の値のチェック
PlayLib.Window("コンピューター名/ドメイン名の変更").Edit("コンピューター名(C):").CheckProperty("Text", PCName);
```

**👉CheckProperty関数について**
CheckProperty関数は、対象のコントロールのプロパティを取得して、期待する状態になっているかを確認することができます。
確認結果（成功(True)/失敗(False)）はログに自動で出力されるようです。
また、スクリーンキャプチャーも自動で取得することができるそうです。（Conductorの設定で変更可能）
引数には[確認するプロパティ]、[期待値]を設定。

これを使うと、入力した値が正しいか確認以外にも、チャックボックスにチェックが入っているかや、コントロールが有効かなども確認できるみたいです。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2830862/32b3add7-8d6e-adb9-6741-bad32c6c6d7c.jpeg" width="70%">

</br></br>

**これで記録後の編集が出来ました。それでは実行～・・・**


<font color='red'>**って、いや、ちょっと待てーい:raised_hand:**</font>
このままじゃ画面が表示されなかった場合も、コンピュータ名の入力に失敗していた場合も次の処理に進むやん。

なので、マニュアルにはありませんが、条件分岐を追加して、画面が表示されなかった場合やコンピュータ名の入力に失敗した場合の処理を勝手に追加していきます。

### 05.条件分岐を追加
条件分岐するには「if文」が使用できるみたいです。
今回は画面が表示されなかった場合や、コンピュータ名の入力に失敗した場合は、失敗した旨のログを出力して処理を中断させるようにします。

こんな感じでif文を追加します。
```ruby:システムのプロパティ画面が表示するまで待機の条件分岐
//システムのプロパティ画面が表示するまで待機
if(PlayLib.WaitWindow("システムのプロパティ", true ,60) == true)
{
    # システムのプロパティ画面が表示された場合の処理（省略）
}
else
{
    //システムのプロパティ画面が表示されない場合エラー
    PlayLib.TestLogError("「システムのプロパティ」画面が表示されませんでした。");
    return -1;
}
```

ログの出力は`TestLog()`や`TestLogError()`を使用します。
|  ログ出力のコード  |  ログタイプ  |  出力結果  |
| :----: | :----: | :----: |
|  PlayLib.TestLog();  | 通常 |![通常.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2830862/20e20290-d48d-8012-8ef1-97bc220a15dd.jpeg)|
|  PlayLib.TestLogWarning();  | 警告 |![警告.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2830862/abb340d2-388c-605b-221c-29ed9b38ea58.jpeg)|
|  PlayLib.TestLogError();  | エラー |![エラー.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2830862/b5eb5f7e-59ad-ffbe-1830-27106dac9691.jpeg)|

こんな感じで画面待機や値チェックのところにif文を追加しました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2830862/e07d92be-1146-c50a-1b65-ba4980bab747.jpeg" width="70%">

**それでは実行！**
※コンピュータ名は被っちゃうので`string PCName = "TestPC01";`にしました。
![実行-1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2830862/690abee4-6dc8-dcde-225c-b3760c56fcde.gif)

### 実行結果の確認
実行結果は「SetROBO-LogViewer」で確認ができます。
チェック関数を使用するとこんな感じで確認結果とスクリーンキャプチャが確認できるみたいです。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2830862/6a92c49a-e2dd-9bde-3eb1-7ab3ba197b2d.jpeg" width="70%">

エラーの場合のログはこんな感じでした！
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2830862/e53eb49e-d2fd-1e70-d256-b73fd35c4cec.jpeg" width="70%">
### 今回記録されたコードはこちら
```ruby:SetROBO
using System;
using System.Drawing;
using Arp.Prova.ImageLibrary;
using Arp.Prova.CsvLib;
using Arp.Prova.PlayLib;


// CodeClass
public class CodeClass
{
	
	public static int CodeStart()
	{
		// セットアップコードの記述
		
		//待機時間
		int basicWait = 1000;
		//長めの待機時間
		int longWait = 15000;
		
		//コンピュータ名の変数
		string PCName = "TestPC01";
		
		//システムのプロパティを開く
		PlayLib.ProcessStart("sysdm.cpl");
		
		//システムのプロパティ画面が表示するまで待機
		if(PlayLib.WaitWindow("システムのプロパティ", true ,60) == true)
		{		
			PlayLib.Window("システムのプロパティ").Button("変更(C)...").Click(21, 15);
			PlayLib.Sleep(basicWait);
			
			//コンピュータ名/ドメイン名の変更画面が表示するまで待つ
			if(PlayLib.WaitWindow("コンピューター名/ドメイン名の変更", true ,60) == true)
			{
				PlayLib.Window("コンピューター名/ドメイン名の変更").Edit("コンピューター名(C):").Input(PCName);
				PlayLib.Sleep(basicWait);
				
				//コンピュータ名の値のチェック
				if(PlayLib.Window("コンピューター名/ドメイン名の変更").Edit("コンピューター名(C):").CheckProperty("Text", PCName) == false)
				{
					//コンピュータ名の設定に失敗した場合エラー
					PlayLib.TestLogError("コンピュータ名の設定に失敗しました。");
					return -1;
				}
				
				PlayLib.Window("コンピューター名/ドメイン名の変更").Button("OK").Click(56, 12);
				PlayLib.Sleep(longWait);
				
				PlayLib.Window("コンピューター名/ドメイン名の変更").Button("OK").Click(28, 8);
				PlayLib.Sleep(basicWait);
				
				PlayLib.Window("システムのプロパティ").Button("閉じる").Click(43, 7);
				PlayLib.Sleep(basicWait);
				
				PlayLib.Window("Microsoft Windows").Button("後で再起動する(L)").Click(58, 11);
			}
			else
			{
				//コンピュータ名/ドメイン名の変更画面が表示されない場合エラー
				PlayLib.TestLogError("「コンピュータ名/ドメイン名の変更」画面が表示されませんでした。");
				return -1;
			}
		}
		else
		{
			//システムのプロパティ画面が表示されない場合エラー
			PlayLib.TestLogError("「システムのプロパティ」画面が表示されませんでした。");
			return -1;
		}
		
		return 0;
	}
}

```


# 最後に
画面待機や確認の関数が既にあるので、記録後のコードの編集も楽でした！
次回は実際によくうちでやっているキッティング作業の自動化コードを作成してみようと思います。

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