リストAPIの検索方法 リストAPIの検索方法

Operation Knowhow
リストAPIの検索方法
2007/05/07
1
Copyright 2007 CYFLEX L.L.C.
Operation Knowhow
リストAPIとは?
DSPOBJD,DSPFDなどでオブジェクト一覧、メンバー一覧をファイル出力でき
ますが、よりきめ細かな情報を得たい、あるいはパフォーマンスを重視したい
場合はリストAPIを使用することにより解決できます。
また、ファイル出力がサポートされていないコマンドについてはファイル出力
ができます。(スプール一覧、ジョブ一覧など)
リストAPIを利用するには、ユーザースペースを使用しますがその検索方法
についてご紹介します。
2
Copyright 2007 CYFLEX L.L.C.
Operation Knowhow
リストAPIとは?
ジョブ一覧、スプール一覧、オブジェクト一覧などを作成したい場合に使用します。
リストAPIによって取り出されたたデータは、ユーザースペースに格納されます。
ジョブ
リスト
スプール
リスト
リストAPI
ユーザースペース
3
オブジェクト
リスト
抽出条件を指定
抽出された全データ
が格納
Copyright 2007 CYFLEX L.L.C.
Operation Knowhow
リストAPIの使用手順
リストAPIを使用するには以下の手順で行います。
ユーザースペースの作成
リストAPIによりリストの作成
ユーザースペースの検索
4
Copyright 2007 CYFLEX L.L.C.
Operation Knowhow
リストAPIの種類
リストAPIの代表的なものです。他にも多数あります。
機能
API
構成記述のリスト
QDCLCFGD
データベースファイルのメンバーのリスト
QUSLMBR
ジョブログメッセージのリスト
QMHLOBJL
オブジェクトのリスト
QUSLOBJ
スプールファイルのリスト
QUSLSPL
ジョブのリスト
QUSLJOB
5
Copyright 2007 CYFLEX L.L.C.
Operation Knowhow
ユーザースペースの検索方法
ユーザースペースに格納されたデータを取り出すには、以下の方法があります。
①ポインターを使用しない方法
②ポインター使用する方法
注:ポインターは、ILEの場合のみ使用できます。
6
Copyright 2007 CYFLEX L.L.C.
Operation Knowhow
ポインターを使用しない方法(1/9)
ユーザースペース
総称見出し
①ユーザースペースの作成
QUSCRTUS
②リストAPIの実行
リストデータセクションへのオフセット
リストデータセクションのサイズ
リストの項目数
各項目のサイズ
③総称見出しの検索
CALL
‘QUSRTVUS
PARM
PARM
1
PARM
192
④リストデータセクションから1項目ずつ取り出す。
QUSRTVUS
リストデータセクション
リスト項目1
リスト項目2
リスト項目3
・
・
SPACENAME
STRPOS
LENDTA
抽出されたデータ
が格納されている。
7
Copyright 2007 CYFLEX L.L.C.
Operation Knowhow
ポインターを使用しない方法(2/9)
ユーザースペース・総称見出しのレイアウト
オフセット
タイプ
内容
10進数
16進数
0
0
CHAR(64)
ユーザー域
64
40
BINARY(4)
総称見出しのサイズ
68
44
CHAR(4)
構造のリリースおよびレベル
72
48
CHAR(8)
形式名
80
50
CHAR(10)
使用されたAPI
90
5A
CHAR(13)
作成された日時
103
67
CHAR(1)
情報の状況
104
68
BINARY(4)
使用されるユーザースペースのサイズ
108
6C
BINARY(4)
入力パラメータ・セクションまでのオフセット
112
70
BINARY(4)
入力パラメータ・セクションのサイズ
116
74
BINARY(4)
見出しセクションまでのオフセット
120
78
BINARY(4)
見出しセクションのサイズ
8
Copyright 2007 CYFLEX L.L.C.
Operation Knowhow
ポインターを使用しない方法(3/9)
ユーザースペース・総称見出しのレイアウト(続き)
オフセット
タイプ
内容
10進数
16進数
124
7C
BINARY(4)
リストデータセクションのオフセット
128
80
BINARY(4)
リストデータセクションのサイズ
132
84
BINARY(4)
リスト項目の数
136
88
BINARY(4)
各項目のサイズ
140
8C
BINARY(4)
リスト項目にあるデータのCCSID
144
90
CHAR(2)
国別ID
147
93
CHAR(3)
言語ID
149
95
CHAR(1)
サブセットされたリスト標識
150
96
CHAR(42)
予約済み
9
Copyright 2007 CYFLEX L.L.C.
Operation Knowhow
ポインターを使用しない方法(4/9)
リストデータセクションからのデータ取り出し手順
開始桁=オフセット+1
リストデータ長=項目サイズ
COUNT=1
項目数(データ数)
1項目のサイズ
COUNT<項目数
項目1
Y
QUSRTVUSで1項目分を抽出
開始桁
項目2
開始桁
項目3
最後の項目
開始桁
COUNT=COUNT+1
開始桁=開始桁+項目サイズ
10
Copyright 2007 CYFLEX L.L.C.
Operation Knowhow
ポインターを使用しない方法(5/9)
ユーザーススペースの作成
*-------------------------------------* ユーザースペース作成 APIのパラメータ
*-------------------------------------DSPACENAME
S
20A
INZ('LISTAPI1 QTEMP
DSPACEATTRIB
S
10A
DSPACESIZE
S
10I 0 INZ(1024)
DSPACEINIT
S
1A
DSPACEAUTH
S
10A
INZ('*CHANGE')
DSPACETEXT
S
50A
DSPACEREPLACE
S
10A
INZ('*YES')
*
*-------------------------------------* ユーザースペースの作成
*-------------------------------------C
CALL
'QUSCRTUS'
C
PARM
C
PARM
C
PARM
C
PARM
C
PARM
C
PARM
C
PARM
C
PARM
11
')
SPACENAME
SPACEATTRIB
SPACESIZE
SPACEINIT
SPACEAUTH
SPACETEXT
SPACEREPLACE
APIERRORDS
Copyright 2007 CYFLEX L.L.C.
Operation Knowhow
ポインターを使用しない方法(6/9)
ジョブリストの作成
*-------------------------------------* リストジョブ APIのパラメータ
*-------------------------------------DJOBLFORMAT
S
8A
INZ('JOBL0200')
DJOBLJOBNAME
S
26A
INZ('*ALL
*ALL
DJOBLSTATUS
S
10A
INZ('*OUTQ
')
*-------------------------------------* リストジョブ APIのパラメータ(OPTIONAL GROUP 2)
*-------------------------------------DJOBLTYPE
S
1A
INZ('*')
DJOBL#FIELDS
S
10I 0 INZ(%ELEM(JOBLKEYS))
DJOBLKEYS
S
10I 0 DIM(2)
*ALL
')
*-------------------------------------* リストジョブAPIの実行
*-------------------------------------C
EVAL
JOBLKEYS(1) = 0501
C
EVAL
JOBLKEYS(2) = 0401
C*
C
CALL
'QUSLJOB'
C
PARM
SPACENAME
C
PARM
JOBLFORMAT
C
PARM
JOBLJOBNAME
C
PARM
JOBLSTATUS
C
PARM
APIERRORDS
C
PARM
JOBLTYPE
C
PARM
JOBL#FIELDS
C
PARM
JOBLKEYS
12
Copyright 2007 CYFLEX L.L.C.
Operation Knowhow
ポインターを使用しない方法(7/9)
総称見出しの検索
*-------------------------------------* 総称見出し
*-------------------------------------DAPIHEADER0100
DS
D HDRUSERAREA
64A
D HDRSIZE
10I 0
D HDRRELEASE
4A
D HDRFORMAT
8A
D HDRAPINAME
10A
D HDRDATETIME
13A
D HDRINFOSTS
1A
D HDRUSRSPCSIZE
10I 0
D HDROFFINP
10I 0
D HDRSIZEINPUT
10I 0
D HDROFFHDR
10I 0
D HDRSIZEHDR
10I 0
D HDROFFLIST
10I 0
D HDRSIZELIST
10I 0
D HDRLIST#
10I 0
D HDRLISTSIZE
10I 0
D HDRCCSID
10I 0
D HDRCOUNTRY
2A
D HDRLANGUAGE
3A
D HDRSUBSET
1A
D HDRRESERVED
42A
13
Copyright 2007 CYFLEX L.L.C.
Operation Knowhow
ポインターを使用しない方法(8/9)
総称見出しの検索
*-------------------------------------* 総称見出しの検索
*-------------------------------------C
CALL
'QUSRTVUS'
C
PARM
SPACENAME
C
PARM
1
STRPOS
C
PARM
192
LENDTA
C
PARM
APIHEADER0100
*
C
EVAL
STRPOS = HDROFFLIST + 1
C
EVAL
LENDTA = HDRLISTSIZE
14
Copyright 2007 CYFLEX L.L.C.
Operation Knowhow
ポインターを使用しない方法(9/9)
リスト項目からのデータ取り出し
C
C
C
C
C
C
DO
CALL
PARM
PARM
PARM
PARM
HDRLIST#
'QUSRTVUS'
NUMLIST
IF
JLENDSEVERITY
EVAL
JOBNAME = %TRIM(JLJOBNAME) + '/' +
%TRIM(JLJOBUSER) + '/' +
JLJOB#
EXCEPT
ENDIF
JOBDTL
IF
EVAL
ENDIF
ENDDO
NUMLIST < HDRLIST#
STRPOS = STRPOS + HDRLISTSIZE
SPACENAME
STRPOS
LENDTA
FMTJOBL0200
*
C
> 0
*
C
C
C
*
C
C
*
C
C
C
C
15
Copyright 2007 CYFLEX L.L.C.
Operation Knowhow
ポインターを使用する方法(1/7)
ポインターを使用する場合は以下の手順で行います。
ユーザースペースの作成
リストAPIによりリストの作成
ユーザースペースのポインター取得
最初のリスト項目へのポインターセット
リスト項目からのデータ取り出し
16
Copyright 2007 CYFLEX L.L.C.
Operation Knowhow
ポインターを使用する方法(2/7)
ポインターとは?
ポインターはフィールドの開始位置(アドレス)を表します。
ポインターを指定したエリアは、実行開始時には記憶域は確定しておらずポイ
ンターにアドレスが設定されることによりアクセス可能となります。
長さが不明なデータを取り扱う時に使用します。
詳細は、ILE RPG解説書 基底ポインター・データ・タイプを参照してください。
17
Copyright 2007 CYFLEX L.L.C.
Operation Knowhow
ポインターを使用する方法(3/7)
ポインターの定義
*-------------------------------------* GENERIC HEADER STRUCTURE
*-------------------------------------D*@@@ APIHEADER0100
DS
DAPIHEADER0100
DS
BASED(SPACEPTR)
D HDRUSERAREA
64A
D HDRSIZE
10I 0
D HDRRELEASE
4A
基底ポインターの指定
D HDRFORMAT
8A
D HDRAPINAME
10A
D HDRDATETIME
13A
D HDRINFOSTS
1A
D HDRUSRSPCSIZE
10I 0
D HDROFFINP
10I 0
D HDRSIZEINPUT
10I 0
D HDROFFHDR
10I 0
D HDRSIZEHDR
10I 0
D HDROFFLIST
10I 0
D HDRSIZELIST
10I 0
D HDRLIST#
10I 0
D HDRLISTSIZE
10I 0
D HDRCCSID
10I 0
D HDRCOUNTRY
2A
D HDRLANGUAGE
3A
D HDRSUBSET
1A
D HDRRESERVED
42A
18
Copyright 2007 CYFLEX L.L.C.
Operation Knowhow
ポインターを使用する方法(4/7)
ポインターの定義
*-------------------------------------* API FORMAT JOBL0200 STRUCTURE
*-------------------------------------D*@@@ FMTJOBL0200
DS
DFMTJOBL0200
DS
BASED(LISTPTR)
D JLJOBNAME
10A
D JLJOBUSER
10A
D JLJOB#
6A
基底ポインターの指定
D JLINTJOBID
16A
D JLSTATUS
10A
D JLJOBTYPE
1A
D JLJOBSUBTYPE
1A
D JLRESERVED1
2A
D JLJOBINFOSTS
1A
D JLRESERVED2
3A
D JL#FIELDS
10I 0
DSPACEPTR
DLISTPTR
S
S
*
*
19
Copyright 2007 CYFLEX L.L.C.
Operation Knowhow
ポインターを使用する方法(5/7)
ユーザースペースからのポインター取得
*
*-------------------------------------* ユーザースペースからのポインター取得
*-------------------------------------C
CALL
'QUSPTRUS'
C
PARM
C
PARM
C
PARM
20
SPACENAME
SPACEPTR
APIERRORDS
Copyright 2007 CYFLEX L.L.C.
Operation Knowhow
ポインターを使用する方法(6/7)
最初のリスト項目へのポインターセット
*
*-------------------------------------* 最初のリスト項目へのポインターセット
*-------------------------------------*
C*@@@@@@@@@@@@@@@@ CALL
'QUSRTVUS'
C*@@@@@@@@@@@@@@@@ PARM
SPACENAME
C*@@@@@@@@@@@@@@@@ PARM
1
STRPOS
C*@@@@@@@@@@@@@@@@ PARM
192
LENDTA
C*@@@@@@@@@@@@@@@@ PARM
APIHEADER0100
*
C*@@@@@@@@@@@@@@@@ EVAL
STRPOS = HDROFFLIST + 1
C*@@@@@@@@@@@@@@@@ EVAL
LENDTA = HDRLISTSIZE
*
C
EVAL
LISTPTR = SPACEPTR + HDROFFLIST
21
Copyright 2007 CYFLEX L.L.C.
Operation Knowhow
ポインターを使用する方法(7/7)
リスト項目からのデータ取り出し
C
C*@@@@@@@@@@@@@@@@@
C*@@@@@@@@@@@@@@@@@
C*@@@@@@@@@@@@@@@@@
C*@@@@@@@@@@@@@@@@@
C*@@@@@@@@@@@@@@@@@
*
C
*
C
C
C
*
C
C
*
C
C*@@@@@@@@@@@@@@@@
C
C
C
DO
CALL
PARM
PARM
PARM
PARM
HDRLIST#
'QUSRTVUS'
NUMLIST
IF
JLENDSEVERITY
EVAL
JOBNAME = %TRIM(JLJOBNAME) + '/' +
%TRIM(JLJOBUSER) + '/' +
JLJOB#
EXCEPT
ENDIF
JOBDTL
IF
EVAL
EVAL
ENDIF
ENDDO
NUMLIST < HDRLIST#
STRPOS = STRPOS + HDRLISTSIZE
LISTPTR = LISTPTR + HDRLISTSIZE
SPACENAME
STRPOS
LENDTA
FMTJOBL0200
> 0
APIを使用しないで直接検索しますので、ポインターを使用しない方法に比べて
検索スピードはアップします。
22
Copyright 2007 CYFLEX L.L.C.
Operation Knowhow
補足:なぜAPIなのか?
運用システムを構築する上でコマンド、CLを使用しますがかゆいとこ
ろに手がとどかないところがあります。そのような場合、
API(Application Program Interface)を使用することにより飛躍的に
運用の効率化アップを実現することができます。
23
Copyright 2007 CYFLEX L.L.C.
Operation Knowhow
補足:APIを使うメリット
①CLコマンドに比べてパーフォーマンスがよい。
CLコマンドはコマンド処理プログラム(CPP)を介してOSにアクセスするのに対して、APIは直
接アクセスする。
ユーザースペース(後述)を使用することにより高速なI/Oを行うことができる。
②CLコマンドより豊富な機能を使用することができる。
CLコマンドでは実現できない機能あるいはきめ細かな情報を使用することができる。
③OSがリリースアップしても継続して使用できる。
追加されたAPIのパラメータやデータ構造は後ろに追加されるため、新しいOSバージョンでも
継続して使用できる。
24
Copyright 2007 CYFLEX L.L.C.
Operation Knowhow
補足:APIの仕組み
アプリケーション
コマンド
ユーザースペース
CPP
(Command Processing Program)
API
システム・プログラム
25
Copyright 2007 CYFLEX L.L.C.
Operation Knowhow
補足:ユーザースペースとは?
ユーザー・スペースは永続オブジェクトでオブジェクト・タイプは *USRSPC であり、最大サイズは
16MB です。ユーザー・スペースを他のシステムに保管し、復元することができます。しかし、ユー
ザー・スペースにポインターが含まれている場合には、ユーザー・スペースを同じシステムで復元し
ようとした場合であっても、ポインターは復元することができません。
ユーザー・スペース API を使用して以下のことを行うことができます。
①API を使用して、データのリストを生成する。
②ポインターを記憶する。
③大量のデータを記憶する。16 メガバイト以上の大きさのユーザー・スペースを作成することは
できません。2000 バイトより大きいデータ域を作成することはできません。
④CL コマンドを使用して、情報をユーザー・スペース・オブジェクトに保管したり、その情報とともに
オブジェクトをユーザー・スペース・オブジェクトに保管および記憶する。
⑤ジョブからジョブへ、あるいはシステムからシステムへデータを渡す。
26
Copyright 2007 CYFLEX L.L.C.