APIの使用を始めた人で気づくと思うが
明細リストを出力するAPIの多くはユーザー・スペース(*USRSPC)に
結果を出力するAPIが多い。
そこでここではまず最初にユーザー・スペースを準備するために
ユーザー・スペースを作成するCLPを紹介する。
[ QUSCRTUS ] ユーザー・スペースの作成
ソースはこちらから
0001.00 /*( QUSCRTUS の変数 )*/
0002.00 DCL VAR(&INZSIZ) TYPE(*INT) VALUE(1024)
0003.00
0004.00 CHKOBJ OBJ(CHAO.USR/NETCNN) OBJTYPE(*USRSPC)
0005.00 MONMSG MSGID(CPF9800) EXEC(DO)
0006.00 RCVMSG PGMQ(*SAME) RMV(*YES)
0007.00 CALL PGM(QUSCRTUS) PARM('NETCNN CHAO.USR ' +
0008.00 'PF ' &INZSIZ X'00' '*ALL ' +
0009.00 'QtocLstNetCnn 用ユーザー空間 ' +
0010.00 '*YES ' &APIERR)
0011.00 MONMSG CPF9870
0012.00 ENDDO
[解説]
このCLPソースは実行できるソースではなく参照のためのテンプレートであるので
CLPソースの一部だけを示している。
ユーザー・スペースは多くの場合、ライブラリーQTEMPに作成するのだが
この例ではパフォーマンスを少しでも良くするためにQTEMPに再作成するのではなく
一定のライブラリー CHAO.USR にNETCNN という名前で作成している。
存在をCHKOBJでチェックして存在しない場合(CPF9801)の場合だけ
作成するようにしている。
ユーザー・スペースの初期作成サイズは1024バイトを指定しているが
ユーザー・スペースはAPIの出力時にオーバー・フローしても自動的に
拡張されるのであらかじめ大きなサイズを指定しておく必要もない。
■ユーザー・スベースを利用する主なAPI
QUSLFLD : フィールド・リストのAPI。フィールドの一覧表を
ユーザー・スペースに出力する。
QUSLOBJ: オブジェクトの一覧表をユーザー・スペースに出力する。
QUSLRCD: ファイルに含まれるレコードの一覧をユーザー・スペースに出力する。
QUSLMBR: ファイルに含まれるメンバー一覧をユーザー・スペースに出力する。
QUSLSPL: スプールの内容をユーザー・スペースに出力する。
このユーザー・スペースには罫線情報を漏れなく出力されるが
CPYSPLFコマンドの出力では罫線データは脱落してしまう。
罫線を直接PDF化できないソフト製品はこのAPIを使うことが
できていない。またユーザー・スペースに出力されたスプール・データは
可変長であるのでRPGでは制御すること適当ではなくC言語による
解析が必要である。技術力の低いソフト会社の製品ではスプールは
十分処理しきれなくなる可能性が高い。
[注意]
ほとんどのAPIによる出力はユーザー・スペースの容量に収まるはずであるが
唯一の例外はスプールである。大量のスプールはひとつのユーザー・スペースの
容量には収まり切れないサイズになることがある。
このような場合は複数のユーザー・スペースに出力してそれらを結合して処理する
必要がある。技術力の低いソフト会社のPDF化製品ではこのような大量スプールへの
配慮がないことが多い。
