Comments
Description
Transcript
パラメータ使用上の注意事項
Operation Knowhow パラメータ使用上の注意事項 初 版 2016/01/04 第2版 2016/05/02 1 Copyright 2016 CYFLEX Operation Knowhow CALLコマンドのパラメータ CLP内のCALLコマンドでパラメータを使用する場合は 以下の注意事項があります。 ●文字の定数の桁数 32バイト以下の定数と、33バイト以上の定数では異なり、注意事項があります。 ●数字の桁数 15.5で定義された場合とそうでない場合で異なり、注意事項があります。 2 Copyright 2016 CYFLEX Operation Knowhow CLPのCALLコマンドでのパラメータ パラメーターの受け渡しは次のように行われます。(IBM i V7.2のマニュアルより) •32バイト以下の文字ストリング定数は、常に 32 バイトとして (右側にブランクが埋め込まれて) 渡されます。文字定数が 32 バイトより長い場合には、その長さの定数全体が渡されます。 パラメーターが 32 バイトより大きいものとして定義されている場合には、CALL コマンドは正確にその バイト数分の定数を渡さなければなりません。 32 文字より長い定数については、受取側のプログラムで 予定されている長さに合わせるための埋め込みは行われません。 受取側のプログラムは、渡したバイト数より少ないバイト数しか受け取ることができません。 例えば、プログラムで受け取ることのできるのは 4 文字であると指定されていて、ABCDEF が渡され た場合(26 文字のブランクが埋め込まれている)、 プログラムが受け入れて使用するのは ABCD だけです。 受取側のプログラムが、渡したバイト数より多いバイト数を受け取った場合、 その結果は予期できません。 文字として渡す数字は単一引用符で囲まなければなりません。 •10 進定数は、長さ LEN(15 5) のパック 10 進形式で渡されます。 15 は値全体の長さで、5 は小数部分の桁数です。したがって、12345 というパラメーターが渡されると すれば、 受取側のプログラムでは 10 進数フィールドが LEN(15 5) として宣言されていなければならず、 そのパラメーターは 12345.00000 として受け取られます。 呼び出されるプログラムに数値定数を渡す必要があり、かつそのプログラムが「15 5」以外の長さと精度 でその値の受取が想定されている場合には、その定数を16 進数形式でコーディングすることができます。 3 Copyright 2016 CYFLEX Operation Knowhow 文字ストリング定数の指定 コマンドラインから実行 CALL PGM1 (‘ABC’ ‘DEF’) 受取側 (PGM1) 結果 32桁を超えている のでゴミが残る。 NG ※受取側がRPGの場合も同じ結果 4 Copyright 2016 CYFLEX Operation Knowhow 文字ストリング定数の指定 CLPの中から実行 呼出側 定数を直接指定 受取側 (PGM1) 結果 NG 32桁を超えている のでゴミが残る。 ※受取側がRPGの場合も同じ結果 5 Copyright 2016 CYFLEX Operation Knowhow 文字ストリング定数の指定 CALL ‘ABC’ 32バイトまで ABC△ーーーーーーーー△ 残りの桁はスペースで埋められる。 CALL ‘ABC’ 32バイト以上 ABC???????????????????????????????????????????? 残りの桁は保障されない。 6 Copyright 2016 CYFLEX Operation Knowhow 文字ストリング定数の指定 CLPの中から実行 呼出側 定数を変数で指定 受取側 (PGM1) 結果 OK ※受取側がRPGの場合も同じ結果 7 Copyright 2016 CYFLEX Operation Knowhow 文字ストリング定数の指定 CLPの中からSBMJOBを実行 呼出側 定数を直接指定 受取側 (PGM1) 結果 NG ※受取側がRPGの場合も同じ結果 8 Copyright 2016 CYFLEX Operation Knowhow 文字ストリング定数の指定 CLの中からSBMJOBを実行 呼出側 定数を変数で指定 受取側 (PGM1) 結果 NG ※受取側がRPGの場合も同じ結果 9 Copyright 2016 CYFLEX Operation Knowhow 文字ストリング定数指定のまとめ ①SBMJOBの場合は定数を直接指定するしないに関わらず 32桁を超えてはいけない。 ②CLP内でCALLする場合は変数を使用すれば32桁を超え てもよい。 定数を直接指定する場合は32桁を超えてはいけない。 10 Copyright 2016 CYFLEX Operation Knowhow 32桁より長い場合の対応方法 呼出側 実際の桁数より1桁多く取り最後 にダミーの文字を挿入する。 受取側 受け取った文字から最後の文字を 除去する。 11 Copyright 2016 CYFLEX Operation Knowhow 10進定数のパラメータ指定 コマンドラインから実行 CALL PGM1 123 RPG,CLP共にパック形式の長さ15,5で定義しておけば 10進数形式で指定できます。 小数点使用の場合も12.3と指定できます。 受取側 (PGM1) 結果 OK CLP 受取側 (PGM1) 結果 RPG OK 12 Copyright 2016 CYFLEX Operation Knowhow 10進定数のパラメータ指定 コマンドラインから実行 CALL PGM1 123 受取側(PGM1) 受取側(PGM1) CLP RPG 結果 NG 結果 13 NG Copyright 2016 CYFLEX Operation Knowhow 10進定数のパラメータ指定 コマンドラインから実行 CALL PGM1 X’00123F’ バイト数が一致してい ること。 X’123F’はNG SBMJOBの場合も同じ 受取側 (PGM1) CLP 結果 OK 受取側 (PGM1) 必要バイト数の求め方 (入力桁数+1)÷2 小数点以下は 切り上げ 5桁→3バイト X’12345F’ 6桁→4バイト X’0012345F’ RPG 注:パック形式になっていること。 結果 OK 14 Copyright 2016 CYFLEX Operation Knowhow 10進定数のパラメータ指定 CLPの中から実行 CALL PGM1 123 結果 NG CALL PGM1 X’00123F’ 結果 OK DCL VAR(&P1) TYPE(*DEC) LEN(5 0) VALUE(123) CALL PGM1 &P1 結果 OK DCL VAR(&P1) TYPE(*DEC) LEN(5 0) VALUE(123) SBMJOB CMD(CALL PGM(PGM1) PARM(&P1)) 結果 NG SBMJOB CMD(CALL PGM(PGM1) PARM(X’00123F’)) 結果 OK 15 Copyright 2016 CYFLEX Operation Knowhow 10進数定数指定のまとめ コマンドラインからCALLまたはSBMJOBを実行する場合 ①10進数定数を指定する場合は、受取側ではパック形式の長さ15,5で 定義しておくこと。(CLP,RPG) ②15,5で定義しない場合は、呼出側では16進数形式で指定する。 受取側はパック形式で定義しておくこと。(ゾーン10進数はNG) 16進数指定の場合はバイト数が一致していること。 16 Copyright 2016 CYFLEX Operation Knowhow 10進数定数指定のまとめ CLPの中からCALLまたはSBMJOBを実行する場合 ①10進数定数を指定する場合は、受取側ではパック形式の長さ15,5で 定義しておくこと。(CLP,RPG) ②15,5で定義しない場合は、呼出側では16進数形式で指定する。 受取側はパック形式で定義しておくこと。(ゾーン10進数はNG) 16進数指定の場合はバイト数が一致していること。(添付資料参照) ③変数で10進数データを渡す場合は受取側では15,5の長さである必要は ありません。但し、パック形式になっている必要があります。 ④SBMJOBでは10進数定数指定または変数指定はできない。 16進数で指定するか、受取側で15,5形式で定義する。 17 Copyright 2016 CYFLEX Operation Knowhow パック10進数について 1.ゾーン10進数 1桁はゾーン部(4bit)と数値部(4bit)で構成される。 EBCDICでは、ゾーン部は「F」で埋められる。 最後の桁は、ゾーン部はマイナス数値の場合は、 「D」になる。 ゾーン10進数 ゾーン部 数値部 10進数 例. -12345の場合 パック10進数 F 1 F 2 F 3 F 4 D 5 2.パック10進数 ゾーン部をなくして4bit単位で1桁を表す。 最後の下位4bitは、符号を表す。 例. -1234の場合 例. -12345の場合 1 2 3 4 0 5 D 1 2 3 4 D 4桁の数字の場合は、最初の4bitは、 0になる。偶数桁の場合は、必ずこの ようになる。 5桁の数字は3バイトで済む。 18 Copyright 2016 CYFLEX Operation Knowhow パック10進数について プログラム内部では、パック10進数に変換されて処理されるので、最初 からパック10進数にしておくとパフォーマンスはよい。 CLでの定義 DCL VAR(&DATE) TYPE(*DEC) LEN(6 0) ※CLでは、無条件に数字項目はパック10進数になる。 DDSでの定義 A A AQCSTM AQCETM 6P 0 6P 0 COLHDG(‘ 当日開始 ’) COLHDG(‘ 当日終了 ’) ILE RPGでの定義 D COMMANDLEN S 15P 5 INZ(80) 19 Copyright 2016 CYFLEX Operation Knowhow パック10進数について Commands: DSPPFM F10 WRKDBM(ToolBox) ゾーン 10進数 パック 10進数 20 Copyright 2016 CYFLEX Operation Knowhow Schedulerの指定 AUTO/400 Ver3.2 文字定数 32桁まで 数字定数 15桁まで(小数点以下は不可) Hybrid SCHEDULER Ver1.1 文字定数 999桁まで 数字定数 15桁まで(小数点以下は不可) 21 Copyright 2016 CYFLEX Operation Knowhow パラメータの制限 タイプ 制限値 個数 CLP サイズ 個数 RPG サイズ 個数 ILE RPG NEW サイズ MAX40個 V5.3からはMAX255個 CHAR 9,999バイト DEC 15桁(小数点以下MAX9桁) MAX255個 CHAR 256バイト DEC 30桁(小数点以下MAX9桁) MAX255個 CALLB,PLISTの場合は399 CHAR 65,535バイト DEC 30桁(小数点以下MAX30桁) 22 Copyright 2016 CYFLEX