Microsoft提供のPower Automate Desktop(以降PADと表記)の「ターミナルエミュレーション」アクションはIBMiグリーンスクリーン端末(以降5250端末と表記)との連携を提供します。連携は、人間が5250端末画面をキーボード操作するのと同様に5250端末に対してカーソル移動、テキスト設定と取得、キー送信などの操作が可能です。
動画で解説
音声付き、約7分のビデオです
ターミナルエミュレーション動作概要
連携にはPADがターミナルエミュレーションを利用可能とするAPIであるEHLAPI32.dllが必要です。EHLAPI32.dllは後述するIBMサイトからダウンロードが可能です。
「ターミナルエミュレーション」アクションは下図のように、①「ターミナルセッションを開きます」の設定で、②APIのEHLAPI32.dllを用い、③指定したセッション名で紐づけた④5250端末画面を経由し⑤IBMiと連携をします。
ですので、連携にはPAD定義実行前に5250端末が起動済である必要があります。

必要なファイルを入手
今回は5250端末ソフトウエアとして「IBM i Access Client Solutions」(以降ACSと表記)、APIは「ACS EHLLAPI」(以降APIと表記)を下記URLからダウンロードしました。
https://www.ibm.com/resources/mrs/assets/DownloadList?source=swg-ia&lang=ja_JP
ダウンロードにはIBM IDが必要です。また2要素認証などの設定が必要な場合がございます。

APIの導入
ACS導入手順は本筋ではありませんので割愛いたします。
API導入はダウンロードした「acshllapi.exe」をダブルクリックし、画面の指示に従って「Next」ボタンで進めると「C:\Program Files (x86)\IBM\EHLLAPI」に導入されます。この導入先パスをPAD設定で用います。
PAD設定例
5250端末画面でのカーソル移動、文字列入力、文字列取得、キー送信の設定例として下記フローを用い①~⑪の順に解説致します。
- ①ターミナルセッションを開く
- ②~⑥サイン・オンする
- ⑦⑧文字列を取得する
- ⑨⑩サイン・オフする
- ⑪ターミナルセッションを閉じる

ターミナルセッションを開く
上記①では「ターミナルセッションを開きます」の「プロバイダー」から「HLLAPI」を選択します。「HLLAPI DLLパス」はacshllapi.exeの導入先「C:\Program Files (x86)\IBM\EHLLAPI」内に存在するEHLAPI32.dllを選択指定します。
セッション名は5250端末構成の「セッション名」と多少異なり「A、B、C・・・」といった値を指定します。

カーソル移動、文字列入力、文字列取得、キー送信はこの「ターミナルセッションを開きます」で生成された変数「TerminalSession」を用います。
サイン・オンする
②では①で生成された変数「TerminalSession」を用い5250端末サイン・オン画面のユーザーID入力欄の行と列位置を指定しています。

③では「テキスト」欄にユーザーIDを指定しています。「テキストを設定します」は「カーソル位置」を選択しています。

④では②同様に①で生成された変数「TerminalSession」を用い5250端末サイン・オン画面のパスワード入力欄の行と列位置を指定しています。

⑤では③同様に「テキスト」欄にパスワードを指定します。「テキストを設定します」は「カーソル位置」を選択しています。

⑥ではEnterキーを押したいので「コントロールキー」から「送信」を選択しています。

文字列を取得する
⑦では5250端末画面に表示されている文字を取得するため、取得するテキストの長さ、行、列を指定しています。今回は例として5250端末画面右上に表示しているIBMiシステム名を取得しています。取得した文字は「生成された変数」の「TerminalText1」に格納されます。

⑧では「メッセージを表示」アクションを用い、取得した文字が格納されている変数「TerminalText1」を確認表示しています。

サイン・オフする
⑨ではサイン・オフするため「テキスト」欄に「SIGNOFF」を指定しています。今回はカーソル位置がコマンドライン上に位置しているため、特にカーソル移動する必要が無いので「テキストを設定します」では「カーソル位置」を選択しています。

⑩ではEnterキーを押したいので「コントロールキー」から「送信」を選択しています。

ターミナルセッションを閉じる
⑪では①で開いたターミナルセッションを閉じています。

注意点1:ターミナルセッションは必ず閉じる
「ターミナルセッションを閉じます」アクション実行前にフローが異常終了した場合、フローを再実行すると「エミュレーターとの通信中にエラーが発生しました」のエラーになる場合がありました。
5250端末を再起動すると復帰しましたが、エラーが発生しそうな注意すべきアクションには「エラー発生時」の設定に「ターミナルセッションを閉じます」アクションを実行するサブフローの作成が可能です。下図例では別途「closeSession」というサブフローを作り、「closeSession」サブローには「ターミナルセッションを閉じます」アクションを指定しています。

注意点2:端末画面遷移の検知
PADからの5250端末操作は意図した画面遷移である事が大前提です。ですので正しく画面遷移しているのか「ターミナルセッションでテキストを待機」で確認しながらフローを組み立てるのが安全のようです。例えば今回例の場合IDとパスワードを入力後の次の画面はメインメニューです。

ですので「ターミナルセッションでテキストを待機」の「待機するテキストです」にメインメニュー画面左上の「MAIN」の指定が可能です。この文字列「MAIN」が表示されない場合は「タイムアウト」値に指定した秒数後エラーにする事が可能です。エラー処理は前述の「注意点1:ターミナルセッションは必ず閉じる」同様に「エラー発生時」内にエラー処理をするサブフローの指定等をします。

関連リンク
お問合せ
https://alpcom.co.jp/contact/
アルファー・コミュニケーションズ公式YouTube
https://www.youtube.com/channel/UCTqwZsRRpAs9NPTUz2yH3ow/videos