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.
© Copyright 2024 Paperzz