6.4.API基礎講座4 ユーザー・スペースに対する操作 |
ユーザー・スペースに対する操作は、以下のAPIで行います。但し、QUSDLTUSの代わりに、DLTUSRSPC(コマンド)でも可能です。 API名は、覚えやすいように、ハイフネーションをつけてみました。
正直に言って、私が使ったことがあるのは、作成(CRT)と削除(DLT)と検索(RTV)だけです。そのほかは使うチャンスはありませんでした。 ユーザー・スペースの作成ユーザー・スペースを使うAPIは、その実行前に、予め自分でユーザー・スペースを作成しなくてはなりません。RPGからでも、CLPからでも可能です。またV3.1では、REPLACEパラメータが増えました。前はなかったと思います。どのシステムでも使えるようにするなら、「CHKOBJして、CPF9800のモニターしてから作成」のほうがいいでしょう。(もし、replaceパラメータをサポートすることがないときのため。関係なければ、replaceしていいと思います。) 作成するライブラリーはQTEMPに作成した方がいいでしょう。通常のライブラリーにするならば、ロックをして他のユーザーから排他したほうが無難です。 作成してくれるプログラム(これもAPI)は、QUSCRTUSです。
実際に作成しているプログラムを見てみましょう。 例) RPGの場合
CLPの場合
マニュアルに出ていた定義方法
※このプログラムと、マニュアルのCLPのサンプルは、サイズの指定が違いますよね。 マニュアルでは、バイナリフィールドに16進数を直接書いていたのです。 上の例(x'0100')だと、10進数256のユーザー・スペースを作ろうとしています。16進数100は(FFの次なので)256です。これだと、出来るユーザー・スペースのサイズが分かりづらいので、上記の%BINをお勧めします。これだと10進数で指定するので、わかりやすいと思います。 前は、組み込み関数%BINがなかったのですが、これからは自分もこのやり方にしようと思います。ここで、指定されたユーザー・スペースのサイズが、そのままオブジェクトサイズにあるわけではなく、DMPOBJで作成されるスプールQSRVDMPにある、空間-と出ている部分です。 例えば、
と出ていたら、つまり 000000 から 0003FFまですべてX'40'なので1024のスペースがあることになります。(X'3FF'=1023で、0から開始しているので1024バイト) 。面白いことに、サイズを1000にしても1024にしても1024になり、1025にすると1536(1024+512)になりますので、2の累乗の数字を指定したほうがいいでしょう。 ちなみに、QUSCRTUSに手渡すパラメータの初期値をX'00'にすると
となり、スペース X'40'が X'00'になっていることが分かりますね。この方がパフォーマンスが最高になると、マニュアルでいっています。 それからILE RPGでデータ定義仕様フィールドでバイナリを指定する場合注意が必要です。
KKKKKKは、4バイトのバイナリであることを、バイト長を指定して、宣言していますよね。これだと、KKKKKKはプログラム内部では、9.0のパックになります。コンパイルリストで確認できます。B(9,0)と出ています。 ところが、XXXXXX は、バイナリ2バイトを意味します。なぜなら、バイナリで数字4桁を表現したいと指定しているからです。また、下のYYYYYYは4バイトのバイナリになります。なぜなら、9桁の数字を扱いたいと指示したからです。この辺を注意しないと、いけません。 開始終了を指定するパターンでは、フィールドのバイト数を直接指定しているので問題が無いのですが、ILEでできる指定方法ではやや頭を使うことになります。
|
You are at K's tips-n-kicks of AS/400
|
SEO | [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送 | ||