# 詳細設計書 ## 基本情報 | # | 項目 | 内容 | |---|------|------| | 1 | システム名 | 勤怠休暇管理システム | | 2 | プログラムID | KIN02UPD | | 3 | プログラム名 | 休暇申請DB更新処理 | | 4 | PGMタイプ | メイン | | 5 | PGMパターン | DB更新 | | 6 | 機能概要 | WORK-LEAVEファイルの各レコードをDB2テーブルLEAVE_RECORDSに反映する。 | | 7 | | ステータスによって新規登録(INSERT)、変更(DELETE+INSERT)、取消(DELETE)を行う。 | ※PGMタイプ:メイン、サブ ※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新 ### 前提条件 | NO | 対象ファイル | 条件 | |----|-------------|------| | 1 | KIN01W01 | KIN01INPの出力順に従う。ソート不要。 | ### 使用ファイル一覧 | NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 | |----|------------------|--------|------|-----|--------|------|---------|-----------|------|------| | 1 | WORK-LEAVE | R01 | KIN01W01 | I | KIN01REC | FB | | 80 | PS | | | 2 | ERROR-LOG | W01 | KIN02W01 | O | KIN05REC | VB | | 200 | PS | DBエラー時出力 | | 3 | LEAVE_RECORDS | DB | — | I/U/D | — | — | — | — | DB | SQLite | ### キー項目一覧 | NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) | |----|-----------|---------------------|-------------------------------------------| | 1 | WORK-LEAVE | なし | なし | ### 使用モジュール一覧 | NO | 機能 | プログラムID | 使用COPY名 | |----|------|-------------|-----------| | 1 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC | | 2 | ABEND処理SUB | SUB03END | ZANENDAC | --- ## 処理詳細 ``` 1.初期処理(1000ITTSOR) 1-1.開始メッセージ出力 【メッセージ編集】 メッセージ番号:1(開始メッセージ) 1-2.コンパイル日時出力 【メッセージ編集】 メッセージ番号:33(コンパイル日時) PARM1:コンパイル日時 PARM2:'COMPILED' 1-3.ワークエリアの初期化 1-4.DB接続 EXEC SQL CONNECT TO 'data/kin.db' 1-5.R01ファイルOPEN(入力)+ W01ファイルOPEN(出力) 1-6.R01を初回読込(1100R01INNSOR) 2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す) 2-1.レコード処理(2100PROCSOR) 2-1-1.R01各項目をホスト変数(WS-*)にMOVEする。 2-1-2.ロジック分岐判定(EVALUATE) 2-1-2-1.STATUS='1' AND APPL-ID=0(新規)の場合 INSERT処理(2110INSERTSOR) 【SQL】 INSERT INTO LEAVE_RECORDS (EMP_ID, LEAVE_TYPE, START_DATE, START_TIME, END_DATE, END_TIME, STATUS) VALUES (:WS-EMP-ID, :WS-LEAVE-TYPE, :WS-START-DATE, :WS-START-TIME, :WS-END-DATE, :WS-END-TIME, :WS-STATUS) SQLCODE≠0の場合、DBエラー処理(9100DBERRSOR)を実行する。 CUN-DBXINSを+1する。 2-1-2-2.STATUS='1' AND APPL-ID>0(変更)の場合 UPDATE処理(2120UPDATESOR) 【SQL】 DELETE FROM LEAVE_RECORDS WHERE APPLICATION_ID = :WS-APPL-ID INSERT INTO LEAVE_RECORDS (EMP_ID, LEAVE_TYPE, START_DATE, START_TIME, END_DATE, END_TIME, STATUS) VALUES (:WS-EMP-ID, :WS-LEAVE-TYPE, :WS-START-DATE, :WS-START-TIME, :WS-END-DATE, :WS-END-TIME, :WS-STATUS) 各SQLでSQLCODE≠0の場合、DBエラー処理(9100DBERRSOR)を実行する。 CUN-DBXUPDを+1する。 2-1-2-3.STATUS='9'(取消)の場合 DELETE処理(2130DELETESOR) 【SQL】 DELETE FROM LEAVE_RECORDS WHERE APPLICATION_ID = :WS-APPL-ID SQLCODE≠0の場合、DBエラー処理(9100DBERRSOR)を実行する。 CUN-DBXDELを+1する。 2-1-2-4.その他 何も処理しない(CONTINUE) 2-2.次レコード読込(1100R01INNSOR)(2件目以降) 3.終了処理(3000STPSOR) 3-1.COMMIT EXEC SQL COMMIT WORK 3-2.入出力ファイルのクローズ 3-3.件数メッセージ出力 【メッセージ編集】 メッセージ番号:6(入力件数) PARM1:'KIN01W01' PARM2:入力件数 PARM1:'INS'、'UPD'、'DEL' PARM2:各処理件数 3-4.終了メッセージ出力 【メッセージ編集】 メッセージ番号:2(終了メッセージ) 4.DBエラー処理(9100DBERRSOR) 4-1.ROLLBACK EXEC SQL ROLLBACK WORK 4-2.ERROR-LOG出力(W01OUTFIL) 【MOVE → INITIALIZE & WRITE】 MOVE SQLCODE TO WRK-SQLCODE-DISP W01ERR-CATEGORY = '01'(固定) W01ERR-DETAIL = 'KIN02UPD SQLCODE=' + WRK-SQLCODE-DISP + ' APPL-ID=' + WS-APPL-ID CUN-W01OUTを+1する。 4-3.エラーメッセージ出力 【メッセージ編集】 メッセージ番号:5(サブエラー) PARM1:'KIN02UPD SQL ERROR' PARM2:SQLCODE PARM3:WS-APPL-ID 4-4.ABEND処理SUB呼出(9999ABDSOR) ABENDコード:999 ``` --- ## 出力レコード定義 ### 出力ファイル1(W01/ERROR-LOG) | No | 項目名 | 設定元 | 備考 | |----|--------|--------|------| | 1 | ERR-CATEGORY | 01で固定 | DBエラー | | 2 | ERR-DETAIL | STRINGで編集 | KIN02UPD SQLCODE= + WRK-SQLCODE-DISP + APPL-ID= + WS-APPL-ID | ### DB更新結果 LEAVE_RECORDSテーブルに直接反映される。