これは、APIプログラム、QMHLJOBLを呼び出す為の、パラメータです。問題は、3番目の「メッセージ選択情報」です。ここに、取りだしたいジョブと、そのジョブログの種類を指定します。4番目の「メッセージ選択情報のサイズ」は、この3番目のパラメータの長さを指定します。
では、この3番目の情報は、なにを指定するのでしょうか。これは、5番目の「メッセージ選択情報の形式」で決まります。V4R1では、2種類あります。JSLT0100とJSLT0200です。ここで指定した形式に合わせた情報を、パラメータ3「メッセージ選択情報」で渡すわけです。
また、ユーザースペースの中の形式は、2番目のパラメータで指定します。今のところ、1種類です。LJOB0100です。これもまた、ややこしいのですが、後述します。
オフセット |
タイプ |
フィールド |
説明 |
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