自習用コンテンツ その10(https://automate.sct.co.jp/knowledge/10234/)の内容は如何でしたでしょうか?
簡単に出来てしまった方も、難しかった方もいたかと思います。
下記では、解説を書いていきます。
(解答例のコードは、ページ最下部に書いています。)
■観点
今回のコンテンツでは、「キーボードでの各種オブジェクト操作」および「入力カーソル位置の制御」を観点としました。
※以下の解説では、自習用コンテンツ その9に書き加える・変更する部分を解説します。
■1. CSVファイルの読み込みを追加
データ入力を始めるステップよりも前に、CSVファイルをデータセットとして取得するアクションを挿入します。
今回は、1行目は実データではなくヘッダー行なので、1行目をカラム名として使用します。(デフォルト設定です)
データセット名を、以下「ds_CSV」とします。
<AMFILESYSTEM ACTIVITY="csv_to_dataset" SOURCE="%GetDesktopDirectory()%\00010234\発注情報.csv" RESULTDATASET="ds_CSV" />
■2. 「Loop - データセット」を追加
データ入力開始 ~ 戻るボタンを押すまで(後程追加)が繰り返し処理となるため、繰り返しになる部分を「Loop - データセット」で囲います。
商品コードの入力部分 ~ スクリーンショットを取得するまでのステップを、以下のループで囲います。
<AMLOOP ACTIVITY="dataset" DATASET="ds_CSV" /> <AMLOOP ACTIVITY="end" />
■3. 商品コード・受注単価・数量を可変値に変更
自習用コンテンツ その9で作成したステップは全て固定値の入力になっているので、固定値の部分を可変値に書き換えます。
商品コードは「%ds_CSV.商品コード%」、受注単価は「%ds_CSV.受注単価%」、数量は「%ds_CSV.数量%」となります。
なお、データセットループを使用しているので、データセットの行を明示的に指定する必要はありません。
<AMINPUT>{TAB}%ds_CSV.商品コード%{TAB}%ds_CSV.受注単価%{TAB}%ds_CSV.数量%</AMINPUT>
■4. 倉庫が「大阪」ならDOWNキー2回、それ以外なら1回入力するよう変更
自習用コンテンツ その9で作成した倉庫を選ぶステップは「DOWN」キーを2回押すよう固定になっています。
そこで、「%ds_CSV.倉庫%」が「大阪」ならば{DOWN 2}、それ以外は{DOWN}を押すように書き換えます。
IFアクションも使用し、以下のような5アクションに書き換えます。
<AMIF EXPRESSION="%ds_CSV.倉庫% = "大阪"" /> <AMINPUT KEYSTROKES="{TAB}{DOWN 2}" /> <AMELSE /> <AMINPUT KEYSTROKES="{TAB}{DOWN}" /> <AMIF ACTIVITY="end" />
■5. 配送区分が「緊急」なら「RIGHT」を押し、それ以外は「RIGHT」を押さないよう変更
自習用コンテンツ その9で作成したステップは「{TAB}{RIGHT}」になっているので、条件判断を含めた処理に書き換えます。
・「TAB」キーによるカーソル移動は必須の為、共通処理として外出し
・「RIGHT」を押下するか否かをIF条件で判断
以上を踏まえて、以下のような4ステップに書き換えます。
<AMINPUT KEYSTROKES="{TAB}" /> <AMIF EXPRESSION="%ds_CSV.配送区分% = "緊急"" /> <AMINPUT KEYSTROKES="{RIGHT}" /> <AMIF ACTIVITY="end" />
■6. 出荷保留が「保留」なら「SPACE」を押し、それ以外は「SPACE」を押さないよう変更
■5と同様にして、自習用コンテンツ その9で作成したステップを書き換えます。
・「TAB」キーによるカーソル移動は必須の為、共通処理として外出し
・「SPACE」を押下するか否かをIF条件で判断
以上を踏まえて、以下のような4ステップに書き換えます。
<AMINPUT KEYSTROKES="{TAB}" /> <AMIF EXPRESSION="%ds_CSV.出荷保留% = "保留"" /> <AMINPUT KEYSTROKES="{SPACE}" /> <AMIF ACTIVITY="end" />
■7. 備考欄の固定文字列を可変値に変更
■4と同様にして、自習用コンテンツ その9で作成したステップを書き換えます。
「テスト AutoMateデータ」となっている部分を、可変値「%ds_CSV.備考%」に変更します。
<AMINPUT>{TAB}%ds_CSV.備考%</AMINPUT>
■8. スクリーンショットのファイル名を可変値に変更
■4と同様にして、自習用コンテンツ その9で作成したステップを書き換えます。
自習用コンテンツ その9では「発注データ.png」と固定ファイル名となっていました。
これでは毎回同じファイルが更新されてしまい履歴が残らないため、可変値「%ds_CSV.商品コード%」とします。
(今回は、商品コードは重複しないという前提を置いています)
<AMIMAGE ACTIVITY="capture_screen" FILE="%GetDesktopDirectory()%\00010234\%ds_CSV.商品コード%.png" CAPTURETYPE="active_window" />
■9. 受注入力画面に戻る処理を追加
スクリーンショットの取得とループの終了の間に、受注入力画面に戻る処理 + Waitを入れます。
画面遷移した状態から「TAB」キーを押下すると「戻る」ボタンにカーソルがあたり、そこで「ENTER」を押下すると受注入力画面に戻れます。
<AMINPUT KEYSTROKES="{TAB}{ENTER}" /> <AMWAIT SCALAR="2" />
今回構築する処理は以上になります。
(以下、構築例)
<!--FirefoxでAutoMateのデモページを起動--> <AMRUN FILE=""C:\Program Files\Mozilla Firefox\firefox.exe" https://www.sct.co.jp/amdemo/order1.php" /> <!--ページ表示まで待機--> <AMWAIT ACTIVITY="window" WINDOWTITLE="AutoMate Demo — Mozilla Firefox" FOCUSWINDOW="YES" /> <AMFILESYSTEM ACTIVITY="csv_to_dataset" SOURCE="%GetDesktopDirectory()%\00010234\発注情報.csv" RESULTDATASET="ds_CSV" /> <AMLOOP ACTIVITY="dataset" DATASET="ds_CSV" /> <!--商品コード・単価・数量を入力--> <AMINPUT>{TAB}%ds_CSV.商品コード%{TAB}%ds_CSV.受注単価%{TAB}%ds_CSV.数量%</AMINPUT> <!--倉庫が「大阪」ならDONWキー2回、それ以外(東京)ならDOWNキー1回--> <AMIF EXPRESSION="%ds_CSV.倉庫% = "大阪"" /> <AMINPUT KEYSTROKES="{TAB}{DOWN 2}" /> <AMELSE /> <AMINPUT KEYSTROKES="{TAB}{DOWN}" /> <AMIF ACTIVITY="end" /> <AMINPUT KEYSTROKES="{TAB}" /> <!--配送区分が「緊急」ならばRIGHTキーを押下--> <AMIF EXPRESSION="%ds_CSV.配送区分% = "緊急"" /> <AMINPUT KEYSTROKES="{RIGHT}" /> <AMIF ACTIVITY="end" /> <AMINPUT KEYSTROKES="{TAB}" /> <!--「保留」ならばスペースキーを押下--> <AMIF EXPRESSION="%ds_CSV.出荷保留% = "保留"" /> <AMINPUT KEYSTROKES="{SPACE}" /> <AMIF ACTIVITY="end" /> <!--備考欄の入力--> <AMINPUT>{TAB}%ds_CSV.備考%</AMINPUT> <!--確認ボタンを押下 → 画面遷移待機--> <AMINPUT KEYSTROKES="{TAB}{ENTER}" /> <AMWAIT SCALAR="2" /> <!--確認ボタンを押下 → 画面遷移待機--> <AMINPUT KEYSTROKES="{TAB}{ENTER}" /> <AMWAIT SCALAR="5" /> <!--スクリーンショットを取得--> <AMIMAGE ACTIVITY="capture_screen" FILE="%GetDesktopDirectory()%\00010234\%ds_CSV.商品コード%.png" CAPTURETYPE="active_window" /> <!--「戻る」ボタンを押下--> <AMINPUT KEYSTROKES="{TAB}{ENTER}" /> <AMWAIT SCALAR="2" /> <AMLOOP ACTIVITY="end" /> <!--ブラウザを閉じる--> <AMWINDOW ACTIVITY="close" WINDOWTITLE="AutoMate Demo — Mozilla Firefox" />
(別解1: キーストロークを1アクションで記述した場合)
<!--FirefoxでAutoMateのデモページを起動--> <AMRUN FILE=""C:\Program Files\Mozilla Firefox\firefox.exe" https://www.sct.co.jp/amdemo/order1.php" /> <!--ページ表示まで待機--> <AMWAIT ACTIVITY="window" WINDOWTITLE="AutoMate Demo — Mozilla Firefox" FOCUSWINDOW="YES" /> <AMFILESYSTEM ACTIVITY="csv_to_dataset" SOURCE="%GetDesktopDirectory()%\00010234\発注情報.csv" RESULTDATASET="ds_CSV" /> <AMLOOP ACTIVITY="dataset" DATASET="ds_CSV" /> <!--商品コード・単価・数量を入力--> <AMINPUT>{TAB}%ds_CSV.商品コード%{TAB}%ds_CSV.受注単価%{TAB}%ds_CSV.数量%{TAB}%If(ds_CSV.倉庫 = "大阪", "{DOWN 2}", "{DOWN}")%{TAB}%If(ds_CSV.配送区分 = "緊急", "{RIGHT}", "")%{TAB}%If(ds_CSV.出荷保留 = "保留", "{SPACE}", "")%{TAB}%ds_CSV.備考%{TAB}{ENTER}</AMINPUT> <AMWAIT SCALAR="2" /> <!--確認ボタンを押下 → 画面遷移待機--> <AMINPUT KEYSTROKES="{TAB}{ENTER}" /> <AMWAIT SCALAR="5" /> <!--スクリーンショットを取得--> <AMIMAGE ACTIVITY="capture_screen" FILE="%GetDesktopDirectory()%\00010234\%ds_CSV.商品コード%.png" CAPTURETYPE="active_window" /> <!--「戻る」ボタンを押下--> <AMINPUT KEYSTROKES="{TAB}{ENTER}" /> <AMWAIT SCALAR="2" /> <AMLOOP ACTIVITY="end" /> <!--ブラウザを閉じる--> <AMWINDOW ACTIVITY="close" WINDOWTITLE="AutoMate Demo — Mozilla Firefox" />