最初のページに戻ります。

総合の目次があるページに戻ります。

よく使うマニュアルです

Wiki

updated on 2004.06.23

6.8.API基礎講座8 ユーザー・スペースを使用しないAPIに関して

[ Previous ] [ HOME ] [ Upper ] [ Next ]


これはさほど難しくありません。

一つのAPIをCALLするだけで、データが取り出せます。一つのオブジェクトの属性など、数に限りのあるパラメータなので、楽です。
ここでは、「ユーザー・スペースを利用するAPI」の続きとして、「スプール」の属性を取り出すAPIを説明します。

QUSLSPLにより、存在するスプールの一覧を、ユーザー・スペースに展開して、その内容を一個一個見る際に、そのスプールの情報を取り出そう、というものです。

4.63.11 スプール・ファイル属性の検索 (QUSRSPLA) API

パラメーター

必須パラメーター・グループ:
1 レシーバー変数 出力 Char(*)
2 レシーバー変数長 入力 Binary(4)
3 形式名 入力 Char(8)
4 修飾ジョブ名 入力 Char(26)
5 内部ジョブ識別コード 入力 Char(16)
6 内部スプール・ファイル識別コード 入力 Char(16)
7 スプール・ファイル名 入力 Char(10)
8 スプール・ファイル番号 入力 Binary(4)
任意選択パラメーター:
9 エラー・コード 入出力 Char(*)

スプール・ファイル属性の検索 (QUSRSPLA) API は、スプール・ファイルに関する特定の情報をレシーバー変数に返します。このレシーバー変数のサイズによって、返される情報の量が決まります。情報が返されるスプール・ファイルは、内部ジョブ識別コードおよび内部スプール・ファイル識別コードによって、あるいは特定のジョブ名、スプール・ファイル名、およびスプール・ファイル番号によって指定することができます。

このAPIのポイントは、以下のパラメータです。

内部ジョブ識別コード
    入力;CHAR(16)
    属性検索の対象のスプール・ファイルを作成したジョブの内部ジョブ識別コード。この識別コードを使用可能にするには、QUSRSPLA API または以下に示す API の 1 つを使用してください。

       トピック4.63.6の『スプール・ファイルのリスト (QUSLSPL) API』
       トピック8.72.10の『ジョブのリスト (QUSLJOB) API』
       トピック8.72.17の『ジョブ情報の検索 (QUSRJOBI) API』   

内部スプール・ファイル識別コード
    入力;CHAR(16)
    属性検索の対象のスプール・ファイルの内部スプール・ファイル識別コード。 識別コードを使用可能にするには、QUSRSPLA API を使用するか、または トピック4.63.6の『スプール・ファイルのリスト (QUSLSPL) API』を参照してくだ さい。

つまり、QUSLSPLで取り出される、データをそのまま利用できるのです。セットになっていると考えていいと思います。この「内部XXX」を使うときは、スプールファイルを特定する他のパラメータはブランクにしなくてはなりません。

修飾ジョブ名 内部ジョブ識別コード 内部スプール・ファイル識別コード スプール・ファイル名 スプール・ファイル番号
ジョブ名 ユーザー名 ジョブ番号
名前 名前 番号 ブランク ブランク 名前 -1 〜 9999
名前 ブランク 番号 ブランク ブランク 名前 -1 〜 9999
名前 名前 ブランク ブランク ブランク 名前 -1 〜 9999
* ブランク ブランク ブランク ブランク 名前 -1 〜 9999
*INT ブランク ブランク 内部ジョブ識別 コード ブランク 名前 -1 〜 9999
*INT ブランク ブランク 内部ジョブ識別 コード 内部スプール・ファイル識別コード *INT -1 〜 9999

 

最後の内部識別コードが使えるのなら、使ったほうが楽です。また、形式名は2つ。SPLA0100とSPLA0200ですが、ここではSPLA0100を使います。
必要となるデータの最大の桁数は209です。レシーバー変数の長さは209で、レシーバー変数(例ではSA0100)の桁数も209まで定義してあります。ここの桁数を違えると、おかしなことになる場合がありますので、注意してください。(まるで、DSが壊れてデータが溢れ出したようなイメージになります。)

    H            Y/                                    1   
    I            DS                                        
    I                                    B   1   40RCVLEN  
    I                                    B   5   80SPLF# 
    ISA0100      DS                                        
    I                                        9  24 LJOBID  
    I                                       25  40 LSPLID  
    I                                       41  50 JOBNAM  
    I                                       51  60 USRNAM  
    I                                       61  66 JOBNUM  
    I                                       67  76 FILNAM  
    I                                    B  77  800FILNUM  
    I                                       81  90 FRMTYP  
    I                                       91 100 USRDTA  
    I                                      183 192 OUTQNM  
    I                                      193 202 OUTQLB  
    I                                      204 209 DATFOP  
    C*----------------------------------------------------*
    C           @ATR      BEGSR                           :
    C*----------------------------------------------------*
    C       	          Z-ADD209       RCVLEN           :
    C                     Z-ADD0         SPLF#            :
    C*                                                    :
    C                     CALL 'QUSRSPLA'             95  :
    C                     PARM           SA0100           :
    C                     PARM           RCVLEN           :
    C                     PARM 'SPLA0100'FMTATR  8        :
    C                     PARM '*INT'    JOBINF 26        :
    C                     PARM JOBID     LJOBID           :
    C                     PARM SPLFID    LSPLID           :
    C                     PARM '*INT'    SPLFNM 10        :
    C                     PARM           SPLF#            :
    C*                                                    :
    C                     ENDSR                           :         

ここで、JOBIDとSPLFIDはQUSLSPLで取り出したものを意味しています。


さて、ここまで見てきたプログラムを一つにすると、どうなるのでしょうか。

  1. ユーザー・スペースにスプールファイルを展開
  2. ユーザー・スペースから項目を取り出す
  3. その項目から、スプールファイルの属性を取り出す

これを繰り返すことになります。この、属性を取り出す部分では、なにか、属性の内容を判定して、CHGSPLFやDLTSPLFをすればいいと思います。

最後に、すべてをまとめたリストを掲げます。

     H            Y/                                    1
     I******************************************************
     I*     D E F I N E    D A T A  - S T R U C T U R E    *
     I******************************************************
     IUSRSPC      DS
     I                                        1  10 USNAME
     I                                       11  20 USLIB
     IGENHED      DS
     I                                    B   1   40DTLOFS
     I                                    B   5   80LSTSIZ
     I                                    B   9  120NOENTH
     I                                    B  13  160DTLSIZ
     I            DS
     I                                    B   1   40USSIZE
     I                                    B   5   80LENDTA
     I                                    B   9  120STRPOS
     I            DS
     I                                    B   1   40RCVLEN
     I                                    B   5   80SPLF#
     ISF0100      DS
     I                                        1  10 USRNML
     I                                       11  30 OUTQL
     I                                       11  20 OUTQNL
     I                                       21  30 OUTQLL
     I                                       31  40 FRMTYL
     I                                       41  50 USRDTL
     I                                       51  66 JOBID
     I                                       67  82 SPLFID
     ISA0100      DS
     I                                        9  24 LJOBID
     I                                       25  40 LSPLID
     I                                       41  50 JOBNAM
     I                                       51  60 USRNAM
     I                                       61  66 JOBNUM
     I                                       67  76 FILNAM
     I                                    B  77  800FILNUM
     I                                       81  90 FRMTYP
     I                                       91 100 USRDTA
     I                                      183 192 OUTQNM
     I                                      193 202 OUTQLB
     I                                      204 209 DATFOP
     C******************************************************
     C*             M A I N -  R O U T I N E               :
     C******************************************************
     C*                                                    :
     C*ユーザー・スペースの作成                          :
     C*                                                    :
     C                     Z-ADD1024      USSIZE           :
     C                     MOVEL'SPLINF'  USNAME           :
     C                     MOVEL'QTEMP'   USLIB            :
     C*                                                    :
     C                     CALL 'QUSCRTUS'             95  :
     C                     PARM           USRSPC           :
     C                     PARM 'SPL'     EXTATR 10        :
     C                     PARM           USSIZE           :
     C                     PARM X'00'     USINIT  1        :
     C                     PARM '*ALL'    USAUTH 10        :
     C                     PARM           USTEXT 50        :
     C*                                                    :
     C*ユーザー・スペースにデータを展開                  :
     C*                                                    :
     C                     CALL 'QUSLSPL'              95  :
     C                     PARM           USRSPC           :
     C                     PARM 'SPLF0100'FMTRCD  8        :
     C                     PARM '*CURRENT'USER   10        :
     C                     PARM '*ALL'    OUTQ   20        :
     C                     PARM '*ALL'    FRMTYP 10        :
     C                     PARM '*ALL'    USRDTA 10        :
     C*                                                    :
     C           *IN95     CABEQ*ON       \END             :
     C*                                                    :
     C*総称見出しからデータを取り出す                    :
     C*                                                    :
     C                     CALL 'QUSRTVUS'             95  :
     C                     PARM           USRSPC           :
     C                     PARM 125       STRPOS           :
     C                     PARM 16        LENDTA           :
     C                     PARM           GENHED           :
     C*                                                    :
     C           *IN95     CABEQ*ON       \END             :
     C           NOENTH    CABEQ0         \END             :
     C*                                                    :
     C*リストセクション読み込みの初期値                  :
     C*                                                    :
     C                     Z-ADD1         W1CNT   50       :カウンター
     C*                                                    :
     C                     Z-ADDDTLOFS    STRPOS           :
     C                     ADD  1         STRPOS           :リスト開始桁
     C                     Z-ADDDTLSIZ    LENDTA           :リストデータ長
     C*                                                    :
     C* リストセクションの各項目取り出し                 :
     C*                                                    :
B001 C           W1CNT     DOWLENOENTH                     :項目分になるまで
 001 C*                                                    :
 001 C                     CALL 'QUSRTVUS'             95  :リスト部分RTV
 001 C                     PARM           USRSPC           :
 001 C                     PARM           STRPOS           :
 001 C                     PARM           LENDTA           :
 001 C                     PARM           SF0100           :
 001 C*                                                    :
 001 C                     EXSR @ATR                       :
 001 C*                                                    :
 001 C                     ADD  1         W1CNT            :
 001 C                     ADD  DTLSIZ    STRPOS           :
 001 C*                                                    :
E001 C                     ENDDO                           :
     C*                                                    :
     C           \END      TAG                             :
     C*                                                    :
     C                     MOVE *ON       *INLR            :
     C                     RETRN                           :
     C******************************************************
     C*             S U B   -  R O U T I N E                
     C******************************************************
     C*----------------------------------------------------*
     C           @ATR      BEGSR                           :
     C*----------------------------------------------------*
     C                     Z-ADD209       RCVLEN           :
     C                     MOVE *BLANK    JOBINF 26        :
     C                     MOVE *BLANK    SPLFNM 10        :
     C                     Z-ADD0         SPLF#            :
     C*                                                    :
     C                     CALL 'QUSRSPLA'             95  :
     C                     PARM           SA0100           :
     C                     PARM           RCVLEN           :
     C                     PARM 'SPLA0100'FMTATR  8        :
     C                     PARM '*INT'    JOBINF           :
     C                     PARM JOBID     LJOBID           ::
     C                     PARM SPLFID    LSPLID           :
     C                     PARM '*INT'    SPLFNM           :
     C                     PARM           SPLF#            :
     C*
     C*ここで、スプールの各属性が取り込まれる。
     C*                                                    :
     C                     ENDSR                           : 
     
     
 

[ Previous ] [ HOME ] [ Upper ] [ Next ]

You are at K's tips-n-kicks of AS/400

 

SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送