190 lines
7.0 KiB
Markdown
190 lines
7.0 KiB
Markdown
# JIN05UPD 詳細設計書
|
||
|
||
## プログラム概要
|
||
|
||
| 項目 | 内容 |
|
||
|------|------|
|
||
| プログラムID | JIN05UPD(人事→JINji, 05, 人事異動DB更新→UPD) |
|
||
| プログラムタイプ | 09(DB更新) |
|
||
| 機能 | HR-TRANS(人事異動トランザクション)を読込み、DB2 EMPLOYEEテーブルをINSERT/UPDATEする |
|
||
| CALL方式 | メインプログラム(JCLからCALL) |
|
||
| DBアクセス | DB2 EMPLOYEE(CONNECT / 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 9000ERRSOR(CALL ON EXCEPTION カバー)
|
||
2-6. EXEC SQL CONNECT(DB接続)
|
||
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. 3100INSERTSOR(INSERT)
|
||
EXEC SQL INSERT INTO EMPLOYEE(:HV-* 9カラム)
|
||
IF SQLCODE NOT = 0 → 3400DBERRSOR
|
||
ELSE → ADD 1 TO CUN-DBINS
|
||
|
||
6. 3200UPDATESOR(UPDATE)
|
||
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. 3400DBERRSOR(DBエラー)
|
||
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. 9000ERRSOR(ABEND)
|
||
DISPLAY 'JIN05UPD ABEND' UPON CONSOLE
|
||
CALL SUB03END(E01ABDCOD)
|
||
```
|
||
|
||
### トランザクション種別(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 |
|
||
|
||
---
|
||
|
||
## 出力レコード定義
|
||
|
||
### 出力ファイル1(W01/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 JIN05REC(200B)を REPLACING (A)→R01 で定義。 |