設計の注意事項¶
PL/Ⅰからのリビルド設計をする際の注意事項となります。
PL/Ⅰ PIC型の変数¶
DCL PICWK4 PIC'(4)9';
PICWK4 = '';
この時、PICWK4には、数値としては0 文字列としては"0000"が入っているイメージとなる。
DCL PICWK3 PIC'(3)9';
DCL PICWK4 PIC'(4)9';
DCL CHRWK4 CHAR(4);
PICWK3 = 123;
PICWK4 = PICWK3;
この時、PICWK4には、数値としては123 文字列としては"0123"が入っているイメージとなる。
CHRWK4 = PICWK3;
この時、CHRWK4には、文字列として"123 "が入っている。
リビルド時にデータ型を文字型(NCHAR)にしている箇所が多数あり、注意が必要です。
DCL WK_PIC PIC 9999
WK_PIC = -9
この時、WK_PICには、マイナスの符号が取れて、数値としては9 文字列としては"0009"が入っているイメージとなる。
※マイナスを保持する宣言は以下の様に記述される
PIC ----9 INIT(-9) → -9
PIC -9999 INIT(-9) → -0009
リビルド時は、絶対値をセットする。
端数処理¶
DCL DECWK1 DECIMAL FIXED(5,2);
DCL DECWK2 DECIMAL FIXED(5,1);
DECWK1= 123.45
DECWK2 = DECWK1;
この時、DECWK2には、123.4が入っている。
(小数第2位以下切り捨て)
リビルド時の変数は小数桁数という概念が無いため、注意が必要です。
Do While の違いについて¶

Do Until 処理のリビルド方法について¶

GOTO処理について¶
GO TO MAIN_LAB020 ;
PL/Ⅰで使用しているGOTO処理は、リビルド後は使用しない。
IF文で分岐処理にする。または、メソッド化を考えて設計を行う。
文字型の空白文字の扱いについて¶
変数などに空白文字をセットしている場合に、文字数も考慮して設計を行う必要があります。
リビルド時の設計では、文字型の変数に桁数という概念はありません。
そのため、" "(空白1文字)と" "(空白2文字)は別の値として扱われます。
比較を行う際は、空白を削除して行うなどの注意が必要です。
書き方例①
データ.送り状NO の前後の空白を削除 = "" の場合
書き方例②
データ.送り状NOをトリム = "" の場合
なお、RDBの文字型に値をセットした際は、テーブルカラムの定義に従った文字数まで" "(半角スペース)で文字埋めされます。
RDBに習い、リビルド後の構造体には値をセットした際に、文字型フィールドは定義の文字数まで" "(半角スペース)で文字埋めされます。
注)ゼロ埋めは設計者が考慮して設計書に記述する事!!
変数・COMM_AREA_DETAILの違い¶
| 宣言 | 使用箇所 | 説明 |
|---|---|---|
| メソッドの変数 | オンライン・クラス | getDataModeX(データ取得処理)、validateModeX(チェック処理)、dataProcessModeX(データ処理)、okProcessModeX(OK処理)等のメソッド内のみで使用する変数 |
| プロパティの変数 | オンライン・クラス | メソッドを跨いで使用する変数 |
| COMM_AREA_DETAIL | オンライン | modeや機能IDを跨いで使用する値 |

集配票マスター(集配手当用)[VKSHUTA]¶
集配票マスターのユニークキーは、[集配票NO][TMJSSKNO],[稼働店所コード][TMJSKYTN],[集荷、配達区分][TMJSSYHI]となっている。
Asisは分散型のために、同じ[集配票NO]が入力されてもエラーとしない仕組みとなっている。
ToBeは集配票マスターはダイレクト更新となるため、同一の集配票NOが新規登録出来ないように制御する方針とする。
なお、移行データもあるため、照会等の取得処理は同一集配票NOが存在する前提で設計を行い複数件の場合は取得エラーとする。
オンライン画面 エラーメッセージ、エラーコード¶

エラーメッセージ・エラーコードは、基本的には現行踏襲ではあるが、同じエラーコードで複数のメッセージが設定されている場合や別のメッセージを設定したい場合には、エラーコードを増やしても良い。
ただし、エラーコードの文字数は最大5文字となる。
VSAMからRDBに変更された際の注意する処理¶

SSNO_HD7 = "0018269" , IRAISSNO = "001826914401" で処理を開始した場合
入金台帳履歴マスタHD[VKNKNMS]の取得イメージは以下の様になる

初回のREADNEXTにて1行目のデータが読み込まれる。
VSAMでの動きはSTARTBRで行っている処理を、RDBにて行う場合は条件部に注意が必要となる。
RDBのKEY部の定義

単純にSTARTBRの条件で取得するようにSQLを記述すると以下の様になり
SELECT
*
FROM
VKNKNMS
WHERE
NYDANICD = '0018269'
AND NYDASSNO = '001826914401'
AND NYDABAGO = 000;
このSQLを実行しても、最大1件しか取得しない。(この場合は、0件)
この様にSTARTBRの条件そのもので取得するような設計を行ってはいけない。
上記処理の場合、対応方法は
SELECT
*
FROM
VKNKNMS
WHERE
NYDANICD = '0018269'
AND NYDASSNO = '001826914401'
ORDER BY NYDABAGO;
にて、データを取得し、AsIsと同じ様に繰り返し処理を行う。
若しくは、処理としては入金回数の最大値を取得するために記述してあるので以下のSQLでデータを取得して処理を行う。
SELECT
MAX(NYDABAGO) AS NYDABAGO
FROM
VKNKNMS
WHERE
NYDANICD = '0018269'
AND NYDASSNO = '001826914401';
この様に、やり方は複数あり、AsIsの処理によって対応を分ける必要がある。
会話モードになっている箇所について¶
基本的に現行のオンラインプログラムは、疑似会話モードで作成されている為、
処理の途中でRETURNが行われ、プログラムの処理は終了する。
しかし、ごく一部の処理内で、会話モード(ユーザーの入力待ち)で処理が行われている箇所がある。
会話モードになっているかどうかの判断方法¶
EXEC CICS SEND MAP の後に EXEC CICS RECEIVE がある場合、会話モード
※疑似会話モードの場合は EXEC CICS RETURN
例:XJ0120_データ交換汎用受付<<送り状No・個数・重量入力>> SRC_XJ16900P
会話モード該当箇所

会話モードの場合の AsIs の動き¶
EXEC CICS SEND MAP の後に EXEC CICS RECEIVE で ユーザーが実行キーを押すまで
処理を待ち続ける。
なお、ファンクションキーを押した場合は、以下のソースが大抵の画面にある為、
ファンクションキー押下時の処理(PFKEY_SELECT_RTN)が通常通り実行される。(RECEIVE 以降の処理は行われない)
EXEC CICS HANDLE AID
CLEAR (CLEAR_MAP_RTN)
ANYKEY (PFKEY_SELECT_RTN) ;
会話モードの ToBe の設計方針¶
以下理由:
1.新では該当の動きを再現する方法がいくつか取りえる為。
・例1:modeを増やし、増やしたmodeでRECEIVE以降の処理を行う。
・例2:modeは増やさずに該当箇所をフラグで1回目は処理し、2回目実行時は通さない
それぞれ、プロパティだった値をCOMM_AREA_DETAILにする必要、フラグのクリアが必要になる等、注意点あり。
2.また、会話モードにする理由(確認の為、エラーメッセージ表示の為、etc...)によっても
どうすべきか変わる為。