自習用コンテンツ その2(https://automate.sct.co.jp/knowledge/12045/)の内容は如何でしたでしょうか?
簡単に出来てしまった方も、難しかった方もいたかと思います。
下記では、解説を書いていきます。
(解答例のコードは、ページ最下部に書いています。)
※あくまでも一例です。本コンテンツでは、話を簡素化するために「データセット」などは使用しない形で作成しています。
完成したタスクのイメージを見るにはここをクリック
(ページ下部にてコードを掲載しています)
■観点
今回のコンテンツでは、自習用コンテンツその1の「Excelの値操作」「Web入力」に加えて
「処理対象の絞り込み」および「繰り返し処理」を観点としました。
■1. 「処理対象ファイル」用変数の追加
今回は、開くExcelファイルが毎回可変になるので、ファイル名を変数化する必要があります。
そのために、変数定義部分に新しいステップとして、「変数 - 作成」アクションを追加します。
(図1: 新規変数追加)
■2. 繰り返し処理「Loop」の追加
指定されたフォルダ内のファイルを順繰りに処理するには、「Loop - ファイル」が便利です。
「Loop」アクションで検索し、その配下の「ファイル」アクションを変数定義部分の後ろにドラッグ&ドロップします。
※繰り返し処理「Loop」内に変数定義アクションを絶対に含めてはなりません。
同じタスク内で同じ名前の変数は宣言できない為、繰り返し処理内に変数宣言があると2回目以降に100%実行エラーになります。
(図3:「Loop - ファイル」のドラッグ&ドロップ)
設定をします。まずは、不十分な例からお見せします。
-----------------------------以下、不十分な例-----------------------------
下記の図4を見てください。
(図4: 指定が不十分な例)
アクションの使い方自体は間違っていません。しかしながら、「偽物の注文書ファイル」を除外するという観点が入っていません。
そのため、上記設定のまま進めると、最終的に以下のような結果でタスク実行エラーにより終了してしまいます。
このままでは、ファイル名格納用変数に、偽物の注文書のファイル名も入ってしまうためです。
(偽物の注文書ファイルの内容を入力したことによりWeb画面側で登録できず、受注番号を取得できないために実行エラーとなります)
(図5: 偽物の注文書ファイルを開いてしまった場合)
-----------------------------以上、不十分な例-----------------------------
上記のような結果を避けるためには、「order」で始まる名前で絞り込む必要があります。
逆に、「order」より後ろの文字列は何でもよい、という条件があるため、ワイルドカード(*, ? など)を使用し、「order*」も含めて指定すれば解決します。
(「order*」のように指定すると、「orderAAAAA」「orderIUYHJK000009」はヒットしますが、「ordeXXXXXXX」はヒットしません)
(図6: ファイル名「order*」での絞り込みを追加)
「OK」をクリックして確定すると、ループ開始ステップ・ループ終了ステップが自動的に生成されます。
この状態から、「ループ終了ステップ」を処理の一番後ろまでドラッグ&ドロップします。
※今回は、ファイルを閉じるまでが1処理なので、自習用コンテンツその1の最後のステップまでが繰り返し処理の対象となります。
(図7: End Loopステップの移動)
※なお、本記事では紹介していませんが、「If」条件を利用して条件に合致しないファイルを処理しない、という方法でも可能です。
■3. 「Excel - ブックを開く/作成する」アクションの対象ファイルを可変値にする
「■2. 繰り返し処理「Loop」の追加」により、繰り返し処理が定義されました。
しかしながら、今のままでは処理対象のExcelが固定になっているので、同じファイルを3回開き、同じ内容を3回Webに登録するだけの意味のない処理になってしまいます。
(図8: Open対象のファイルが固定)
そこで、開く対象のファイルを可変にする必要があります。
※変数の指定方法については、自習用コンテンツその1の解説をご参照ください。
(図9: 開く対象のファイル設定値変更)
---------------------------------------------------------------------------------------------------------------
今回の処理の対応のために、タスクに変更を加える部分は以上になります。
上記の内容に従って処理を構築すると、以下のようになります。
(処理構築例:展開するにはここをクリック)
<!--変数定義-->
<AMVARIABLE NAME="var_ShohinCD" VALUE="" DESCRIPTION="商品コード" />
<AMVARIABLE NAME="var_JuchuTanka" VALUE="" DESCRIPTION="受注単価" />
<AMVARIABLE NAME="var_Suryo" VALUE="" DESCRIPTION="数量" />
<AMVARIABLE NAME="var_ChumonNo" VALUE="" DESCRIPTION="注文番号" />
<AMVARIABLE NAME="var_Tanto" VALUE="" DESCRIPTION="担当" />
<AMVARIABLE NAME="var_JuchuNo" VALUE="" DESCRIPTION="受注番号" />
<AMVARIABLE NAME="var_Filename" VALUE="" DESCRIPTION="処理対象ファイル名" />
<!--ファイル名が「order」で始まるファイルのみ対象とするため、フォルダ名 + ファイル名の接頭語 + ワイルドカードまで指定-->
<AMLOOP ACTIVITY="folder" FOLDER="C:\TEMP\00008822\order*" RESULTVARIABLE="var_Filename" />
<!--Excel 値取得-->
<AMEXCEL SESSION="ExcelSession1" WORKBOOK="%var_Filename%" />
<AMEXCEL ACTIVITY="get_cell" SESSION="ExcelSession1" RESULTVARIABLE="var_ShohinCD" CELLREF="D10" />
<AMEXCEL ACTIVITY="get_cell" SESSION="ExcelSession1" RESULTVARIABLE="var_ChumonNo" CELLREF="D8" />
<AMEXCEL ACTIVITY="get_cell" SESSION="ExcelSession1" RESULTVARIABLE="var_JuchuTanka" CELLREF="D14" />
<AMEXCEL ACTIVITY="get_cell" SESSION="ExcelSession1" RESULTVARIABLE="var_Suryo" CELLREF="D16" />
<AMEXCEL ACTIVITY="get_cell" SESSION="ExcelSession1" RESULTVARIABLE="var_Tanto" CELLREF="D18" />
<!--ブラウザ 値入力-->
<AMBROWSER URL="https://www.sct.co.jp/amdemo/order1.php" SESSION="BrowserSession1" />
<AMBROWSER ACTIVITY="setvalue" HTMLNAME="prodcode" SESSION="BrowserSession1" ATTRIBUTE=":text">%var_ShohinCD%</AMBROWSER>
<AMBROWSER ACTIVITY="setvalue" HTMLNAME="prodprice" SESSION="BrowserSession1" ATTRIBUTE=":text">%var_JuchuTanka%</AMBROWSER>
<AMBROWSER ACTIVITY="setvalue" HTMLNAME="prodqty" SESSION="BrowserSession1" ATTRIBUTE=":text">%var_Suryo%</AMBROWSER>
<AMBROWSER ACTIVITY="setvalue" HTMLNAME="prodwh" SESSION="BrowserSession1" VALUE="東京" ATTRIBUTE=":text" />
<AMBROWSER ACTIVITY="setvalue" HTMLNAME="proddesc" SESSION="BrowserSession1" ATTRIBUTE=":text">%var_ChumonNo% %var_Tanto%様</AMBROWSER>
<AMBROWSER ACTIVITY="click" HTMLNAME="button1" USEMATCH="1" SESSION="BrowserSession1" WAIT="YES" />
<!--確認画面 クリック-->
<AMBROWSER ACTIVITY="click" HTMLNAME="button1" USEMATCH="1" SESSION="BrowserSession1" WAIT="YES" />
<!--値取得-->
<AMBROWSER ACTIVITY="getvalue" HTMLID="order_no" SESSION="BrowserSession1" RESULTVARIABLE="var_JuchuNo" ATTRIBUTE=":text" />
<!--ブラウザを閉じる-->
<AMBROWSER ACTIVITY="close" SESSION="BrowserSession1" />
<!--Excel 書き込み-->
<AMEXCEL ACTIVITY="set_cell" SESSION="ExcelSession1" NEWVALUE="三和 花子" CELLREF="D22" />
<AMEXCEL ACTIVITY="set_cell" SESSION="ExcelSession1" NEWVALUE="%var_JuchuNo%" CELLREF="D23" />
<AMEXCEL ACTIVITY="close_workbook" SESSION="ExcelSession1" />
<AMLOOP ACTIVITY="end" />
■別解
今回、毎回ブラウザを開閉していますが、実はブラウザは何度も開きなおす必要はありません。
ログインが必要なページならば、ログイン回数も増えて手間が増えてしまいます。
そのため、ブラウザを開く・閉じるアクションはループの外に出すこともできます。
一方で、入力ページまで画面を戻す必要もある為、画面を戻す処理(ボタンをクリックする、URLを指定して遷移する、等)が必要になります。
(処理構築例:展開するにはここをクリック)
<!--変数定義-->
<AMVARIABLE NAME="var_ShohinCD" VALUE="" DESCRIPTION="商品コード" />
<AMVARIABLE NAME="var_JuchuTanka" VALUE="" DESCRIPTION="受注単価" />
<AMVARIABLE NAME="var_Suryo" VALUE="" DESCRIPTION="数量" />
<AMVARIABLE NAME="var_ChumonNo" VALUE="" DESCRIPTION="注文番号" />
<AMVARIABLE NAME="var_Tanto" VALUE="" DESCRIPTION="担当" />
<AMVARIABLE NAME="var_JuchuNo" VALUE="" DESCRIPTION="受注番号" />
<AMVARIABLE NAME="var_Filename" VALUE="" DESCRIPTION="処理対象ファイル名" />
<!--ブラウザを開く-->
<AMBROWSER URL="https://www.sct.co.jp/amdemo/order1.php" SESSION="BrowserSession1" />
<!--ファイル名が「order」で始まるファイルのみ対象とするため、フォルダ名 + ファイル名の接頭語 + ワイルドカードまで指定-->
<AMLOOP ACTIVITY="folder" FOLDER="C:\TEMP\00008822\order*" RESULTVARIABLE="var_Filename" />
<!--Excel 値取得-->
<AMEXCEL SESSION="ExcelSession1" WORKBOOK="%var_Filename%" />
<AMEXCEL ACTIVITY="get_cell" SESSION="ExcelSession1" RESULTVARIABLE="var_ShohinCD" CELLREF="D10" />
<AMEXCEL ACTIVITY="get_cell" SESSION="ExcelSession1" RESULTVARIABLE="var_ChumonNo" CELLREF="D8" />
<AMEXCEL ACTIVITY="get_cell" SESSION="ExcelSession1" RESULTVARIABLE="var_JuchuTanka" CELLREF="D14" />
<AMEXCEL ACTIVITY="get_cell" SESSION="ExcelSession1" RESULTVARIABLE="var_Suryo" CELLREF="D16" />
<AMEXCEL ACTIVITY="get_cell" SESSION="ExcelSession1" RESULTVARIABLE="var_Tanto" CELLREF="D18" />
<!--ブラウザ 値入力-->
<AMBROWSER ACTIVITY="setvalue" HTMLNAME="prodcode" SESSION="BrowserSession1" ATTRIBUTE=":text">%var_ShohinCD%</AMBROWSER>
<AMBROWSER ACTIVITY="setvalue" HTMLNAME="prodprice" SESSION="BrowserSession1" ATTRIBUTE=":text">%var_JuchuTanka%</AMBROWSER>
<AMBROWSER ACTIVITY="setvalue" HTMLNAME="prodqty" SESSION="BrowserSession1" ATTRIBUTE=":text">%var_Suryo%</AMBROWSER>
<AMBROWSER ACTIVITY="setvalue" HTMLNAME="prodwh" SESSION="BrowserSession1" VALUE="東京" ATTRIBUTE=":text" />
<AMBROWSER ACTIVITY="setvalue" HTMLNAME="proddesc" SESSION="BrowserSession1" ATTRIBUTE=":text">%var_ChumonNo% %var_Tanto%様</AMBROWSER>
<AMBROWSER ACTIVITY="click" HTMLNAME="button1" USEMATCH="1" SESSION="BrowserSession1" WAIT="YES" />
<!--確認画面 クリック-->
<AMBROWSER ACTIVITY="click" HTMLNAME="button1" USEMATCH="1" SESSION="BrowserSession1" WAIT="YES" />
<!--値取得-->
<AMBROWSER ACTIVITY="getvalue" HTMLID="order_no" SESSION="BrowserSession1" RESULTVARIABLE="var_JuchuNo" ATTRIBUTE=":text" />
<!--画面を受注入力ページに戻す-->
<AMBROWSER ACTIVITY="navigate" SESSION="BrowserSession1" URL="https://www.sct.co.jp/amdemo/order1.php" />
<!--Excel 書き込み-->
<AMEXCEL ACTIVITY="set_cell" SESSION="ExcelSession1" NEWVALUE="三和 花子" CELLREF="D22" />
<AMEXCEL ACTIVITY="set_cell" SESSION="ExcelSession1" NEWVALUE="%var_JuchuNo%" CELLREF="D23" />
<AMEXCEL ACTIVITY="close_workbook" SESSION="ExcelSession1" />
<AMLOOP ACTIVITY="end" />
<!--ブラウザを閉じる-->
<AMBROWSER ACTIVITY="close" SESSION="BrowserSession1" />