【DO!BOOK・ページリンク】
2008_migaro_techreport_001   102 / 136

BOOKをみる

10秒後にBOOKのページに移動します


100 くのソフトウェアが共通して利用する機 能は、OS やミドルウェアなどの形でま とめて提供されている。  個々の開発者は規約に従ってその機能 を「呼び出す」だけで、自分でプログラ ミングすることなくその機能を利用した ソフトウェアを作成することができる」  OS のコマンドでサポートされない機 能をサポートする、ということが主要な 目的のようだ。IBM i のOS で用意され ているAPI は、主にオブジェクトの属 性取り出しやオブジェクトの一覧処理だ が、その他にも数字の編集などがある。 (API を使いこなしているわけではない ので、もっと他にもたくさんあるかもし れない)。  難点は、わかりやすいマニュアルがな い点だが、使用方法はパラメータで要求 情報をAPI プログラムに渡し、結果が パラメータで返ってくるといったものな ので、各々のパラメータの意味がわかれ ば使用できる。 コーディング方法  まず、API を使用して取得できる情 報のDDS を作成する。データベース名 はUSRSPLP とし、用意するフィール ドは[図2]のとおりである。【図2】  あとは、このデータベースにデータを 落とすプログラムを作成する。ソース コードは[図3]のようになる。これを 参考にしながら説明を読んでほしい。【図 3】 @ユーザー・スペースの作成  ユーザー・スペースとは、API で使 用する新しいオブジェクト(オブジェク トタイプは* USRSPC)で、一覧形式 で予め何レコードの結果が出るかわから ないものを検索する場合に使用される。  といっても、難しい作業をする必要は なく、ユーザー・スペース作成用の API(QUSCRTUS)が用意されている。 なので、そのAPI を規定のパラメータ に値をセットし、呼び出せば作成してく れる。  今回は、ライブラリー:QTEMP に、 ユーザー・スペース:SPLINF を、ユー ザー・スペース初期サイズ:1024 で作 成するようにしている。  ユーザー・スペースは「総称見出し」 と「リストセクション」から構成される。 (自分なりにわかりやすく表現すると、 ヘッダーと明細の関係みたいな感じでは ないかと思う)。 Aユーザー・スペースに出力待ち行列の データを展開  次に、@で用意したユーザー・スペー スに、出力待ち行列の情報を展開する。  使用するAPI はQUSLSPL である。 QUSLSPL に、以下のパラメータをセッ トし実行する。 ・ユーザー・スペース(20 桁) ・フォーマット形式(8 桁) ・出力待ち行列のユーザー(10 桁) ・OUTQ(20 桁) ・フォームタイプ(10 桁) ・ユーザーデータ(10 桁)  今回はすべてを対象にしているが、こ のパラメータのセットの仕方により、取 得したい出力待ち行列を制御することが 可能である。  例えば、待ち行列QPRINT 分だけを 取得したい場合は、パラメータの OUTQ に“QRINT △ △ △ △ △ QGPL △△△△△△”(三角はスペース)と指 定する。  データの展開が失敗した場合は(ソー ス上では標識95 がON になる)、処理 が中断される。 B総称見出しからデータを取り出す  次に、Aで取得した情報から総称見出 しの情報を取得する。(取得したい項目 は、リスト・データ・セクションのオフ セットと、リスト・データ・セクション のサイズと、リストセクションに書き出 された数)。  使用するAPI はQUSRTVUS である。 QUSRTVUS に、以下のパラメータを セットし実行する。 ・ユーザー・スペース(20 桁) ・開始位置(4 桁) ・取得数(4 桁) ・結果を入れるフィールド  総称見出しのレイアウトは[図4]の とおりである。レイアウトを見るとオフ セット10 進数が0 から始まっている。 ただし、QUSRTVUS API の開始位置 を決定するためには、オフセット値に1 を加算しなければならないので注意しよ う。  例えば、レイアウト中の情報の状況を 使用したい場合、開始位置は104(オフ セット10 進数:103 + 1)となる。【図4】  今回の場合、開始位置を125(リスト・ データ・セクションのオフセット)から 16 バイト分(各項目のサイズまで)の 情報を取得する。取得した情報は、I 仕 様書のDS で分解する。  総称見出しからのデータ取り出しが失 敗した場合は(ソース上では標識95 が ON になる)、処理が中断する。また、 取得したリスト項目の数(フィールド名: NOENTH)が0 の場合は、データがな いということなので、この場合も処理を 中断する。 Cリストセクション読み込みの初期化  Dで使用するAPI のパラメータ値の 初期設定を行う。  Bで取得したリスト・データ・セクショ ンのオフセットに、1 を足し、パラメー タ値にセットする。また、同じくBで取 得したリスト・データ・セクションのサ イズも、パラメータ値にセットする。 Dリストセクションの各項目の取り出し  Aで取得した出力待ち行列の情報を、 リストセクションから取得する。  使用するAPI はBで使用したのと同 じQUSRTVUS である。パラメータ SF0100 に結果がセットされる。取得で きる情報は、以下のものである。 ・ユーザー名(USRNML) ・OUTQ とライブラリー(OUTQL) ・フォームタイプ名(FRMTYL) ・ユーザーデータ(USRDTL) ・内部JOB 確認者(JOBID) ・ 内部スプール・ファイル確認者 (PLFID)  次に、QUSRTVUS で取得した内部 JOB 確認者と内部スプール・ファイル 確認者をもとに、追加の属性を取得する。 (サブルーチン@ATR)  使用するAPI はQUSRSPLA である。 QUSRSPLA に、以下のパラメータを