System API を使用するプログラムの二つのタイプ

System API を使用するプログラムには、いくつかのパターンがあります。

その中でもとてもよく使う二つのパターンがあるので、ここで紹介しておきましょう。


タイプ 1: ユーザースペースを使うもの

まず、最初に紹介するものはとりあえず「タイプ 1」と名付けましょうか。

例としては、おそらく最も旧くからあるもので「活動ジョブの検査」で使った QUSLJOB という API を使うものです。

この API の呼び出しは↓のようになっています。

  Required Parameter Group:
1 Qualified user space name Input Char(20)
2 Format name Input Char(8)
3 Qualified job name Input Char(26)
4 Status Input Char(10)
  Optional Parameter Group 1:
5 Error Code I/O Char(*)

最初の引数は Qualified user space object で続く引数が Format name になっていることがわかりますね。

オブジェクト名とタイプだけを高速に取得する (V5R4)」で使用している QUSLOBJ という API がありますが、その API の呼び出しを見てみると↓のようになっているのがわかります。

  Required Parameter Group:
1 Qualified user space object Input Char(20)
2 Format name Input Char(8)
3 Object and library name Input Char(20)
4 Object type Input Char(10)
  Optional Parameter Group 1:
5 Error Code I/O Char(*)

こちらも最初の引数は Qualified user space object で続く引数が Format name になっています。

これ、どちらも同じロジックで情報を取得できるんですね。つまり、同じスケルトンが使用できるわけです。

たとえば、「オブジェクト名とタイプだけを高速に取得する (V5R4)」と「System API の使用例 - CL から RPG への書き直し -」のプログラムを比較してみてください。

また「System API で NETSTAT 情報の取得 (V5R4)」なども見てみてください。

ほとんど同じものだということがわかると思います。


タイプ 2: レシーバ変数を使うもの

では、次に紹介するものはとりあえず「タイプ 2」と名付けましょう。

同じような NETSTAT 情報の取得でも「System API で NETSTAT 拡張情報の取得 (V5R4)」で紹介している QtocRtvNetCnnDta という API の引数はだいぶ異なっています。

  Required Parameter Group:
1 Receiver variable Output Char(*)
2 Length of receiver variable Input Binary(4)
3 Format name Input Char(8)
4 Socket connection request Input Char(*)
5 Error Code I/O Char(*)

最初の引数は Receiver variable で、続く引数はその Receiver variable の長さ(Length of receiver variable)、そして Format name と続きます。

これも実はよくある API の呼び出し形態なんです。

System API で装置記述などの状態を把握する (V5R4)」で使用したRetrieve Configuration Status (QDCRCFGS) という API を見てみてください。

  Required Parameter Group:
1 Receiver variable Output Char(*)
2 Length of receiver variable Input Binary(4)
3 Format name Input Char(8)
4 Configuration description type Input Char(10)
5 Configuration description name Input Char(10)
6 Error Code I/O Char(*)

こちらも、最初の引数は Receiver variable で、続く引数はその Receiver variable の長さ(Length of receiver variable)、そして Format name と続くところまで同じですね。

他には「OUTQ の情報を取得するための API (QSPROUTQ)」で使用した QSPROUTQ という API の呼び出しも↓のようになっています。

  Required Parameter Group:
1 Receiver variable Output Char(*)
2 Length of receiver variable Input Binary(4)
3 Format name Input Char(8)
4 Qualified output queue name Input Char(20)
5 Error code I/O Char(*)

それぞれのプログラム例を参照してみてください。ほとんど同じプログラムで、呼び出す API とデータを取得するデータ構造だけを変えたものになっているということがわかると思います。


まとめ

だいたいこの二つで System API の呼び出しは相当カバーできると思います。

変更する部分はほとんど限られていますが、特別にプログラムの修正方法などの解説はしないことにします。
↑でリンクした例を見てみればだいたいのところはわかるでしょう。

そもそも、System API を使ったプログラムなどを「似たようなサンプルプログラムがたくさん例としてあるのに、そのプログラムのどこを直していいかわからない」といったようなレベルの人が作ったり直したりするのはいかにもキケンなかんじがしませんか??

[Top Pageに戻る]

Ads by TOK2