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

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

よく使うマニュアルです

Wiki

updated on 2004.06.23

6.19.JOBLOGの取り出しAPI

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


事の起こり

最近のAPIは、複雑になってきました。以前に、NewsGroupに、エラーによるMSGWと、RCVMSGによるMSGWの識別方法を知りたい、とのポストがありました。実は、私は勘違いして、CHKJOBLOGのAPIサンプルを提供してしまいました。そしたら、そのドイツの人が、いたく感激して、お礼メールまだくれてしまったのです。それに、責任を感じて、作ったのが、以下のプログラムです。久しぶりに悩みました。ユーザースペースにデータを展開する部分が、どうしてもうまくいかず、デバッグしても、合っているし、と悩みました。

QMHLJOBLの全体の構造

このAPIは指定したジョブのジョブログを取りだして、ユーザースペースに展開するものです。以下はマニュアルの解説(?変なの)です。

AS/400 アドバンスト・シリーズ システム API 解説書 バージョン 3 資料番号 SC88-5101-00 7.44.6 ジョブ・ログ・メッセージのリスト (QMHLJOBL) API

パラメーター

必須パラメーター・グループ :
1 修飾ユーザー・スペース名 入力 Char(20)
2 形式名 入力 Char(8)
3 メッセージ選択情報 入力 Char(*)
4 メッセージ選択情報のサイズ 入力 Binary(4)
5 メッセージ選択情報の形式 入力 Char(8)
6 エラー・コード 入出力 Char(*)

これは、APIプログラム、QMHLJOBLを呼び出す為の、パラメータです。問題は、3番目の「メッセージ選択情報」です。ここに、取りだしたいジョブと、そのジョブログの種類を指定します。4番目の「メッセージ選択情報のサイズ」は、この3番目のパラメータの長さを指定します。

では、この3番目の情報は、なにを指定するのでしょうか。これは、5番目の「メッセージ選択情報の形式」で決まります。V4R1では、2種類あります。JSLT0100とJSLT0200です。ここで指定した形式に合わせた情報を、パラメータ3「メッセージ選択情報」で渡すわけです。

また、ユーザースペースの中の形式は、2番目のパラメータで指定します。今のところ、1種類です。LJOB0100です。これもまた、ややこしいのですが、後述します。

JSLT0100の指定(メッセージ選択情報の形式)

オフセット タイプ フィールド 説明 RPGサンプルのフィールド名
10進数 16進数
0 0 BINARY(4) 要求される最大メッセージ 返されるメッセージの最大数。開始メッセージ・キーから指定されたリスト方向でジョブ・ログ内にすべてのメッセージをリストするには、特殊値 -1 を使用してください。 QMHBJB
4 4 CHAR(10) リスト方向 *NEXT 「開始メッセージ・キー」フィールドによって指定されたメッセージよりも新しいメッセージに戻ります。

*PRV 「開始メッセージ・キー」フィールドによって指定されたメッセージよりも古いメッセージに戻ります。

QMHBJC
14 E CHAR(10) 修飾ジョブ名 メッセージをリストされるジョブの特定のジョブ名、または以下のいずれか特殊値。

* このプログラムが実行されるジョブ。この特殊値が使用される場合、修飾ユーザー名および修飾ジョブ番号パラメーターをブランクにしなければなりません。

*INT 内部ジョブ識別コードはジョブを位置付けます。この特殊値が使用される場合、修飾ユーザー名および修飾ジョブ番号パラメーターをブランクにしなければなりません。

QMHBJD
24 18 CHAR(10) 修飾ユーザー名 メッセージをリストするジョブの特定のユーザー・プロファイル名、または修飾ジョブ名パラメーターが * または *INT の特殊値の場合はブランク QMHBJF
34 22 CHAR(6) 修飾ジョブ番号 メッセージがリストされるジョブの特定のジョブ番号、または修飾ジョブ名パラメーターが * または *INT の特殊値の場合はブランク。 QMHBJG
40 28 CHAR(16) 内部ジョブ識別コード ジョブの内部名。ジョブのリスト (QUSLJOB) API はこの識別コードを作成します。「修飾ジョブ名」パラメーターに *INT を指定しない場合は、このパラメーターにはブランクが入っていなければなりません。

アプリケーションに QUSLJOB から利用可能なこの情報がすでにある場合、 QMHLJOBL APIは、ジョブ名よりもはやくこの情報を使用してジョブを位置付けることができます。しかし、QMHLJOBL によって使用されるこのパラメーターを入手するために QUSLJOB だけを呼び出すことは、呼出し QMHLJOBL 内のジョブ名を使用することよりもパフォーマンスが悪くなります。

QMHBJH
56 38 CHAR(4) 開始メッセージ・キー ジョブからリストするメッセージの探索を開始するためのメッセージ・キー。

メッセージ・キーには以下の特殊値を使用することができます。

'00000000'X 返される最初のメッセージは待ち行列内の最も古いメッセージです。
'FFFFFFFF'X 返される最初のメッセージは待ち行列内の最新のメッセージです。

「リスト方向」フィールドが *NEXT である場合、リストされる最初のメッセージは指定されたキー以
上のメッセージ・キーを持つ最初のメッセージです。この方法でメッセージが見つからないと、エラーが返されます。「リスト方向」フィールドが *PRV である場合、リストされる最初のメッセージは、指定されたキー以下のメッセージを持つ最初のメッセージです。この方法でメッセージが見つからないと、エラーが返されます。

応答メッセージのキーが指定される場合、メッセージ検索は、応答が関連している照会メッセージ、送信元のコピー・メッセージ、または通知メッセージで始まります。これは、応答メッセージそのものでは 始まりません。

QMHBJJ
60 3C BINARY(4) メッセージの最大長 この API がフィールド識別コード 0301 および 0302 に対して返すテキストの最大文字数。

フィールド識別コード 0301 および 0302 に対して返される文字数を制限するための値を指定してください。(トピック7.44.6.5.1の『有効なフィールド識別コード』 を参照。)この値は、4 以上の値にすることができます。最大許容値は 32765 です。最大長が使用されるように指定するには、特殊値 -1 を使用してください。フィールド識別コード 0301 または 0302 が指定されない場合は、この値は検査されません。

QMHBJK
64 40 BINARY(4) メッセージ・ヘルプの最大長 この API がフィールド識別コード 0401、0402、 0403、 および 0404 に対して返すテキストの最大文字数。 QMHBJL
68 44 BINARY(4) 返されるフィールドの識別コードまでのオフセット ユーザー・スペースの始めから LJOB0100形式の最初の繰返し識別フィールドの始めまでのオフセット。 QMHBJM
72 48 BINARY(4) 返すフィールド数 LJOB0100 形式の中に返されるフィールド数(配列を返すためのフィールドの識別コードの中の項目数)。 QMHBJN
76 4C BINARY(4) 呼出しメッセージ待ち行列名までのオフセット 「メッセージ選択情報」パラメーターの始めから「呼出しメッセージ待ち行列名」フィールドの始めまでのオフセット(バイト数)。 QMHBJP
80 50 BINARY(4) 呼出しメッセージ待ち行列名の長さ 「呼出しメッセージ待ち行列名」フィールドの長さ(バイト数)。指定できる最大長は 256 です。最小長は 1 です。 QMHBJQ
これらのフィールドまでのオフセットは、前のオフセット変数内に指定されます。 BINARY(4)の ARRAY(*) 返されるフィールド識別コード LJOB0100 形式で返されるフィールド識別コードのリスト。 DSIDS
CHAR(*) 呼出しメッセージ待ち行列名 メッセージがリストされる呼出しメッセージ待ち行列の名前。以下の値のうちの 1 つを使用しなければなりません。

* ジョブの各呼出しスタック項目からメッセージがリストされます。「呼出しメッセージ待ち行列名の長さ」フィールドの値が 1 を超える場合、左揃えにし、ブランクの右側に埋め込まれなければなりません。

*EXT ジョブの外部メッセージ待ち行列 (*EXT) に送信されるメッセージだけがリストされることになっています。「呼出しメッセージ待ち行列名の長さ」フィールドの値が 4 を超える場合、フィールド内で左揃えにし、ブランクの右側に埋め込まれなければなりません。値はフィールド内で左揃えにし、右側にブランクを埋め込まなければなりません。

DSMSGQ

※表内のRPGサンプルのフィールド名で、Qで始まるものは、QSYSINC/QRPGSRCから取りだしました。説明まで入れたのは、このAPIの、マニュアルの説明が、あまりに見づらいからです。このような構成なら読みやすいのですけど。

今度は、ユーザースペースに展開された、データの構成です。

オフセット タイプ フィールド 説明 RPGのフィールド
10進数 16進数
0 0 BINARY(4) 次の項目までのオフセット ユーザー・スペースの始めから、次のメッセージ項目の始めまでのバイト単位のオフセット。 QMHBGB
4 4 BINARY(4) 返されるフィールドまでのオフセット ユーザー・スペースの始めから LJOB0100形式の最初の繰返し識別フィールドの始めまでのオフセット。 QMHBGC
8 8 BINARY(4) 返されるフィールド数 アプリケーションに返される識別コード・フィールドの数。 QMHBGD
12 C BINARY(4) メッセージ重大度 リストされたメッセージの重大度。有効な値は 0 から 999 までです。 QMHBGF
16 10 CHAR(7) メッセージ識別コード リストされたメッセージの識別コード。即時メッセージがリストされる場合、このフィールドはブランクに設定されます。 QMHBGG
23 17 CHAR(2) メッセージ・タイプ リストされたメッセージのメッセージ・タイプ。有効な値およびその意味は以下のとおりです。

値 メッセージ・タイプ
01 完了
02 診断
04 情報
05 照会
06 送信元のコピー
08 要求
10 プロンプト付きの要求
14 通知(API の呼出し時にすでに処理された例外)
15 エスケープ(API の呼出し時にすでに処理された例外)
16 通知(API の呼出し時に処理されなかった例外)
17 エスケープ(API の呼出し時に処理されなかった例外)
21 応答(妥当性検査は行われない)
22 応答(妥当性検査は行われる)
23 応答(メッセージ省略時の値の使用される)
24 応答(システム省略時の値の使用される)
25 応答(システム応答リストからの)

QMHBGH
25 19 CHAR(4) メッセージ・キー リストされたメッセージのメッセージ参照キー。 QMHBGJ
29 1D CHAR(10) メッセージ・ファイル名 リストされたメッセージが含まれているメッセージ・ファイルの名前。 QMHBGK
39 27 CHAR(10) 送信時に指定されたメッセージ・ファイル・ライブラリー メッセージの送信時に指定された、メッセージ・ファイルを含むライブラリー名。メッセージの送信時にライブラリーに *CURLIB または *LIBL が指定された場合、その値がライブラリーとしてここに返されます。メッセージの送信時に使用された実ライブラリーについては、「使用されたメッセージ・ファイル・ライブラリー」フィールドを参照してください QMHBGL
49 31 CHAR(7) 送信日付 当該メッセージが、CYYMMDD(世紀、年、月、日)形式で送信された日付。 QMHBGM
56 38 CHAR(6) 送信時刻 HHMMSS(時間、分、および秒)形式で、リスト中のメッセージが送信され
た時刻。
QMHBGN
62 3E CHAR(*) 予約済み QMHBGP
これらのフィールドは、指定された各識別コード・フ ィールドごとに 反復されます。   BINARY(4) 返される次のフィールド情報までのオフセット ユーザー・スペースの始めから、LJOB0100 形式と識別されたフィールドの次の繰返しの最初までのオフセット。 QMHBHB
BINARY(4) 返されるフィールド情報の長さ このフィールドに返される情報の合計の長さ(バイト数)。 QMHBHC
BINARY(4) 識別コード・フィールド LJOB0100 形式で実際に返されたフィールド ID。有効なフィールド識別コードのリストについては、トピック7.44.6.5.1の『有効なフィールド識別コード』を参照してください。 QMHBHD
CHAR(1) データのタイプ 返されるデータのタイプ。

C データは文字形式で返されています。
B データは 2 進数様式で返されます。
M データは混合様式で返されます。この値は、後に 10 文字要素の配列が続く 2進数 (4) の値を含むフィールド ID 0606 および 0706 に返されます。

QMHBHF
CHAR(1) データの状況 このメッセージのためにリストされたデータの状況。有効な値およびその意味は、以下のとおりです。

ブランク返されるデータは完全です。

A API の呼出し側は、データを表示することを許可されませんでした。APIの呼出し側がリスト中の記憶メッセージを含むメッセージ・ファイルまたはメッセージ・ファイル・ライブラリーに許可されない場合に、このことが起こります。

D データが損傷を受けました。記憶メッセージの送信時に指定されたメッセージ・ファイルまたはライブラリーが API の呼出し時に損傷を受ける場合に、このことが起こります。

U データが利用不能でした。記憶メッセージの送信時に指定されたメッセージ・ファイルまたはライブラリーが API の呼出し時に別の処理によって排他的に使用される場合に、このことが起こります。

N データが見つかりませんでした。記憶メッセージの送信時に指定されたメッセージ・ファイルまたはライブラリーが API の呼出し時に見つからないか、または解決できない場合に、このことが起こります。

このフィールドは、記憶メッセージのためのメッセージ・ファイルから検索されるフィールド識別コードに適用できます。「データの状況」フィールドがブランクでない場合に特定フィールド識別コードに対して起こる処置についての説明は、以下のとおりです。

0101 「データの状況」フィールドがブランクでなければ、「警報オプション」フィールド識別コードにブランクが含まれています。

0301、0302データ・フィールドの状況がブランクでない場合、これらのメッセージ・フィールド識別コードには、メッセージ・ファイルへのアクセス試行時に発生した問題を示すメッセージ・テキストが入ります。両方のフィールドで、置換データが置き換えられます。

0401、0402、0403、0404データ・フィールドの状況がブランクでない場合、これらのメッセージ・ヘルプ・フィールド識別コードには、メッセージ・ファイルへのアクセス試行時に発生した問題を示すメッセージ・テキストが入ります。すべてのフィールドで、置換データが置き換えられます。形式制御文字のあるメッセージ・ヘルプ、および置換データと形式制御文字フィールド識別コードのあるメッセージ・ヘルプにも、形式制御文字が組み込まれたメッセージがあります。

0501 「データの状況」フィールドの状況がブランクでなければ、「省略時応答」フィールド識別コードにシステム省略時応答が含まれています。

0801 「データの状況」フィールドがブランクでなければ、フィールド識別コードを使用したメッセージ・ファイル・ライブラリーにブランクが含まれています。

また、この情報を検索しようとしているときに問題が起こった場合、このフィールドは、いろいろな送信および受信情報フィールドに適用することができます。これには、フィールド識別コード 0602、0603、0604、0605、0606、0702、0703、 0704、0705、および 0706 が含まれています。これらのフィールドの 1 つがメッセージから検索できない場合、「データの状況」フィールドは U に設定され、検索されなかったフィールドはブランクに設定されます。

「データの状況」フィールドは、通常、他のフィールド識別コードのためにブランクにされています。

QMHBHG
CHAR(14) 予約済み QMHBHH
BINARY(4) データの長さ 「データ」フィールドに返されるデータの長さ(バイト数)。 QMHBHJ
CHAR(*) データ 指定された識別コード・フィールドに返されるデータ。 QMHBHK
CHAR(*) 予約済み QMHBHL

有効なフィールド識別コード

識別コード タイプ 説明
0101 CHAR(9) 警報オプション SNA 警報が当該メッセージに合わせて作成されるか、送信されるかどうか、およびその時期。値は以下のうちの 1 つです。

*DEFER 警報は、ローカル問題分析後に送信されます。
*IMMED 警報は即時送信され、同時に当該メッセージが警報属性を *YESに設定できるメッセージ待ち行列に送信されます。
*NO 警報は送信されません。
*UNATTEND システムが不在時モード(すなわち警報状況ネットワーク属性の値ALRSTS が *UNATTEND である時)で実行している時には、警報は即時送信されます。

警報の詳細については、警報サポート を参照してください。

メッセージの送信時に警報オプションが指定されなかった場合、このフィールドはブランクに設定されます。

0201 CHAR(*) 置換データまたは即時メッセージ・テキスト 事前定義されたメッセージ内の置換変数用の値、または即時メッセージのテキスト。「メッセージ識別コード」フィールドがブランクでなければ、このフィールドには、メッセージ・データが含まれています。

「メッセージ識別コード」フィールドがブランクの場合、このフィールドには即時メッセージ・テキストが入ります。

このフィールド中のポインター・データは、以下の両方の場合、無効とマークされます。

    システム状態で実行されていない呼出しスタック項目によって API が呼び出される場合

    システム機密保護レベルが 50 以上の場合

0301 CHAR(*) メッセージ 置換データの置き換えのない、事前定義されたメッセージのテキスト。即時メッセージがリストされている場合は、このフィールドに即時メッセージ・テキストが入ります。
0302 CHAR(*) 置換データのあるメッセージ リストされたメッセージのメッセージ・ヘルプ。置換データを含みます。即時メッセージがリストされている場合は、このフィールドに即時メッセージ・テキストが入ります。
0401 CHAR(*) メッセージ・ヘルプ 形式化文字がなく、かつデータの置換のない、リストされたメッセージのメッセージ・ヘルプ。即時メッセージがリストされている場合は、このフィールドに即時メッセージ・テキストが入ります。
0402 CHAR(*) 置換データのあるメッセージ・ヘルプ リストされたメッセージのメッセージ・ヘルプ。置換データを含みます。即時メッセージがリストされている場合は、このフィールドに即時メッセージ・テキストが入ります
0403 CHAR(*) 形式制御文字を持つメッセージ・ヘルプ 形式制御文字を含む、リストされたメッセージのメッセージ・ヘルプ。

3 つの形式制御文字をメッセージ内に返すことができます。これらは、CL(制御言語)解説書内の「メッセージ記述追加」(ADDMSGD) コマンド内に定義され、次のような意味を持ちます。

&N テキストを強制的に改行します(2 桁目)。テキストが 1 行を超える場合、テキストの終りまたは別の形式制御文字が見つかるまで、4 桁目にインデントされます。

&P テキストを強制的に改行し、6 桁目にインデントします。テキストが 1 行を超える場合、テキストの終りまたは別の形式制御文字が見つかるまで、次の行は 4 桁目で始まります。

&B テキストを強制的に改行し、4 桁目から始めます。テキストが 1 行を超える場合、テキストの終わりまたは別の形式制御文字が見つかるまで、6 桁目にインデントされます。

即時メッセージがリストされている場合、このフィールドには即時メッセージ・テキストが入ります。

0404 CHAR(*) 置換データおよび形式化文字のあるメッセージ・ヘルプ リストされたメッセージのメッセージ・ヘルプ。置換データおよび形式化文字を含みます。即時メッセージがリストされている場合は、このフィールドに即時メッセージ・テキストが入ります。
0501 CHAR(*) 省略時応答 記憶されたメッセージがリストされており、省略時応答が存在する場合、省略時応答のテキスト。これが照会メッセージでないか、または省略時応答が存在しない場合、このフィールドは使用されず、「データの長さ」フィールドの値は 0 です。
0601 CHAR(26) 修飾送信側ジョブ名 このフィールドは、QMHLJOBL API のために指定できますが、いかなるデータも返さず、データ・フィールドの長さは 0 です。
0602 CHAR(1) 送信タイプ 送信元のタイプ(プログラムまたはプロシージャーであるかどうかを指定します)。有効な値およびその意味は、以下のとおりです。

0 送信元は、OPM か、または 12 文字以下の長さの名前のシステム・ライセンス内部コード (SLIC) プログラムです。

1 送信元は、ILE プログラム内のプロシージャーであり、そのプロシージャーの名前は 256 文字以下の長さです。

2 送信元は、ILE プログラム内のプロシージャーであり、そのプロシージャーの名前の長さは 257〜4096 文字です。

3 送信元は SLIC プログラムであり、名前の長さは 13〜256 文字です。

0603 CHAR(*) 送信プログラム名 メッセージを送信しているプロシージャーを含む送信プログラム名または ILE プログラム名
0604 CHAR(10) 送信モジュール名 メッセージを送信するプロシージャーを含むモジュールの名前。メッセージが ILE プログラム内のプロシージャーによって送信されなかった場合、このフィールドは設定されず、データ・フィールドの長さは 0 になります。
0605 CHAR(*) 送信プロシージャー名 メッセージを送信するプロシージャーの名前。メッセージが ILE プログラム内のプロシージャーによって送信されなかった場合、このフィールドは設定されず、データ・フィールドの長さは 0 になります。ネストされたプロシージャー名では、その各々のプロシージャー名がコロンによって区切られています。一番外側のプロシージャー名は、その名前を含むプロシージャーに続いて最初に識別されます。一番内側のプロシージャーは、文字列の中で最後に識別されます。
0606 BINARY(4)に続けてCHAR(10)の ARRAY(*) 使用可能な送信ステートメント番号または命令番号の数、その後に、その送信ステートメント番号または命令番号の配列。 送信プログラムまたはプロシージャーのために使用可能なステートメント番号または命令番号の数。

OPM プログラムおよび非最適化プロシージャーの場合、このカウントは 1 です。

最適化プロシージャーの場合、このカウントは 1 以上にすることができます。この場合、各ステートメント番号は、メッセージが送信された潜在点を表しています。マッピング・テーブル情報がプログラムから除去された場合には、このフィールドはカウント0 を返し、ステートメント番号は利用可能になります。送信ステートメント番号または命令番号の配列は、返されたデータ内のこのフィールドに続きます。

0702 CHAR(1) 受信タイプ レシーバーのタイプ(プログラムかまたはプロシージャーであるかどうか)。有効な値およびその意味は、以下のとおりです。

0 レシーバーは、オリジナル・プログラム・モデル (OPM) プログラムです。

1 レシーバーは、ILE プログラム内のプロシージャーであり、そのプロシージャーの名前は 256 文字以内の長さです。

2 レシーバーは、ILE プログラム内のプロシージャーであり、そのプロシージャーの名前は 257 文字以上の長さがあります。

0703 CHAR(10) 受信側プログラム名 メッセージが送信されたプロシージャーを含むプログラム名または ILE プログラム名。
0704 CHAR(10) 受信モジュール名 メッセージが送信されたプロシージャーを含むモジュールの名前。メッセージが ILE プログラム内のプロシージャーに送信される場合、このフィールドは設定されず、データ・フィールドの長さは 0 になります。
0705 CHAR(*) 受信プロシージャー名 メッセージを受信しているプロシージャーの名前。メッセージが ILE プログラム内のプロシージャーに送信されない場合、このフィールドは設定されず、データ・フィールドの長さは 0 になります。ネストされたプロシージャー名では、その各々のプロシージャー名がコロンによって区切られています。一番外側のプロシージャー名は、その名前を含むプロシージャーに続いて最初に識別されます。一番内側のプロシージャーは、文字列の中で最後に識別されます。
0706 BINARY(4)に続けてCHAR(10)のARRAY(*) 使用可能な受信ステートメント番号または命令番号の数、その後に、その受信ステートメント番号または命令番号の配列。 送信プログラムまたはプロシージャーのために使用可能なステートメント番号または命令番号の数。

OPM プログラムおよび非最適化プロシージャーの場合、このカウントは 1 です。

最適化プロシージャーの場合、このカウントは 1 以上にすることができます。この場合、各ステートメント番号は、メッセージが送信された潜在点を表しています。マッピング・テーブル情報がプログラムから除去された場合には、このフィールドはカウント0 を返し、ステートメント番号は利用可能になります。送信ステートメント番号または命令番号の配列は、返されたデータ内のこのフィールドに続きます。

0801 CHAR(10) 使用されたメッセージ・ファイル・ライブラリー メッセージ情報を検索するために使用するメッセージ・ファイルが含まれているライブラリーの実名。即時メッセージがリストされると、このフィールドはブランクに設定されます。
0901 CHAR(30) 問題識別 このフィールドは、QMHLJOBL API のために指定できますが、いかなるデータも返さず、データ・フィールドの長さは 0 です
1001 CHAR(1) 応答状況 メッセージの応答状況(応答を受諾するかどうか、その場合、 応答が送信されたかどうかを指定します)。有効な値およびその意味は、以下のとおりです。

A メッセージは応答を受諾し、応答は送信されました。
W メッセージは応答を受諾し、応答は送信されませんでした。(メッセージは応答を待っています。)
N メッセージは応答を受諾しません。

1101 CHAR(1) 要求状況 要求メッセージの処理状況に関する情報。有効な値およびその意味は、以下のとおりです。

O この要求メッセージは受信および処理されました。
C この要求メッセージは現在処理中です。
N この要求メッセージはまだ処理されていません。

リストされているメッセージが要求メッセージでない場合、このフィールドはブランク文字に設定されます。

1201 BINARY(4) 要求レベル 要求メッセージを受信した要求処理プログラムのレベル。リストされて
いるメッセージが要求メッセージでない場合、このフィールドは 0 に設定されます。
1301 BINARY(4) テキスト用のコード化文字セット識別コード(CCSID) メッセージ・テキストを返したいコード化文字セット識別コード。変換エラーが起こるか、またはメッセージ・テキスト変換を要求した CCSID が 65535 である場合は、メッセージ・テキストが記憶されている CCSID が返されます。そうでない場合は、メッセージ・テキスト変換を行いたい CCSID が返されます。テキストを返す前に変換したくなくても、メッセージ・テキストが記憶されている CCSID を知りたい場合は、コード化文字セット識別コードに 65535 を指定して、テキストおよびデータがパラメーター内に返されるようにします。メッセージ・テキストが記憶されている CCSIDは、テキスト出力フィールド用のコード化文字セット識別コード内に返されます。

これが適用されるのは、次のフィールドのみです。

    メッセージ
    置換データのあるメッセージ
    メッセージ・ヘルプ
    置換データのあるメッセージ・ヘルプ
    置換データおよび形式化文字のあるメッセージ・ヘルプ
    形式制御文字を持つメッセージ・ヘルプ

注: この CCSID 値は、テキストに置換された置換データには適用されません。このデータの詳細については、コード化文字セット識別コードを参照してください。

メッセージ・ハンドラーおよびその CCSID の用法の詳細については、各国で利用される適用業務の開発 を参照してください。

1302 BINARY(4) テキスト用の CCSID 変換状況標識 以下の値が返されることがあります。

0 テキストの CCSID が、テキストを変換したい CCSID に一致していたため、変換は行われませんでした。

1 テキストが 65535 であったか、またはテキストを変換したい CCSID が 65535 であったため、変換が行われませんでした。

2 テキストを返すよう要求しなかったため、変換が行われませんでした。

3 最適の変換テーブルを使用して指定した CCSID に、テキストが変換されました。

4 最適の変換テーブルを使用して変換エラーが発生したため、省略時変換が試みられました。これはエラーとならずに完了します。

-1 最適変換および省略時変換の両方でエラーが発生しました。データは変換されませんでした。

1303 BINARY(4) データ用のコード化文字セット識別コード (CCSID) 置換データが返されるコード化文字セット識別コード。これは、変換可能な文字データ・タイプ (*CCHAR) に対応する置換データの部分にのみ適用されます。他のすべての置換データは、返される前には変更されないため、65535 の CCSID を持つとみなされます。変換エラーが起こるか、またはデータを変換したい CCSID が 65535 である場合、データの CCSID が返されます。*CCHAR 置換データが存在しない場合は、65535 が返されます。そうでない場合は、データ変換を行いたい CCSID が返されます。

メッセージ・ハンドラーおよびその CCSID の用法の詳細については、各国で利用される適用業務の開発 を参照してください。*CCHAR フィールド・タイプの詳細については、ADDMSGD コマンドを参照してください。

1304 BINARY(4) データ用の CCSID 変換状況標識 以下の値が返されることがあります。

0 データの CCSID は、データ変換を行いたい CCSID に一致するため、変換は必要ありませんでした。

1 データが 65535 であったか、またはデータ変換を行いたい CCSID が 65535 であったため、変換は行われませんでした。

2 メッセージ・データを返すよう要求しなかったか、またはデータに *CCHARタイプ・データが入っていなかったため、変換が行われませんでした。

3 最適の変換テーブルを用いて、指定した CCSID にデータが変換されました。

4 最適の変換テーブルを使用して変換エラーが発生したため、省略時変換が試みられました。これはエラーとならずに完了します。

-1 最適変換および省略時変換の両方でエラーが発生しました。テキストは変換されませんでした。

さて、ここまで来るだけで、もうへとへとです。あとは、RPGを見て下さい。ポイントは、なんと言っても、ユーザースペースへの展開の部分です。最初は、どうしても分からなかったのですが、デバッグしているうちに、データとしてセットする「オフセット」は、0からの数字をセット(DSの桁ではない)事にやっと気づき、うまくいきました。

     H        1   Y/                                    1
     E****************************************************
     E*          A R R A Y        T A B L E              *
     E****************************************************
     E                    ID      1  29  4               :
     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 I            'JOBLOGMSG'               1  10 USNAME
     I I            'QTEMP'                  11  20 USLIB
     I* QUSRTVUS
     IRCVVAR      DS
     I                                    B   1   40OFFSTH
     I                                    B   5   80LSTSZH
     I                                    B   9  120OFFSET
     I                                    B  13  160LSTSSZ
     I                                    B  17  200NOENTR
     I                                    B  21  240LSTSIZ
     IIDCHR      IDS
     I                                    B   1   40IDBIN
     I* JSLT0100
     IQMHBJ      IDS
     I                                    B   1   40QMHBJB
     I                                        5  14 QMHBJC
     I                                       15  24 QMHBJD
     I                                       25  34 QMHBJF
     I                                       35  40 QMHBJG
     I                                       41  56 QMHBJH
     I                                       57  60 QMHBJJ
     I                                    B  61  640QMHBJK
     I                                    B  65  680QMHBJL
     I                                    B  69  720QMHBJM
     I                                    B  73  760QMHBJN
     I                                    B  77  800QMHBJP
     I                                    B  81  840QMHBJQ
     I                                       85 200 DSIDS
     I                                      201 204 DSMSGQ
     I           IDS
     I                                    B   1   40MSGSIZ
     I           IDS
     I                                    B   1   40USSIZE
     I                                    B   5   80LENDTA
     I                                    B   9  120STRPO1
     I                                    B  13  160STRPO2
     IPBERR       DS
     I I            116                   B   1   40BYTPRV
     I I            0                     B   5   80BYTAVA
     I                                        9  15 ERRID
     I                                       16  16 ERR###
     I                                       17 116 ERRDTA
     I* LJOB0100 (1)
     IQMHBG      IDS
     I                                    B   1   40QMHBGB
     I                                    B   5   80QMHBGC
     I                                    B   9  120QMHBGD
     I                                    B  13  160QMHBGF
     I                                       17  23 QMHBGG
     I                                       24  25 QMHBGH
     I                                       26  29 QMHBGJ
     I                                       30  39 QMHBGK
     I                                       40  49 QMHBGL
     I                                       50  56 QMHBGM
     I                                       57  62 QMHBGN
     I                                       63  63 QMHBGP
     I* LJOB0100 (2) ARRAY
     IQMHBH      IDS
     I                                    B   1   40QMHBHB
     I                                    B   5   80QMHBHC
     I                                    B   9  120QMHBHD
     I                                       13  13 QMHBHF
     I                                       14  14 QMHBHG
     I                                       15  28 QMHBHH
     I                                    B  29  320QMHBHJ
     I* 200 BYTE.
     I                                       33 233 QMHBHK
     C******************************************************
     C*     DEFINITION  MODULE  ( PLIST   FIELD   KLIST )  *
     C******************************************************
     C*                                                    :
     C*  DEFINE ENTRY                                      :
     C*                                                    :
     C           *ENTRY    PLIST                           :
     C                     PARM           PITYP   1        :1=JOB,USR,JB#,2=*INT
     C                     PARM           PIJOB  10        :
     C                     PARM           PIUSR  10        :
     C                     PARM           PIJOB#  6        :
     C                     PARM           PIINT  16        :
     C                     PARM           STSRPY           :
     C******************************************************
     C*             M A I N -  R O U T I N E               :
     C******************************************************
     C                     EXSR @PARM                      :
     C*                                                    :
     C                     EXSR @SPRED                     :
     C* ERROR OCCURS                                       :
B001 C           BYTAVA    IFNE 0                          :
 001 C                     DUMP                            :
+001 C                     ELSE                            :
 001 C                     EXSR @RTV                       :
B002 C           NOENTR    IFNE 0                          :
 002 C                     EXSR @DTLH                      :
E002 C                     END                             :
E001 C                     END                             :
     C*                                                    :
     C                     MOVE *ON       *INLR            :
     C                     RETRN                           :
     C******************************************************
     C*             S U B   -  R O U T I N E                
     C******************************************************
     C*----------------------------------------------------*
     C           *INZSR    BEGSR                           :
     C*----------------------------------------------------*
     C* MAKE USER SPACE                                    :
     C* THIS PGM MAKE OR REPLACE USESPACE EVRY TIME.       :
     C* IF YOU DON'T LIKE IT, REMAKE HERE.                 :
     C*                                                    :
     C                     CALL 'QUSCRTUS'                 :
     C                     PARM           USRSPC           :
     C                     PARM *BLANK    EXTATR 10        :
     C                     PARM 3000      USSIZE           :
     C                     PARM X'00'     USINIT  1        :
     C                     PARM '*ALL'    USAUTH 10        :
     C                     PARM *BLANK    USTEXT 50        :
     C                     PARM '*YES'    USREPL 10        :
     C                     PARM           PBERR            :
     C*                                                    :
B001 C           BYTAVA    IFNE 0                          :
 001 C                     DUMP                            :
 001 C                     MOVE *ON       *INLR            :
 001 C                     RETRN                           :
E001 C                     END                             :
     C*                                                    :
     C                     ENDSR                           :
     C*----------------------------------------------------*
     C           @PARM     BEGSR                           :
     C*----------------------------------------------------*
     C                     MOVE *BLANK    STSRPY           :
     C*                                                    :
B001 C           PITYP     IFEQ '1'                        :
 001 C                     MOVE *BLANK    PIINT            :
+001 C                     ELSE                            :
 001 C                     MOVEL'*INT'    PIJOB     P      :
 001 C                     MOVE *BLANK    PIUSR            :
 001 C                     MOVE *BLANK    PIJOB#           :
E001 C                     END                             :
     C* HOW MAY TIMES GET THE MSG FORM JOBLOG ? (*NOMAX=-1):
     C* YOU'VE GOT TO CHECK THE VALUE BEOREHAND.           :
     C* IN THIS PGM, IT IS 1 'CAUSE OF GETTING ONLY THE LAST MSG IN LOG.
     C                     Z-ADD1         QMHBJB           :
     C* DIRECTION OF RTV MSG                               :
     C                     MOVEL'*PRV  '  QMHBJC           :OR *NEXT
     C                     MOVE *HIVAL    QMHBJJ           :OR *LOVAL
     C* SET JOB INFORMATION                                :
     C                     MOVELPIJOB     QMHBJD           :
     C                     MOVELPIUSR     QMHBJF           :
     C                     MOVELPIJOB#    QMHBJG           :
     C                     MOVELPIINT     QMHBJH           :
     C* MAX LENGHT OF MSG, MAX LENGTH OF MSG HELP (*NOMAX=-1)
     C                     Z-ADD200       QMHBJK           :
     C                     Z-ADD200       QMHBJL           :
     C* OFFSET OF IDS  ( 85 - 1 = 84 ) FIXED               :START FROM 0.
     C                     Z-ADD84        QMHBJM           :
     C* SET IDS FROM ARRAY 'ID'                            :
B001 C           1         DO   29        II      30       :
B002 C           ID,II     IFEQ *BLANK                     :
 002 C                     Z-ADD0         IDBIN            :
 002 C                     CAT  IDCHR:0   DSIDS            :A MUST !
+002 C                     ELSE                            :
 002 C                     Z-ADD0         IDBIN            :
 002 C                     MOVE ID,II     IDBIN            :
 002 C                     CAT  IDCHR:0   DSIDS            :
 002 C                     ADD  1         QMHBJN           :CNT OF IDS
E002 C                     END                             :
E001 C                     END                             :
     C* OFFSET OF MSGQ ; NEXT TO IDS (LEN=4,QTY=29)        :
     C           4         MULT 29        W1LEN   50       :LEN OF IDS
     C           QMHBJM    ADD  W1LEN     QMHBJP           :
     C* MSGQ (* OR *EXT) AND IT'S LENGTH                   :
     C                     MOVEL'*'       DSMSGQ           :OR *EXT
     C           ' '       CHEKRDSMSGQ:1  QMHBJQ           :GET LEN OF MSGQ
     C* GET LENGTH OF WHOLE OF QMHBJ                       :
     C           ' '       CHEKRQMHBJ     MSGSIZ           :GET LEN OF QMHBJ
     C*                                                    :
     C                     ENDSR                           :
     C*----------------------------------------------------*
     C           @SPRED    BEGSR                           :
     C*----------------------------------------------------*
     C                     CALL 'QMHLJOBL'                 :
     C                     PARM           USRSPC           :
     C                     PARM 'LJOB0100'FMTNAM  8        :
     C                     PARM           QMHBJ            :
     C                     PARM           MSGSIZ           :
     C                     PARM 'JSLT0100'MSGFMT  8        :
     C                     PARM           PBERR            :
     C*                                                    :
     C                     ENDSR                           :
     C*----------------------------------------------------*
     C           @RTV      BEGSR                           :
     C*----------------------------------------------------*
     C* GET GENERAL HEADER INFORAMTION IN USERSPACE.       :
     C* ATTENTION: THE VALUE OF LSTSIZ (IN RCVVAR) IS 0 .. WHY?
     C                     CALL 'QUSRTVUS'                 :
     C                     PARM           USRSPC           :
     C                     PARM 117       STRPO1           :
     C                     PARM 24        LENDTA           :
     C                     PARM           RCVVAR           :
     C           OFFSET    ADD  1         STRPO1           :
     C*                                                    :
     C                     ENDSR                           :
     C*----------------------------------------------------*
     C           @DTLH     BEGSR                           :
     C*----------------------------------------------------*
     C* THE LENGTH OF QMHBG IS 63.                         :
B001 C           1         DO   NOENTR                     :
 001 C                     CALL 'QUSRTVUS'                 :
 001 C                     PARM           USRSPC           :
 001 C                     PARM           STRPO1           :
 001 C                     PARM 63        LENDTA           :LEN OF QMHBG
 001 C                     PARM           QMHBG            :
B002 C           QMHBGD    IFNE 0                          :
 002 C                     EXSR @DTLL                      :
E002 C                     END                             :
 001 C           QMHBGB    ADD  1         STRPO1           :NEXT STR-POINT
E001 C                     END                             :
     C*                                                    :
     C                     ENDSR                           :
     C*----------------------------------------------------*
     C           @DTLL     BEGSR                           :
     C*----------------------------------------------------*
     C* THE LENGTH OF QMHBH IS 233.                        :
     C           QMHBGC    ADD  1         STRPO2           :OFFSET+1
     C*                                                    :
B001 C           1         DO   QMHBGD                     :
 001 C                     CALL 'QUSRTVUS'                 :
 001 C                     PARM           USRSPC           :
 001 C                     PARM           STRPO2           :
 001 C                     PARM 233       LENDTA           :
 001 C                     PARM           QMHBH            :
 001 C                     EXSR @INFO                      :
 001 C           QMHBHB    ADD  1         STRPO2           :NEXT STR-POINT
E001 C                     END                             :
     C*                                                    :
     C                     ENDSR                           :
     C*----------------------------------------------------*
     C           @INFO     BEGSR                           :
     C*----------------------------------------------------*
     C* YOU CAN USE API-DATA HERE LIKE BELOW.              :
     C* MSGW BY ERROR=W,  MSGW BY RCVMSG=N.
     C* PLEASE CHECK IT BY DEBUGGER.
B001 C           QMHBHD    IFEQ 1001                       :
 001 C           QMHBHJ    SUBSTQMHBHK:1  STSRPY  1        :A,W,N
E001 C                     END                             :
     C* MAYBE NEEDLESS (IT IS JUST AN EXAMPLE)             :
B001 C           QMHBHD    IFEQ 1101                       :
 001 C           QMHBHJ    SUBSTQMHBHK:1  STSREQ  1        :O,C,N,' '
E001 C                     END                             :
     C* MAYBE NEEDLESS (IT IS JUST AN EXAMPLE)             :
B001 C           QMHBHD    IFEQ 302                        :
*001 C           QMHBHJ    ANDLE200                        :
 001 C           QMHBHJ    SUBSTQMHBHK:1  MSGTXT200        :TEXT
E001 C                     END                             :
     C*                                                    :
     C                     ENDSR                           :
** IDS ; YOU CAN ADD IDS BELOW (IN THE ARRAY) UP TO 29.
1001   ; 1
1101   ; 2 YOU CAN OMIT HERE. IT IS AN EXAMPLE.
0302   ; 3 YOU CAN OMIT HERE. IT IS AN EXAMPLE.
       ; 4
       ; 5
       ; 6
       ; 7
       ; 8
       ; 9
       ;10
       ;11
       ;12
       ;13
       ;14
       ;15
       ;16
       ;17
       ;18
       ;19
       ;20
       ;21
       ;22
       ;23
       ;24
       ;25
       ;26
       ;27
       ;28
       ;29
            

1998/10/14


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

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

 

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