Files
cobol-tna-system/詳細設計書/詳細設計書_JIN05UPD.md

190 lines
7.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# JIN05UPD 詳細設計書
## プログラム概要
| 項目 | 内容 |
|------|------|
| プログラムID | JIN05UPD(人事→JINji, 05, 人事異動DB更新→UPD |
| プログラムタイプ | 09(DB更新) |
| 機能 | HR-TRANS(人事異動トランザクション)を読込み、DB2 EMPLOYEEテーブルをINSERT/UPDATEする |
| CALL方式 | メインプログラム(JCLからCALL) |
| DBアクセス | DB2 EMPLOYEECONNECT / INSERT / UPDATE |
| 使用サブプログラム | SUB01DAT(日付), SUB02MSG(メッセージ), SUB03END(アベンド) |
### 前提条件
| NO | 対象ファイル | 条件 |
|----|-------------|------|
| 1 | HR-TRANS | JCL の SORT で社員番号昇順に並替済であること |
### 使用ファイル一覧
| NO | 使用ファイル名 | 識別子 | DD名 | I/O | COPY群 | 形式 | レコード長 | 媒体 | 備考 |
|----|--------------|--------|------|-----|--------|------|-----------|------|------|
| 1 | HR-TRANS | R01 | JIN05R01 | I | JIN05REC | FB | 200 | PS | 人事異動トランザクション |
| 2 | VALID-ERROR | W01 | JIN05W01 | O | (内約80B | FB | 80 | PS | エラー退避 |
> 補足:VALID-ERROR レコードは COPY を使用せず WORKING-STORAGE/W01OUTREC に内約定義(PROGRAMID 8B + EMP-ID 8B + CODE 4B + DETAIL 60B = 80B)。ID 設計上 COPY VALID-ERROR-REC を使用していない。将来は COPY 化推奨。
### DB 使用一覧
| NO | テーブル | I/O | 内容 |
|----|---------|:---:|------|
| 1 | EMPLOYEE | I/U | 人事異動の新規登録(INSERT/ 更新(UPDATE |
### 使用モジュール一覧
| NO | 機能 | プログラムID | 使用COPY名 |
|----|------|-------------|-----------|
| 1 | 運用日付取得SUB | SUB01DAT | JINDATAC |
| 2 | メッセージ編集出力SUB | SUB02MSG | JINMSGAC |
| 3 | ABEND処理SUB | SUB03END | JINENDAC |
---
## 処理詳細
### 段落一覧(SOR規約名)
| 段落名 | 機能 |
|:-------|:-----|
| 0000MAJCOLSOR | メインコントロール(初期→読込→DB更新ループ→終了) |
| 1000ITTSOR | 初期処理(開始表示・初期化・運用日付・CONNECT・OPEN・初回読込) |
| 2000MAINSOR | 主処理(ホスト変数転記→種別判定→対応処理) |
| 2100READSOR | R01読込・EOF判定 |
| 3100INSERTSOR | INSERT処理(新規社員追加) |
| 3200UPDATESOR | UPDATE処理(既存社員更新) |
| 3300ERRSOR | 不明トランザクション→VALID-ERROR出力 |
| 3400DBERRSOR | DBエラー(SQLCODE≠0)→VALID-ERROR出力 |
| 4000STPSOR | 終了処理(統計表示・CLOSE・終了メッセージ) |
| 9000ERRSOR | エラー処理(ABEND |
### 処理フロー
```
1. 0000MAJCOLSOR
1-1. PERFORM 1000ITTSOR(初期処理)
1-2. PERFORM 2000MAINSOR
UNTIL WRK-R01EOF-Y OR WRK-COUNT >= CNS-MAX-TRANS
PERFORM UNTIL ... OR ... カバー。上限500件ガード)
1-3. PERFORM 4000STPSOR
1-4. GOBACK
2. 1000ITTSOR(初期処理)
2-1. DISPLAY 'JIN05UPD START' UPON CONSOLE
2-2. M00MHOPAR 初期化 → CALL SUB02MSG(開始 001
2-3. INITIALIZE WRKARA REPLACING NUMERIC BY ZEROS ALPHANUMERIC BY SPACES
2-4. INITIALIZE CUNARA
2-5. CALL SUB01DAT ... ON EXCEPTION → PERFORM 9000ERRSORCALL ON EXCEPTION カバー)
2-6. EXEC SQL CONNECTDB接続)
2-7. OPEN INPUT R01INNFIL OUTPUT W01OUTFIL
2-8. PERFORM 2100READSOR(初回読込)
3. 2000MAINSOR(主処理)
3-1. ADD 1 TO WRK-COUNT(処理件数増)
3-2. R01TRAN-* → HV-* へホスト変数転記
3-3. MOVE R01TRAN-TYPE TO WRK-TRAN-TYPE
3-4. EVALUATE TRUE
WHEN WRK-TRAN-INSERT → PERFORM 3100INSERTSOR
WHEN WRK-TRAN-UPDATE → PERFORM 3200UPDATESOR
WHEN WRK-TRAN-DELETE → PERFORM 3300ERRSOR(削除未実装)
WHEN OTHER → PERFORM 3300ERRSOR
3-5. PERFORM 2100READSOR
4. 2100READSOR(読込)
READ R01INNFIL AT END → WRK-R01EOF='1'
NOT AT END → ADD 1 TO CUN-R01INN
5. 3100INSERTSORINSERT
EXEC SQL INSERT INTO EMPLOYEE:HV-* 9カラム)
IF SQLCODE NOT = 0 → 3400DBERRSOR
ELSE → ADD 1 TO CUN-DBINS
6. 3200UPDATESORUPDATE
STRING 'UPDATING: ' HV-EMP-ID INTO WS-SQL-STR ON OVERFLOW
DISPLAY WS-SQL-STR UPON CONSOLE WITH NO ADVANCING
EXEC SQL UPDATE EMPLOYEE SET:HV-* 8-カラム→9列)
WHERE EMP_ID = :HV-EMP-ID
IF SQLCODE NOT = 0 → 3400DBERRSOR
ELSE → ADD 1 TO CUN-DBUPD
7. 3300ERRSOR(不明種別)
W01ERR-PROGRAMID=PGMID / W01ERR-EMP-ID=HV-EMP-ID / W01ERR-CODE='0001'
STRING `INVALID TRAN-TYPE:` ... INTO W01ERR-DETAIL → WRITE
ADD 1 TO CUN-W01OUT
8. 3400DBERRSORDBエラー)
MOVE SQLCODE → WS-SQLCODE-DISP
STRING `DB ERROR SQLCODE=` ... INTO W01ERR-DETAIL
W01ERR-CODE='0002' → WRITE
CALL SUB02MSG USING BY CONTENT
9. 4000STPSOR(終了)
DISPLAY READ/INSERT/UPDATE/ERROR 件数 UPON CONSOLE
CLOSE R01INNFIL
CLOSE W01OUTFIL WITH LOCK
CALL SUB02MSG(終了 002
CALL SUB03END(正常終了)
10. 9000ERRSORABEND
DISPLAY 'JIN05UPD ABEND' UPON CONSOLE
CALL SUB03ENDE01ABDCOD
```
### トランザクション種別(88-level)
| 88条件名 | VALUE | 対応処理 |
|:---------|:------|:---------|
| WRK-TRAN-INSERT | 'A' 'B' 'C' | 3100INSERTSOR |
| WRK-TRAN-UPDATE | 'D' THRU 'G' | 3200UPDATESOR |
| WRK-TRAN-DELETE | 'Z' | 3300ERRSOR(削除未実装) |
| WHEN OTHER | 上記以外 | 3300ERRSOR |
> 88-level の複数VALUE'A' 'B' 'C')と VALUE THRU'D' THRU 'G')をカバー。
### カバレッジ対象キーワード
| 予約語/記号 | 使用箇所 |
|:-----------|:---------|
| PERFORM UNTIL ... OR ... | 0000MAJCOLSOR: ループ上限 |
| INITIALIZE ... REPLACING | 1000ITTSOR: REPLACING NUMERIC / ALPHANUMERIC |
| CALL ... ON EXCEPTION | 1000ITTSOR: SUB01DAT(異常時9000 |
| EXEC SQL CONNECT / INSERT / UPDATE | DB操作 |
| 88-level 複数VALUE + VALUE THRU | 種別判定 |
| EVALUATE TRUE | 2000MAINSOR: WHEN分岐 |
| STRING ... ON OVERFLOW | 3200/3300/3400 |
| DISPLAY ... UPON CONSOLE WITH NO ADVANCING | 自編集 |
| CALL ... BY CONTENT | 3400DBERRSOR |
---
## 出力レコード定義
### 出力ファイル1W01/VALID-ERROR)— COPY VALID-ERROR-REC 80B
| No | 項目名 | 設定元 | PIC | 備考 |
|----|--------|--------|:---:|------|
| 1 | ERR-PROGRAMID | CNS-PRGIDX | X(8) | 'JIN05UPD' |
| 2 | ERR-EMP-ID | HV-EMP-ID | X(8) | 社員ID |
| 3 | ERR-CODE | '0001'/'0002' | X(4) | エラー種別 |
| 4 | ERR-DETAIL | STRING編集 | X(60) | 詳細メッセージ |
> ER-CODE: 0001=不明種別、0002=DBエラー。
### 入力レコード(R01/HR-TRANS)— JIN05REC 200B
| No | 項目名 | PIC | 備考 |
|----|--------|:---:|------|
| 1 | TRAN-TYPE | X(1) | A/B/C=Insert, D-G=Update |
| 2 | TRAN-EMP-ID | X(8) | |
| 3 | TRAN-KANA-SEI | X(20) | |
| 4 | TRAN-KANA-MEI | X(20) | |
| 5 | TRAN-KANJI-NAME | X(40) | |
| 6 | TRAN-SUB-CODE | X(4) | |
| 7 | TRAN-BIRTH-DATE | X(8) | |
| 8 | TRAN-DEPT-CODE | X(4) | |
| 9 | TRAN-ENTRY-DATE | X(8) | |
| 10 | TRAN-STATUS | X(1) | |
| 11 | FILLER | X(86) | |
> COPY JIN05REC200B)を REPLACING (A)→R01 で定義。