Automation Anywhere A2019でPython/JavaScript/VBScriptのインラインスクリプティングでプログラミングを行う

Automation Anywhere A2019では、外部スクリプトや外部プログラムを呼び出すことができます。スクリプト言語で対応をしているのは Python / Javascript / VBScript の3つで、これらは別のファイルとして用意しておくこともできますし、Botにインラインスクリプトとして埋め込んで実行することもできます。別のファイルにしておく場合は、ローカルで作成したファイルをControl Roomにあらかじめアップロードすることになります。いずれの場合もスクリプトはローカルPCの環境で実行されます。

# インラインスクリプティングの方法

### Python
1. Botエディターで、アクションパレットから**「Python script: Open」**を探してドラッグ&ドロップします。<br/>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/2c6dae66-f36c-db88-45c8-a830b4ad5312.png)
2. **「Python script: Open」**アイコンを選択してアクションの詳細を開きます。そこで「Manual input」を選択します。<br/>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/4f2fa463-058e-21db-e060-cb434b8c8a67.png)
3. 「Enter script here」のテキストボックスに以下のコードを貼り付けて保存します。

```Python:Inlinescript
from tkinter import messagebox
messagebox.showinfo('Python', 'Hello World')
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/b58552dc-5dce-26bf-ae8c-9c2e32d0bf60.png)

4.最後に**「Python script: Execute script」**と、**「Python script: Close」**を探して、フローの最後にドラッグ&ドロップし保存すれば完成です。<br/>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/fd8a13e1-5b94-3d90-37e8-378a06fe39e0.png)


>注: Pythonコードを実行するには、ローカルPCにPython実行環境の構築が必要です。詳しくは @zamaezaaa さんの記事『[A2019 Community EditionでPythonコードを動かす](https://qiita.com/zamaezaaa/items/b956243ce80f9a652dfb)』を参照してください。Python実行環境がない環境でBotを実行した場合、Botで何も実行されずに正常終了しますが、Bot Agentがフリーズして次のBotが実行できなくなり、再起動が必要になる場合があります。

**実行結果**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/568cdd1e-8522-9298-53f6-459a29dd73f2.png)

**参考情報**

* 『[Python スクリプト パッケージ](https://docs.automationanywhere.com/bundle/enterprise-v2019/page/enterprise-cloud/topics/aae-client/bot-creator/commands/cloud-python-command.html?_LANG=jpjp)』[^1][^2] - 製品ドキュメント

### Javascript
1. Botエディターで、アクションパレットから**「JavaScript: Open」**を探してドラッグ&ドロップします。<br/>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/b5115081-63be-8dbc-b39f-bcbc8400f15f.png)
2. **「JavaScript: Open」**アイコンを選択してアクションの詳細を開きます。そこで「Manual input」を選択します。<br/>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/7936c518-3619-69da-5734-e507a776fccd.png)
3. 「Enter script here」のテキストボックスに以下のコードを貼り付けて保存します。

```Javascript:Inlinescript
function getRandom() {
    return Math.floor( Math.random()*10000 );
}
```
これは0から10,000までの間の乱数を返す関数です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/a1b03aeb-8700-6664-fd40-c439394823bf.png)

4.**「JavaScript: Run JavaScript」**を探してフローの最後にドラッグ&ドロップし、アクションの詳細で、実行する関数名に`getRandom`、出力の格納先に`$prompt-assignment$`変数を指定します。<br/>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/b4f880dd-a411-8ca3-aab2-85656d775ae6.png)

5.最後に**「JavaScript: Close」**を探してフローの最後にドラッグ&ドロップし、その後ろにMessageBoxアクションを挿入して`$prompt-assignment$`変数を表示するように設定して保存すれば完成です。<br/>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/67f4bd55-5296-220d-852e-cb1dcb08f6f8.png)



**実行結果**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/9b1252a3-d7da-09c2-5ba6-74925c6aa3a2.png)

>注: JavaScript の場合は、`alert`、`prompt`、`writeln`のようなブラウザーが実装している画面出力や、`WScript.Echo`、`WScript.StdOut.WriteLine`のようなWSHオブジェクトを利用するとエラーになったため、値の処理だけJavaScriptで実行して、結果はAutomation AnywhereのMessageBoxで表示するようにしました。

**参考情報**

* 『[JavaScript パッケージ](https://docs.automationanywhere.com/bundle/enterprise-v2019/page/enterprise-cloud/topics/aae-client/bot-creator/commands/cloud-javascript-command.html?_LANG=jpjp)』[^1][^2]  - 製品ドキュメント

### VBScript
1. Botエディターで、アクションパレットから**「VBScript: Open」**を探してドラッグ&ドロップします。<br/>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/ea7d2d8d-0982-70fd-4456-0dd10b459ce9.png)
2. **「VBScript: Open」**アイコンを選択してアクションの詳細を開きます。そこで「Manual input」を選択します。<br/>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/39c9f40c-086b-a86f-eae6-05c2cc424f38.png)
3. 「Enter script here」のテキストボックスに以下のコードを貼り付けて保存します。

```VBscript:Inlinescript
MsgBox "Hello World"
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/cd16924c-07bd-b0f3-9139-45bab301a31d.png)

4.最後に**「VBScript: Run function」**と、**「VBScript: Close」**を探して、フローの最後にドラッグ&ドロップし保存すれば完成です。<br/>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/fa89ef3c-bd51-b2b9-aa2b-40f3d4a0004b.png)


**実行結果**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/cdce1e9d-04f9-3784-e2c6-22c8ffa00a4d.png)

**参考情報**

* 『[VBScript パッケージ](https://docs.automationanywhere.com/bundle/enterprise-v2019/page/enterprise-cloud/topics/aae-client/bot-creator/commands/cloud-vb-script.html?_LANG=jpjp)』[^1][^2]  - 製品ドキュメント


[^1]: 製品ドキュメントの内容は頻繁にアップデートされているので英語版のドキュメントを参照するのがお勧めです。

[^2]: 最新の英語ドキュメントを見ると、Pythonの場合は関数に渡せる引数は1つだけ(Boolean, dictionary, list, number, string)、JavaScript/VBScriptの場合はリスト型変数を渡すことで複数の引数を渡せる(Boolean, Datetime, number, string etc.)とあります。ただし、A2019.10 (ビルド2545)では、VBScriptではアクションの詳細の「Arguments to the function」にてリスト型変数以外にも文字列や数値も入力可能となっています。