コンピュータ

  PCOMM/5250エミュレータのAPI (AS/400)

このページは見出しがAS/400となっていますが、どちらかと言えば、 技術的な面はWindowsに深く立ち入っています。ASの技術者にもWindows の技術者にも楽しんでもらえるかと考えます。あまり深く考えずに読んでください。

PCOMM(パーソナル・コミュニケーションズ)と言う呼び名はもし かすると古いのかもしれません。人によっては「5250画面」とか 「エミュレーター」とか呼ぶのでしょうか? このソフトウェアはご存知の通りWindowsクライアントからAS/400のネイティブ 環境を操作できるプロダクトです。現在はCA(ClientAccess)やiSeriesAccess の一部として提供されていますが・・・
PCOMMがプログラミングインターフェースを持っていることはどれだけ 知られているのでしょう。実は強力なAPIを持っています。 このページはPCOMMのAPIを簡単に紹介し、 ちょっとだけ便利なAPIを利用したスクリプトを紹介します。

○まずはマクロから
PCOMMのマクロ記録機能や記録したマクロの再生機能は案外知られて いると思われます。このときに記録されるマクロは機械的でとても 可読性に優れているとはいえません。また、はっきり調べていません が分岐や繰り返しなどの制御構文も無いように思われます。 しかし、もう一つの方法があります。「VBスクリプト」です。 WindowsでVBScriptの使われ方はさまざまです。WSH(WindowsScriptingHost) として単体で呼び出されるケース。この場合はまるでUNIX系OSの ShellScriptのように使用されます。また、HTMLから動的な動きをつけるために 呼び出されるケース。このケースは対象となるブラウザがIE に限定され てしまうため、インターネットでは使えずあまり数は多くは無いと思われますが それでも効率のよさや手軽さは捨てがたいと考えます。 このような処理と同レベルでPCOMMが操作できたらどうでしょう? PCOMMの操作イコールAS/400の操作ということになってしまいます。 つまり業務メニューの操作やコマンドの発行が可能ということです。

○VBScriptから操作可能な仕組み
単刀直入に言ってしまうとWindowsのオートメーションを使っているようです。 つまり、COMインターフェースです。言い方を変えるならActiveX EXE/DLLです。 インストール時にレジストリへ書き込まれたCLSID(クラスID)を基に実体が検索 されメモリー空間へと読み込まれます。このときIUnknownインターフェースを通して 内部のオブジェクトが操作されます。そうです。オブジェクトがあるのです。 これら一連の仕組みやインターフェースはPCOMMのマニュアルではHACL (ホスト・アクセス・クラス・ライブラリ)と呼ばれています。 オートメーションのほかにC++用やJava用も存在します。

○PCOMMを操作するためのオブジェクト(Ver4.2)
PCOMMを操作するためのオブジェクトは以下のようなものがあります。
 接続リスト         autECLConnList
 接続マネージャ       autECLConnMgr
 フィールドリスト      autECLFieldList
 オペレータ情報域      autECLOIA
 プレゼンテーションスペース autECLPS
 セッション         autECLSession
 ウィンドウメトリクス    autECLWinMetrics
 ファイル転送        autECLXfer
 システム          autSystem

○これらを利用したスクリプト
どんなにすごい機能があったとしても生かせなければ技術屋の おごりです。やはり使って便利にならなければ意味がありません。 次のような要件でスクリプトを考えてみました。
DSPLOGで表示されるデータの量が膨大で特定のメッセージを探すのは 根気のいる作業です。また、見落としもありえます。このような場合、 画面の中から指定キーワードを検索してくれたらどうでしょうか? ちょっとは楽になると感じれます。でも1画面だけでは便利さが 半減します。画面をまたがって検索すれば今度こそ本当に便利です。 さらに欲張ってDSPLOGの画面だけではもったいない気がします。 他の画面でも使えたら更に便利です。

○スクリプトの具体的な仕様
1)スクリプトが呼ばれたらインプットボックスを表示
2)未入力かキャンセルされたらスクリプトの終了
3)入力された値で画面内を検索
4)見つかったらカーソルをその位置へ移動し終了
5)見つからなかったら画面に"続く"の文字があるか検索
6)なかったら終了
7)有ったら1が画面スクロールする
8)3〜7までを繰り返す
9)とりあえず10回繰り返して見つからなければ終了

○スクリプトの制約事項
検索文字列を指定する場合は半角と全角の混合はマッチングしません。 これは、シフトコードがあるからです。インプットボックスから シフトコードを直接指定することができないためです。また、 画面スクロールを10画面で制限しているのは途中でキャンセルが できないからです。そのほかとして画面に"続く"の文字が出ない画面は またがっての検索はできません。次のページがあるかの判断は、 この文字列でしか判断していません。そして、検索できるのは 前方にのみです。

○最後に
このページの最後に、実際作成したスクリプトを公開します。 もし、使用する際は自己責任でお願いします。

ソースの表示(SearchDown.mac)