HCL Z and I Emulator (ZIE) は、文字通り IBM のメインフレームにアクセスするためのエミュレーターであり、高度が付加機能を備えています。そのひとつの API について書かれた英語版ブログの記事 Automation using PCSAPI の日本語版を掲載します。
PCSAPI を使った自動化
2020年8月11日
著者: Sudhir Ranjan Rout / Senior Developer, HCL
はじめに
ZIEWin は、IBM メインフレーム/AS400/VT セッションと通信するためのエミュレータインターフェイスを提供します。これは、ホストのデータの読み取りと更新を行い、他のアプリケーションとホストをインターフェイスするために使用されます。トランザクションのエミュレータ画面上で手動タスクを実行すると、反復的になり、長期的には以下の問題を持つことになります。
ZIEWin は、ユーザーが一般的に実行されるタスクを自動化できるようにするために、多くのアプリケーション・プログラミング・インターフェース (API) を公開しています。異なるAPIは特定の機能のセットで提供されており、異なる目的に使用でき、ユーザーの要件に基づいて異なるプログラミングインターフェイスを提供します。異なる API は、Visual Basic for Applications(したがって、MS Officeアプリケーションをサポート)、C/C++、C#、Java、LotusScript、REXなどのプログラミング言語をサポートしています。
ZIEWin が提供する API セットとその機能のリストは以下のとおりです。
今回のブログでは、PCSAPI について詳しく見ていきます。
PCS Session APIは、ZIEWin セッションの起動、セッションのオープン、セッションのクローズ、接続、切断を行えます。EHLLAPI API は IBM EHLLAPI 通信標準(TN3270 と TN5250 プロトコル)と密接に結合されているため、セッション管理 API の機能はありません。ZIEWin のセッション API はまた、プリンタ、ページ、クエリワークステーションプロファイル/セッションリスト/エミュレータのステータスを設定するための機能を提供します。これらの API は、EHLLAPI/HACL API と組み合わせて使用することで、自動化サイクルを完成させられます。
関数呼び出し規約
ZIEWin セッション API は、プログラミングを簡単にするために、すべての関数のシンプルなプロトタイプに従っています。上述したように、これらの API は複数のプログラミング言語(VBA、C/C++、C#など)を使用してアクセスしてプログラムできます。
関数タイプ: API の戻り値の型 関数名: 呼び出される関数 引数: 関数に渡される入力引数で、1 から 3 までの値があります。
以下に、最も一般的に使用されるPCS APIとそのプロトタイプを示します。
1. PCConnectSession BOOL WINAPI PCConnectSession(char cShortSessionID)
2. PCDisconnectSession BOOL WINAPI PCDisconnectSession(char cShortSessionID)
3. pcsQueryConnectionInfo BOOL WINAPI pcsQueryConnectionInfo(char cShortSessionID, CONNECTIONINFO *ConnectionInfo)
4. PCStartSession ULONG WINAPI PCStartSession(PSZ lpProfile, char cShortSessionID, USHORT fuCmdShow)
5. pcsStopSession BOOL WINAPI PCStopSession(char cShortSessionID, USHORT fuSaveProfile)
6. pcsQuerySessionList ULONG WINAPI pcsQuerySessionList(ULONG Count, SESSINFO *SessionList)
これらのAPIの詳細については、こちらをご覧ください。
MacroExecutionBlockDiagram:
次の図は、ZIEWin の API - マクロエンジン - IBM ホストのフローのハイレベルビューを示しています。
コード スニップされたVBAコード (Excel 用)
A. Declarations
'Declaration for PCSAPI functions and defining their prototype to VBA engine
Declare PtrSafe Function pcsStartSession Lib "PCSAPI32.DLL" (ByVal buffer As String, ByVal SessionID As Integer, ByVal CmdShow As Integer) As Integer
Declare PtrSafe Function pcsStopSession Lib "PCSAPI32.DLL" (ByVal SessionID As Integer, ByVal SaveProfile As Integer) As Integer
'Declaration for EHLLAPI functions and defining their prototype to VBA engine
Declare PtrSafe Function ZIEWin_SendKey& Lib "PCSHLL32.DLL" Alias "hllapi" (HllFunctionNo&, ByVal HllData$, HllLength&, HllReturnCode&)
Declare PtrSafe Function ZIEWin_SetCursor& Lib "PCSHLL32.DLL" Alias "hllapi" (HllFunctionNo&, ByVal HllData$, HllLength&, HllReturnCode&)
Declare PtrSafe Function ZIEWin_ConnectPS & Lib "PCSHLL32.DLL" Alias "hllapi" (HllFunctionNo&, ByVal HllData$, HllLength&, HllReturnCode&)
'Defining Global Variable
Dim SessionID As Integer
Dim ProfileName As String
B. Entry Function
'Function entry point which drives the automation
Sub PCSAPISample()
SessionID = 65 'Session A
ProfileName = "Iseriesdemos.WS" 'change it session name of your preference
'call the LaunchZIEWinSession Sub
LaunchZIEWinSession ProfileName, SessionID
'Create a EHLLAPI connection with ZIEWin
ConnectZIEWinSession
'Move the cursor to desired location on the ZIEWin Screen
moveCursor 8, 53, 10
'Send a string to ZIEWin Screen
sendString "HelloWorld"
'Disconnect and close the ZIEWin Session
StopZIEWinSession SessionID
End Sub
C. ConnectZIEWinSession
'Function to establish connection to a ZIEWin session
Public Function ConnectZIEWinSession()
HllFunctionNo = 1
HllData = "A"
HllLength = 4
HllReturnCode = 0
RC = ZIEWin_ConnectPS(HllFunctionNo, HllData, HllLength, HllReturnCode)
If RC = 0 Then
MsgBox "Connection Established"
Else
MsgBox "Connection Failed"
End If
End Function
D. LaunchZIEWin Function
'Function to launch the ZIEWin session
Public Function LaunchZIEWinSession(ProfileName As String, SessionID As Integer)
On Error Resume Next
Dim RC As Integer
'PCSStartsession take 'session profile file' and the session ID (65->ASCII->'A')
RC = pcsStartSession(ProfileName, SessionID, 2)
If RC = 0 Then
MsgBox "ZIEWin Launched Successfully"
Else
MsgBox "ZIEWin Launched failed"
End If
End Function
E. Stop ZIEWin Session
'Function to disconnect and stop the ZIEWin session
Public Function StopZIEWinSession()
On Error Resume Next
Dim ziewinStop As Boolean
'PCSStopSession takes Session ID and save mode as input
ziewinStop = pcsStopSession(SessionID, 2)
If (ziewinStop = True) Then
MsgBox "ZIEWin Closed Successfully"
End If
End Function
サンプルコードをダウンロードしてみてください。
PCSAPIの呼び出しをテストするために使用できるエクセルのサンプルを添付します。
お問い合わせ
HCL ZIEでのWebアプリケーションの整理、自動化機能、ラボサービスの提供に関する詳細については、以下までお問い合わせください。
ZIO@hcl.com
Sudhir Ranjan Rout
Developer, Lab Services