自習用コンテンツ その1(https://automate.sct.co.jp/knowledge/12041/)の内容は如何でしたでしょうか?
簡単に出来てしまった方も、難しかった方もいたかと思います。
下記では、解説を書いていきます。
(解答例のコードは、ページ最下部に書いています。)
■1. 値の受け渡し用に、変数を作成する
システム間連携(今回の場合、Excelとブラウザ)において値の受け渡しをするには、何をするにもまず変数が必要です。
今回の場合、
Excelからブラウザに受け渡す項目:「商品コード」「受注単価」「数量」「注文番号」「担当者名」
ブラウザからExcelに受け渡す項目:「受注番号」
がそれに該当します。そのため、変数を6つ作成する必要があります。
変数を作成するには、「変数 - 作成」アクションから実行します。
(図1: 「商品コード」用変数の作成)
同様にして、残りの変数も作成します。下記は変数6つを定義した際の例です。
(下記のコードは、タスクビルダーにコピー&ペーストすることでそのままタスクになります)
<!--変数定義-->
<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="受注番号" />
なお、同様にコードはタスク内でコピペ可能なため、変数も毎回必ずしもドラッグ&ドロップから作成する必要はなく、コピーした内容を一部編集して使いまわすことも可能です。
■2. Excelを開き、各セルから値を取得する
変数を作成した次のステップとして行うことは、Excelから入力に必要な情報を取得することです。
Web画面をそのまま出しても、入力すべき値が分からないと何も実施することが出来ません。
そのため、Webに値を入力する前に、入力すべき値をExcelから変数に取得します。
・2-1. Excelを開く
今回の場合、「商品コード」~「担当者名」の取得、および最終的にWebから取得した値の書込みを、すべて同じExcelに対して実行します。
そのため、各値の取得・書込みごとにExcelを開閉していると効率が悪く、またメンテナンス性も悪くなります。
ゆえに、今回は「Excel - ブックを開く」アクションを利用した「Excelセッション」を使います。
以下では、ダウンロードしたExcelファイルを「C:\TEMP」に保存したものと仮定します。
まずは、「Excel - ブックを開く/作成する」アクションを用いて、当該Excelを開きます。
(図2. Excel - ブックを開くアクション 初期状態)
図2の赤枠部分をクリックし、目的のブックをフォルダから選択します。
・2-2. Excelから値を取得する
Excelに書いてある値を変数に取得するには、「Excel - セルの取得」アクションを使用します。
Excelにおいては、商品コードが「D10」セルにあります。加えて、商品コードの格納先変数は、上記の例においては「var_ShohinCD」になります。
よって、それぞれの設定値は
①リソース:セッション (値取得対象のExcelは、上記ですでに開いている為)
②セル番地:D10
③変数に値を格納する:var_ShohinCD (作成済の変数はプルダウンから選択可能)
となります。
(図5. 設定例)
同様にして、残りの取得対象の値も設定します。
・単価:D14セル、var_JuchuTanka
・数量:D16セル、var_Suryo
・発注者(担当):D18セル、var_Tanto
・注文番号:D8、var_ChumonNo
にそれぞれ存在するので、対応する設定を上記の例(図5)にならって作成します。
※図5で設定したコードを4行追加でコピペしてから各種値を編集すると作業が楽になります。
<!--Excel 値取得-->
<AMEXCEL SESSION="ExcelSession1" WORKBOOK="C:\TEMP\Order00008674.xlsx" />
<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" />
■3. ブラウザに対する値の入力・取得
値一式をExcelから取得したのち、各種値をブラウザに対して入力します。
流れとしては、「1. ブラウザで対象ページを開く」「2. 値入力」「3. クリックによる確定処理」「4. 値取得」のようになります。
・3-1. ブラウザで対象ページを開く
本記事では、「Webブラウザ(従来)」アクションと「Internet Explorer」を利用します。
(AutoMateバージョン11.1.20.19以前では、「Webブラウザ」アクションに読み替えてください)
ページURLに弊社デモサイトのURL「https://www.sct.co.jp/amdemo/order1.php」を指定し、ブラウザセッション名は任意の名前を指定します。
(例では「BrowserSession1」としていますが、AutoMateバージョン11.2以上では「BrowserLegacySession1」がデフォルトの名前になっています。処理自体は、デフォルトの名前のままでも構いません。)
・3-2. ブラウザに値を書き込む
ブラウザに対して値をセットするには、「Webブラウザ(従来) - 値の設定」アクションを使用します。
※まず、この設定を実施する前に、1つ前の「Webブラウザ(従来) - ブラウザを開く」アクションのみ実行して対象のデモサイトをIEで開いておきます。
(手順は以下を参照)
※ブラウザセッション名をデフォルトから変更している場合は、1つ前の「Webブラウザ(従来) - 開く」アクションをコピーしてから当該アクションを編集すると、ブラウザセッション名がデフォルトに戻らず、引き継がれるので楽です。
(図7: アクション切替)
次に、赤枠部分の虫眼鏡マークを押したまま、マウスカーソルを弊社デモサイトを開いているブラウザウィンドウまで持っていきます。
そうすると、緑色の枠でIEのウィンドウが囲まれるので、そこでマウスを放します。
(図8: ブラウザウィンドウ選択)
上記の手順を完了すると、①URLが取得され、②「ドラッグ」マークに色がつきアクティブになります。
この状態で、「ドラッグ」マークを押したまま、値を書き込む場所にマウスを持っていきます。
そうすると、③現在選択中の場所が青色の枠で選択されます。また、④スクリーン右下隅に現在選択中の要素の属性が表示されます。
目的のブラウザ上のオブジェクトを選択している状態でマウスを放します。
(図9: オブジェクト選択手順)
マウスを放すと、①対象のオブジェクトの要素が取得されています。
次に②「インタラクション」をクリックして展開します。
この後設定する内容は、対象のオブジェクトに対しての操作として、書き込む値(セットする変数)を指定します。
(図10: オブジェクト選択後)
※一連の流れを動画にすると以下のようになります。クリックで再生できます。
ブラウザにセットする値を指定します。
「インタラクション」の展開後、「次のように変更」フィールドをクリックしてカーソルをアクティブにすると、①「%」マークが現れるのでクリックします。
※テキストボックスをアクティブにしないと、「%」マークが現れません。
次に、「エクスプレッション ビルダー」が立ち上がります。
ここでセットする対象の変数(ここでは「var_ShohinCD」)を②ダブルクリックし、③のフィールドに挿入されることを確認します。
③のフィールドに現れていることを確認後、④「Insert」ボタンをクリックします。
(図11: 変数選択操作)
変数を挿入すると、①「%」で囲まれた文字列が挿入されます。
AutoMateでは、「%」で囲まれた文字列部分が、変数や式として扱われます。
この内容で、②「OK」ボタンをクリックし、アクション内容を確定します。
(図12: 変数選択後の画面)
上記の結果生成されるAMLコードは以下のようになります。
<AMBROWSER ACTIVITY="setvalue" HTMLNAME="prodcode" SESSION="BrowserSession1" ATTRIBUTE=":text">%var_ShohinCD%</AMBROWSER>
残りの項目に関しても、同様にオブジェクト選択と変数指定を行い、設定します。
※なお、倉庫については変数選択ではなく、固定値の直接入力になります。
ただし、最後の備考の部分は、「変数を2つ使用する」「固定値を含む」点で少し異なります。
以下のように設定を行います。
(図13: 複数の変数と固定値を含む文字列)
なおこの際、「%」が何の文字も含まずに2連すると、ただの文字列の「%」として扱われるため、連続してはいけません。そのため、平文で書くならば必ずワンブランクが必要になります。
(変数の結合方法は、別途knowledge記事をご参照ください)
ブラウザの値セット処理を列挙すると、以下のようになります。(BrowserSession名を「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>
・3-3. ブラウザのボタンクリック処理
ブラウザ上のオブジェクト(ボタンなど)をクリックするには、「Webブラウザ(従来) - クリック」アクションを使用します。
オブジェクト選択処理については、3-2と同様です。
一方で、クリック処理の制御として、画面遷移を伴うクリックの場合は、図14の赤枠部分「ページのローディングが終了するまで待つ」にチェックを入れる必要がある場合がほとんどです。
理由としては、AutoMateでは「待機する」という処理を明示的に入れない限りは、操作対象がどのような状態であろうと処理を先に進めようとします。
人間が操作する分には暗黙的に実施しているこの工程も、RPAに対しては命令する必要があります。
ここにチェックが入っていない場合、画面遷移が完了していないのにボタンをクリックしようとし、そのステップで実行エラーになるといったことが頻発します。
(図14: Webページのローディング待機指示)
この方法に従い、2回のクリック処理を定義します。
・3-4. ブラウザの値取得処理
ブラウザ上のテキストを取得するには、「Webブラウザ(従来) - 値の取得」アクションを使用します。
オブジェクト選択処理については、3-2と同様です。
違う点は、取得したテキストなどの格納先の変数を指定する部分です。(図15の赤枠部分を参照)
ここには、取得したテキストを格納する変数を指定します。ここには「var_JuchuNo」を指定します。(プルダウンリストから選択可能です)
(図15: Webブラウザ(従来) - 値の取得)
・3-5. ブラウザ終了処理
ブラウザセッションを終了してブラウザを閉じるには、「Webブラウザ(従来) - ブラウザを閉じる」アクションを使用します。
プルダウンリストから終了対象のブラウザセッションを選択し、「OK」をクリックします。
(図16: Webブラウザ(従来) - ブラウザを閉じる)
ここまでのブラウザ関連処理をまとめると、以下のようになります。
<!--ブラウザ 値入力-->
<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" />
■4. Excel書込み処理・および保存処理
・4-1. Excelの値書込み
Excelに対して値を書き込むには、「Excel - セルの設定」アクションを使用します。
なお、書込み対象のExcelは値を取得したExcelと同一のため、Excelセッションは同一のものを使用します。
今回の場合、値の書込み先は
担当者名(固定値) :D22セル、固定値(例:三和 花子)
受注番号(可変、Webから取得):D23セル、var_ChumonNo
になります。
書き込む値として変数を指定する方法は、3-2と同様です。
図17は、受注番号を書込む場合の設定例です。
※担当者名を書込むステップの場合は、下記の図における「新しい値」が固定値(例:三和 花子)に、「セル番地」が「D22」にそれぞれ変更になります。
(図17: セルの設定)
・4-2. Excel保存処理
Excelセッションを閉じるには、「Excel - ブックを閉じる」アクションを使用します。
今回は、同じファイルをそのまま上書き保存するので、デフォルトから値は変更せず「OK」をクリックします。
(図18: ブックを閉じる)
今回定義する処理は以上になります。
結果として、Excelが以下のように保存されていれば処理が想定通りに組まれています。
(図19: 処理結果例)
なお、以下に今回の処理構築例を示します。
また、他の同一フォーマットのExcel(サンプル用Excel2)で稼働するか否かは、「Excel - ブックを開く/作成する」のステップで指定するファイルのみ変更すれば確認可能です。
処理構築例を展開するにはここをクリック
<!--変数定義-->
<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="受注番号" />
<!--Excel 値取得-->
<AMEXCEL SESSION="ExcelSession1" WORKBOOK="C:\TEMP\Order00008674.xlsx" />
<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" />