# ⑥ 業務ロジック — Edit (Transform): 10 methods

| 項目 | 内容 |
|---|---|
| 完全修飾名 | `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC` |
| レイヤー | CC（Common Component、パッケージ名およびクラス名から判定） |
| モジュール | common（パッケージ名：com.fujitsu.futurity.bp.custom.commonより） |


<style>
.mermaid { display: flex !important; justify-content: center !important; overflow-x: auto !important; overflow-y: hidden; background: #f9f9f9; padding: 20px; border-radius: 8px; margin: 0 auto; }
.mermaid svg { max-width: 100% !important; height: auto !important; width: fit-content !important; margin: 0 auto; }
.node rect { fill: #e1f5fe !important; stroke: #01579b !important; }
.label { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; }
</style>

<a id="method-editResultRP_EKK1081B001SC"></a>
<a id="method-editResultRP"></a>

---

#### 📋 Per-Branch 詳細ブロック — `editResultRP_EKK1081B001SC()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(returnCode != 0)` (L36329)

> 📌 ステータスの検査

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `templateStatus = 9000;` |

##### Block 2 — 🔀 IF `(JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)` [JCMAPLC="JCMAPLC", RETURN_MESSAGE_="return_message_"] (L36332)

> 📌 ← `templateStatus = template.getInt(EKK1081B001CBSMsg.STATUS)`

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `templateStatus = 0;` |
| 2 | 📦 VAR | `int bpStatus = 0;` |

##### Block 3 — 🔀 IF `(obj == null)` (L36338)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `bpStatus = -1;` |

##### Block 4 — ↪️ ELSE `(else)` (L36340)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));` [➔ RETURN_CODE="returnCode" (リターンコード)] |

##### Block 5 — 🔀 IF `(templateStatus > bpStatus)` (L36344)

> 📌 BPにサービスコンポーネントのステータスを設定する。

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `String formatStatus = String.format("%1$04d", templateStatus);` |
| 2 | 📦 VAR | `String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);` [➔ RETURN_MESSAGE_="return_message_"] |
| 3 | ⚡ EXEC | `param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);` [➔ RETURN_CODE="returnCode" (リターンコード)] |
| 4 | ⚡ EXEC | `param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);` [➔ RETURN_MESSAGE="returnMessage" (リターンメッセージ)] |

##### Block 6 — 🔀 IF `(errList == null)` (L36354)

> 📌 エラー情報のマップを取得

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `errList = new ArrayList<Object>();` |
| 2 | ⚡ EXEC | `param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(result, errList));` [➔ ERROR_INFO="error_info"] |

##### Block 7 — 🔀 IF `(0 != returnCode || 0 != templateStatus)` (L36361)

> 📌 必要なら例外発生

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 💥 THROW | `throw new SCCallException("サービスインターフェイス呼出しでエラー発生", returnCode.toString(), Integer.valueOf(templateStatus));` |

##### Block 8 — 🔁 FOR `(for)` (L36370)

> 📌 照会結果を格納

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `retList.add(childTemplates[i].getMsgData());` |

> **合計**: 8 blocks (1 depth levels)

### editResultRP_EKK1081B001SC()

---

#### 1. 役割

オーダ発行条件一覧照会SC（EKK1081B001）の実行結果を解析し、業務パラメータ（HashMapリスト）として返却する処理を担う。  
具体的には、SCからの戻り値（CAANMsg配列）から子要素リストを抽出し、各要素の業務データをリスト化して返却する。加えて、戻り値のステータスコードとエラー情報をコントロールマップに設定し、必要に応じて例外（SCCallException）をスローする。  
本メソッドはSC呼び出し後の共通的な結果処理として、エラー判定・メッセージ取得・業務データリスト化を一括で行う。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["editResultRP_EKK1081B001SC（result, param）"] --> S1["Step1: CAANMsg[] templates = result.get（JCMConstants.TEMPLATE_LIST_KEY）"]
  S1 --> S2["Step2: CAANMsg template = templates[0]"]
  S2 --> S3["Step3: Integer returnCode = result.get（JCMConstants.RET_CD_INT_KEY）"]
  S3 --> S4["Step4: int templateStatus = template.getInt（EKK1081B001CBSMsg.STATUS）"]
  S4 --> IF_RETURN{"if returnCode != 0"}
  IF_RETURN -.-> NOTE_IF1["returnCode = 戻り値コード。エラー時はtemplateStatus=9000に強制"]
  style NOTE_IF1 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF_RETURN -->|"Yes"| S5["templateStatus = 9000"]
  IF_RETURN -->|"No"| S6["Step5: if JCMAPLConstMgr.getString（'RETURN_MESSAGE_' + templateStatus） == null"]
  S5 --> S6
  S6 --> IF_TMPLSTAT{"if JCMAPLConstMgr.getString（...） == null"}
  IF_TMPLSTAT -.-> NOTE_IF2["templateStatus = ステータスコード（テンプレート）"]
  style NOTE_IF2 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF_TMPLSTAT -->|"Yes"| S7["templateStatus = 0"]
  IF_TMPLSTAT -->|"No"| S8["Step6: bpStatus（BP側ステータス）取得"]
  S7 --> S8
  S8 --> S9["Step7: obj = param.getControlMapData（SCControlMapKeys.RETURN_CODE）"]
  S9 --> IF_OBJ{"if obj == null"}
  IF_OBJ -.-> NOTE_IF3["bpStatus = -1 if null, else Integer.parseInt（obj）"]
  style NOTE_IF3 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF_OBJ -->|"Yes"| S10["bpStatus = -1"]
  IF_OBJ -->|"No"| S11["bpStatus = Integer.parseInt（obj）"]
  S10 --> S12["Step8: templateStatus > bpStatus 判定"]
  S11 --> S12
  S12 --> IF_TMPLBP{"if templateStatus > bpStatus"}
  IF_TMPLBP -.-> NOTE_IF4["templateStatus: サービスコンポーネントのステータス"]
  style NOTE_IF4 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF_TMPLBP -->|"Yes"| S13["Step9: param.setControlMapData（）にステータス・メッセージ設定"]
  IF_TMPLBP -->|"No"| S14["Step10: エラー情報取得"]
  S13 --> S14
  S14 --> S15["ArrayList errList = param.getControlMapData（SCControlMapKeys.ERROR_INFO）"]
  S15 --> IF_ERRLIST{"if errList == null"}
  IF_ERRLIST -.-> NOTE_IF5["errList: エラー情報リスト"]
  style NOTE_IF5 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF_ERRLIST -->|"Yes"| S16["errList = new ArrayList<>（）"]
  IF_ERRLIST -->|"No"| S17["Step11: param.setControlMapData（SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo（result, errList））"]
  S16 --> S17
  S17 --> IF_THROW{"if returnCode != 0 || templateStatus != 0"}
  IF_THROW -.-> NOTE_IF6["SCCallException発生: サービスインターフェイス呼出しでエラー発生"]
  style NOTE_IF6 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF_THROW -->|"Yes"| S18["throw new SCCallException（...）"]
  IF_THROW -->|"No"| S19["Step12: CAANMsg[] childTemplates = template.getCAANMsgList（EKK1081B001CBSMsg.EKK1081B001CBSMSG1LIST）"]
  S18 --> END["例外終了"]
  S19 --> S20["Step13: ListにchildTemplates[i].getMsgData（）を格納"]
  S20 --> RET["return retList"]
```

**処理ステップ詳細:**

1. CAANMsg[] templates（SCからのテンプレートリスト）を取得し、先頭のtemplateを選択。
2. 戻り値コード（returnCode）とテンプレートのステータス（templateStatus）を取得。
3. returnCodeが0でない場合はtemplateStatusを9000（エラー）に強制設定。
4. templateStatusに該当するリターンメッセージが存在しない場合はtemplateStatusを0に設定。
5. param.getControlMapData(SCControlMapKeys.RETURN_CODE) で前回BP側のステータスコードを取得し、なければbpStatus = -1、あればintに変換。
6. templateStatus > bpStatus の場合は、コントロールマップに新しいステータス・メッセージを設定する。
7. param.getControlMapData(SCControlMapKeys.ERROR_INFO) でエラー情報リストを取得し、なければ空リストを生成。
8. TemplateErrorUtil.getErrorInfo(result, errList) でエラー情報を再設定。
9. returnCode または templateStatus が0でなければ SCCallException をスローし処理中断。
10. template.getCAANMsgList(EKK1081B001CBSMsg.EKK1081B001CBSMSG1LIST) で子テンプレートリストを取得し、各要素のgetMsgData()をリスト化して返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                      |
| --- | ------------ | -------------------------- | --------------------------------------------- |
| 1   | result       | Map<?, ?>                  | サービスコンポーネントの実行結果（戻り値）    |
| 2   | param        | IRequestParameterReadWrite | 業務パラメータ（コントロールマップ含む）      |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC / CBS | SCコード | エンティティ / DB | 操作説明 |
| ---- | -------- | -------- | ----------------- | -------- |
| - | (なし — 直接DB/SC呼び出しなし) | - | - | サブメソッド経由で処理 |
#### 5. 依存トレース (Dependency Trace)

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK1081B001SC` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK1081B001SC` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK1081B001SC` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK1081B001SC` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK1081B001SC` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK1081B001SC` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK1081B001SC` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK1081B001SC` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK1081B001SC` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK1081B001SC` | - |

---

#### 📋 Per-Branch 詳細ブロック — `editResultRP()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(returnCode.intValue() != 0)` (L31296)

> 📌 ステータス取得

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `templateStatus = 9000;` |

##### Block 2 — 🔀 IF `(JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)` [JCMAPLC="JCMAPLC", RETURN_MESSAGE_="return_message_"] (L31300)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `templateStatus = 0;` |

##### Block 3 — 🔀 IF `(obj == null)` (L31308)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `bpStatus = -1;` |

##### Block 4 — ↪️ ELSE `(else)` (L31313)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));` [➔ RETURN_CODE="returnCode" (リターンコード)] |

##### Block 5 — 🔀 IF `(templateStatus > bpStatus)` (L31317)

> 📌 BPにサービスコンポーネントのステータスを設定する。

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `String formatStatus = String.format("%1$04d", templateStatus);` |
| 2 | 📦 VAR | `String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_"` [➔ RETURN_MESSAGE_="return_message_"] |
| 3 | ⚡ EXEC | `param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);` [➔ RETURN_CODE="returnCode" (リターンコード)] |
| 4 | ⚡ EXEC | `param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);` [➔ RETURN_MESSAGE="returnMessage" (リターンメッセージ)] |

##### Block 6 — 🔀 IF `(errList == null)` (L31350)

> 📌 エラー情報のマップを取得

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `errList = new ArrayList<Object>();` |

> **合計**: 6 blocks (1 depth levels)

### editResultRP_EKK0081B004SC()

---

#### 1. 役割

サービス契約一覧照会（SYSID）（EKK0081B004）のSC実行結果を解析し、各契約情報をHashMapリストとして返却する処理。  
具体的には、SCから返却されたテンプレート（CAANMsg）より子リストを抽出し、各契約データ（getMsgData）をリスト化して返却する。  
ステータスコードとエラー情報をコントロールマップに設定し、エラーが発生している場合は例外（SCCallException）を発生させる。  
SC呼出後の共通的な結果処理として、エラー判定・業務データリスト化を一括で行う。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["editResultRP_EKK0081B004SC（result, param）"] --> S1["Step1: CAANMsg[] templates = result.get（JCMConstants.TEMPLATE_LIST_KEY）"]
  S1 --> S2["Step2: CAANMsg template = templates[0]"]
  S2 --> S3["Step3: Integer returnCode = result.get（JCMConstants.RET_CD_INT_KEY）"]
  S3 --> S4["Step4: int templateStatus = template.getInt（EKK0081B004CBSMsg.STATUS）"]
  S4 --> IF_RETURN{"if returnCode != 0"}
  IF_RETURN -.-> NOTE_IF1["returnCode = 戻り値コード。エラー時はtemplateStatus=9000に強制"]
  style NOTE_IF1 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF_RETURN -->|"Yes"| S5["templateStatus = 9000"]
  IF_RETURN -->|"No"| S6["Step5: if JCMAPLConstMgr.getString（'RETURN_MESSAGE_' + templateStatus） == null"]
  S5 --> S6
  S6 --> IF_TMPLSTAT{"if JCMAPLConstMgr.getString（...） == null"}
  IF_TMPLSTAT -.-> NOTE_IF2["templateStatus = ステータスコード（テンプレート）"]
  style NOTE_IF2 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF_TMPLSTAT -->|"Yes"| S7["templateStatus = 0"]
  IF_TMPLSTAT -->|"No"| S8["Step6: bpStatus（BP側ステータス）取得"]
  S7 --> S8
  S8 --> S9["Step7: obj = param.getControlMapData（SCControlMapKeys.RETURN_CODE）"]
  S9 --> IF_OBJ{"if obj == null"}
  IF_OBJ -.-> NOTE_IF3["bpStatus = -1 if null, else Integer.parseInt（obj）"]
  style NOTE_IF3 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF_OBJ -->|"Yes"| S10["bpStatus = -1"]
  IF_OBJ -->|"No"| S11["bpStatus = Integer.parseInt（obj）"]
  S10 --> S12["Step8: templateStatus > bpStatus 判定"]
  S11 --> S12
  S12 --> IF_TMPLBP{"if templateStatus > bpStatus"}
  IF_TMPLBP -.-> NOTE_IF4["templateStatus: サービスコンポーネントのステータス"]
  style NOTE_IF4 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF_TMPLBP -->|"Yes"| S13["Step9: param.setControlMapData（）にステータス・メッセージ設定"]
  IF_TMPLBP -->|"No"| S14["Step10: エラー情報取得"]
  S13 --> S14
  S14 --> S15["ArrayList errList = param.getControlMapData（SCControlMapKeys.ERROR_INFO）"]
  S15 --> IF_ERRLIST{"if errList == null"}
  IF_ERRLIST -.-> NOTE_IF5["errList: エラー情報リスト"]
  style NOTE_IF5 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF_ERRLIST -->|"Yes"| S16["errList = new ArrayList<>（）"]
  IF_ERRLIST -->|"No"| S17["Step11: param.setControlMapData（SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo（result, errList））"]
  S16 --> S17
  S17 --> IF_THROW{"if returnCode != 0 || templateStatus != 0"}
  IF_THROW -.-> NOTE_IF6["SCCallException発生: サービスインターフェイス呼出しでエラー発生"]
  style NOTE_IF6 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF_THROW -->|"Yes"| S18["throw new SCCallException（...）"]
  IF_THROW -->|"No"| S19["Step12: CAANMsg[] childTemplates = template.getCAANMsgList（EKK0081B004CBSMsg.EKK0081B004CBSMSG1LIST）"]
  S18 --> END["例外終了"]
  S19 --> S20["Step13: ListにchildTemplates[i].getMsgData（）を格納"]
  S20 --> RET["return retList"]
```

**処理ステップ詳細:**

1. CAANMsg[] templates（SCからのテンプレートリスト）を取得し、先頭のtemplateを選択。
2. 戻り値コード（returnCode）とテンプレートのステータス（templateStatus）を取得。
3. returnCodeが0でない場合はtemplateStatusを9000（エラー）に強制設定。
4. templateStatusに該当するリターンメッセージが存在しない場合はtemplateStatusを0に設定。
5. param.getControlMapData(SCControlMapKeys.RETURN_CODE) で前回BP側のステータスコードを取得し、なければbpStatus = -1、あればintに変換。
6. templateStatus > bpStatus の場合は、コントロールマップに新しいステータス・メッセージを設定する。
7. param.getControlMapData(SCControlMapKeys.ERROR_INFO) でエラー情報リストを取得し、なければ空リストを生成。
8. TemplateErrorUtil.getErrorInfo(result, errList) でエラー情報を再設定。
9. returnCode または templateStatus が0でなければ SCCallException をスローし処理中断。
10. template.getCAANMsgList(EKK0081B004CBSMsg.EKK0081B004CBSMSG1LIST) で子テンプレートリストを取得し、各要素のgetMsgData()をリスト化して返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                      |
| --- | ------------ | -------------------------- | --------------------------------------------- |
| 1   | result       | Map<?, ?>                  | サービスコンポーネントの実行結果（戻り値）    |
| 2   | param        | IRequestParameterReadWrite | 業務パラメータ（コントロールマップ含む）      |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC / CBS | SCコード | エンティティ / DB | 操作説明 |
| ---- | -------- | -------- | ----------------- | -------- |
| - | (なし — 直接DB/SC呼び出しなし) | - | - | サブメソッド経由で処理 |
#### 5. 依存トレース (Dependency Trace)

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0081B004SC` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0081B004SC` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0081B004SC` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0081B004SC` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0081B004SC` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0081B004SC` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0081B004SC` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0081B004SC` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0081B004SC` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0081B004SC` | - |

---

#### 📋 Per-Branch 詳細ブロック — `editResultRP_EKK0081B004SC()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(returnCode != 0)` (L36481)

> 📌 ステータスの検査

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `templateStatus = 9000;` |

##### Block 2 — 🔀 IF `(JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)` [JCMAPLC="JCMAPLC", RETURN_MESSAGE_="return_message_"] (L36484)

> 📌 ← `templateStatus = template.getInt(EKK0081B004CBSMsg.STATUS)`

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `templateStatus = 0;` |
| 2 | 📦 VAR | `int bpStatus = 0;` |

##### Block 3 — 🔀 IF `(obj == null)` (L36490)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `bpStatus = -1;` |

##### Block 4 — ↪️ ELSE `(else)` (L36492)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));` [➔ RETURN_CODE="returnCode" (リターンコード)] |

##### Block 5 — 🔀 IF `(templateStatus > bpStatus)` (L36496)

> 📌 BPにサービスコンポーネントのステータスを設定する。

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `String formatStatus = String.format("%1$04d", templateStatus);` |
| 2 | 📦 VAR | `String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);` [➔ RETURN_MESSAGE_="return_message_"] |
| 3 | ⚡ EXEC | `param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);` [➔ RETURN_CODE="returnCode" (リターンコード)] |
| 4 | ⚡ EXEC | `param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);` [➔ RETURN_MESSAGE="returnMessage" (リターンメッセージ)] |

##### Block 6 — 🔀 IF `(errList == null)` (L36506)

> 📌 エラー情報のマップを取得

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `errList = new ArrayList<Object>();` |
| 2 | ⚡ EXEC | `param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(result, errList));` [➔ ERROR_INFO="error_info"] |

##### Block 7 — 🔀 IF `(0 != returnCode || 0 != templateStatus)` (L36513)

> 📌 必要なら例外発生

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 💥 THROW | `throw new SCCallException("サービスインターフェイス呼出しでエラー発生", returnCode.toString(), Integer.valueOf(templateStatus));` |

##### Block 8 — 🔁 FOR `(for)` (L36522)

> 📌 照会結果を格納

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `retList.add(childTemplates[i].getMsgData());` |

> **合計**: 8 blocks (1 depth levels)

### editErrorInfo_EKK0351B003CBS()

---

#### 1. 役割

EKK0351B003（オプションサービス契約履歴一覧照会）のSC呼出結果（エラー時）をパラメータに反映するエラー情報編集処理。  
具体的には、SC実行後のエラー情報（returnCode, templateStatus）と、照会結果テンプレートから取得したエラー詳細をコントロールマップやユーザデータ領域に格納する。  
paramのコントロールマップにステータス・メッセージをセットし、エラー内容（オプションサービス契約番号エラー等）をユーザデータ（inMap）に格納して返却する。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["editErrorInfo_EKK0351B003CBS（param, templates, returnCode）"] --> S1["Step1: CAANMsg template = templates[0]"]
  S1 --> S2["Step2: int templateStatus = template.getInt（EKK0351B003CBSMsg.STATUS）"]
  S2 --> IF_RETURN{"if returnCode != 0"}
  IF_RETURN -.-> NOTE_IF1["エラー時はtemplateStatus=9000に強制"]
  style NOTE_IF1 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF_RETURN -->|"Yes"| S3["templateStatus = 9000"]
  IF_RETURN -->|"No"| S4["Step3: if JCMAPLConstMgr.getString（'RETURN_MESSAGE_' + templateStatus） == null"]
  S3 --> S4
  S4 --> IF_TMPLSTAT{"if JCMAPLConstMgr.getString（...） == null"}
  IF_TMPLSTAT -.-> NOTE_IF2["templateStatus = ステータスコード（テンプレート）"]
  style NOTE_IF2 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF_TMPLSTAT -->|"Yes"| S5["templateStatus = 0"]
  IF_TMPLSTAT -->|"No"| S6["Step4: bpStatus（BP側ステータス）取得"]
  S5 --> S6
  S6 --> S7["Step5: obj = param.getControlMapData（SCControlMapKeys.RETURN_CODE）"]
  S7 --> IF_OBJ{"if obj == null"}
  IF_OBJ -.-> NOTE_IF3["bpStatus = -1 if null, else Integer.parseInt（obj）"]
  style NOTE_IF3 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF_OBJ -->|"Yes"| S8["bpStatus = -1"]
  IF_OBJ -->|"No"| S9["bpStatus = Integer.parseInt（obj）"]
  S8 --> S10["Step6: templateStatus > bpStatus 判定"]
  S9 --> S10
  S10 --> IF_TMPLBP{"if templateStatus > bpStatus"}
  IF_TMPLBP -.-> NOTE_IF4["templateStatus: サービスコンポーネントのステータス"]
  style NOTE_IF4 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF_TMPLBP -->|"Yes"| S11["param.setControlMapData（）にステータス・メッセージ設定"]
  IF_TMPLBP -->|"No"| S12["Step7: inMap = param.getData（JKKHakkoSODConstCC.HAKKOSODCCWORKMAP）"]
  S11 --> S12
  S12 --> IF_INMAP{"if inMap == null"}
  IF_INMAP -.-> NOTE_IF5["inMap: ユーザデータ情報"]
  style NOTE_IF5 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF_INMAP -->|"Yes"| S13["inMap = new HashMap（）; param.setData（JKKHakkoSODConstCC.HAKKOSODCCWORKMAP, inMap）"]
  IF_INMAP -->|"No"| S14["Step8: templateのエラー情報をinMapに格納"]
  S13 --> S14
  S14 --> IF_ERRKEY{"if !template.isNull（EKK0351B003CBSMsg.KEY_SVC_KEI_NO_ERR）"}
  IF_ERRKEY -.-> NOTE_IF6["エラー情報: サービス契約番号エラー"]
  style NOTE_IF6 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF_ERRKEY -->|"Yes"| S15["if !inMap.containsKey（'svc_kei_no_err'）"]
  IF_ERRKEY -->|"No"| S16["return param"]
  S15 -->|"Yes"| S17["inMap.put（'svc_kei_no_err', template.getString（EKK0351B003CBSMsg.KEY_SVC_KEI_NO_ERR））"]
  S15 -->|"No"| S16
  S17 --> S16
  S16 --> RET["return param"]
```

**処理ステップ詳細:**

1. templates[0]からtemplateStatusを取得し、returnCodeが0でなければtemplateStatusを9000に上書き。
2. JCMAPLConstMgr.getString("RETURN_MESSAGE_" + templateStatus)がnullの場合はtemplateStatusを0にする。
3. param.getControlMapData(SCControlMapKeys.RETURN_CODE)でBP側ステータスを取得し、なければbpStatus=-1、あればintに変換。
4. templateStatus > bpStatusなら、param.setControlMapDataで新しいステータス・メッセージをセット。
5. param.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP)でユーザデータ情報inMapを取得。なければ新規生成してparamにセット。
6. template.isNull(EKK0351B003CBSMsg.KEY_SVC_KEI_NO_ERR)がfalseかつinMapに"svc_kei_no_err"がなければ、inMapにエラー情報をセット。
7. paramを返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                 | 業務説明                                  |
| --- | ------------ | ------------------ | ----------------------------------------- |
| 1   | param        | IRequestParameterReadWrite | 業務パラメータ（ユーザデータ含む）   |
| 2   | templates    | CAANMsg[]          | SC実行結果テンプレート配列                |
| 3   | returnCode   | int                | SCの戻り値コード                          |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC / CBS | SCコード | エンティティ / DB | 操作説明 |
| ---- | -------- | -------- | ----------------- | -------- |
| - | (なし — 直接DB/SC呼び出しなし) | - | - | サブメソッド経由で処理 |
#### 5. 依存トレース (Dependency Trace)

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0351B003CBS` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0351B003CBS` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0351B003CBS` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0351B003CBS` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0351B003CBS` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0351B003CBS` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0351B003CBS` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0351B003CBS` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0351B003CBS` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0351B003CBS` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `editResultRP_EKK0351B003CBS` | private | 下りマッピング（オプションサービス契約履歴一覧照会） <br> サービスコンポーネント実行後に、IRequestParameterReadWriteに必要なデータをマッピングします<br> <br> |

---

#### 📋 Per-Branch 詳細ブロック — `editErrorInfo_EKK0351B003CBS()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(returnCode != 0)` (L36067)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `templateStatus = 9000;` |

##### Block 2 — 🔀 IF `(JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)` [JCMAPLC="JCMAPLC", RETURN_MESSAGE_="return_message_"] (L36071)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `templateStatus = 0;` |

##### Block 3 — 🔀 IF `(obj == null)` (L36078)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `bpStatus = -1;` |

##### Block 4 — ↪️ ELSE `(else)` (L36083)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));` [➔ RETURN_CODE="returnCode" (リターンコード)] |

##### Block 5 — 🔀 IF `(templateStatus > bpStatus)` (L36087)

> 📌 BPにサービスコンポーネントのステータスを設定する。

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `String formatStatus = String.format("%1$04d", templateStatus);` |
| 2 | 📦 VAR | `String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);` [➔ RETURN_MESSAGE_="return_message_"] |
| 3 | ⚡ EXEC | `param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);` [➔ RETURN_CODE="returnCode" (リターンコード)] |
| 4 | ⚡ EXEC | `param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);` [➔ RETURN_MESSAGE="returnMessage" (リターンメッセージ)] |

##### Block 6 — 🔀 IF `(inMap == null)` (L36100)

> 📌 ユーザデータ情報

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `inMap = new HashMap();` |
| 2 | ⚡ EXEC | `param.setData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP, inMap);` [➔ HAKKOSODCCWORKMAP="HakkoSODCCWORK"] \| |

##### Block 7 — 🔀 IF `(!template.isNull(EKK0351B003CBSMsg.KEY_SVC_KEI_NO_ERR))` [KEY_SVC_KEI_NO_ERR="key_svc_kei_no_err"] (L36107)

> 📌 オプションサービス契約履歴一覧照会マップ.サービス契約番号 → ＫＥＹ＿サービス契約番号 のエラー情報返却

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `inMap.put("svc_kei_no_err", template.getString(EKK0351B003CBSMsg.KEY_SVC_KEI_NO_ERR));` [➔ KEY_SVC_KEI_NO_ERR="key_svc_kei_no_err"] \| |

###### · Block 7.1 — 🔀 IF `(!inMap.containsKey("svc_kei_no_err"))` (L36109)

> 📌 オプションサービス契約履歴一覧照会マップ.サービス契約番号 → ＫＥＹ＿サービス契約番号 のエラー情報返却

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `inMap.put("svc_kei_no_err", template.getString(EKK0351B003CBSMsg.KEY_SVC_KEI_NO_ERR));` [➔ KEY_SVC_KEI_NO_ERR="key_svc_kei_no_err"] \| |

> **合計**: 8 blocks (2 depth levels)

### editResultRP_EKK0351B003CBS()

---

#### 1. 役割

EKK0351B003（オプションサービス契約履歴一覧照会）SCの戻り値（msgList）からCAANMsg配列を取得し、各明細のオプションサービス契約情報（契約番号・世代登録日時・異動区分）をユーザデータ領域（dataMap）にリストとして格納する。  
また、SCの戻り値コードを参照し、エラー発生時はeditErrorInfo_EKK0351B003CBS()を呼び出してparamにエラー情報を反映する。  
最後に、paramのコントロールマップにエラー情報を再設定し、エラーリストが非空の場合はCCExceptionを発生させる。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["editResultRP_EKK0351B003CBS（msgList, param）"] --> S1["Step1: CAANMsg[] templates = msgList.get（JCMConstants.TEMPLATE_LIST_KEY）"]
  S1 --> S2["Step2: CAANMsg parentTemplate = templates[0]"]
  S2 --> S3["Step3: Object return_code = msgList.get（JCMConstants.RET_CD_INT_KEY）"]
  S3 --> S4["Step4: dataMap = param.getData（JKKHakkoSODConstCC.HAKKOSODCCWORKMAP）"]
  S4 --> IF_DATAMAP{"if dataMap == null"}
  IF_DATAMAP -.-> NOTE_IF1["ユーザデータ領域初期化"]
  style NOTE_IF1 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF_DATAMAP -->|"Yes"| S5["dataMap = new HashMap（）; param.setData（JKKHakkoSODConstCC.HAKKOSODCCWORKMAP, dataMap）"]
  IF_DATAMAP -->|"No"| S6["Step5: templateArray = parentTemplate.getMsgData（）.get（EKK0351B003CBSMsg.EKK0351B003CBSMSG1LIST）"]
  S5 --> S6
  S6 --> S7["Step6: dataList = dataMap.get（JKKHakkoSODConstCC.EKK0351B003CBSMSG1LIST）"]
  S7 --> IF_DATALIST{"if dataList == null"}
  IF_DATALIST -.-> NOTE_IF2["dataList: 各明細のリスト"]
  style NOTE_IF2 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF_DATALIST -->|"Yes"| S8["dataList = new ArrayList<>（）"]
  IF_DATALIST -->|"No"| S9["Step7: templateArray各要素についてデータ格納"]
  S8 --> S9
  S9 --> FOR_ARRAY["for i in templateArray"]
  FOR_ARRAY --> IF_SIZE{"if i >= dataList.size（）"}
  IF_SIZE -.-> NOTE_IF3["dataList拡張"]
  style NOTE_IF3 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF_SIZE -->|"Yes"| S10["dataList.add（new HashMap（））"]
  IF_SIZE -->|"No"| S11["childMap = dataList.get（i）"]
  S10 --> S11
  S11 --> S12["childTemplate = templateArray[i]"]
  S12 --> S13["各フィールドをchildMapにセット"]
  S13 --> IF_OPKEINO{"if childTemplate.isNull（EKK0351B003CBSMsg1List.KK0351_OP_SVC_KEI_NO）"}
  IF_OPKEINO -.-> NOTE_IF4["op_svc_kei_no: オプションサービス契約番号"]
  style NOTE_IF4 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF_OPKEINO -->|"Yes"| S14["childMap.put（'op_svc_kei_no', ''）"]
  IF_OPKEINO -->|"No"| S15["childMap.put（'op_svc_kei_no', value）"]
  S14 --> IF_GENEADD{"if childTemplate.isNull（EKK0351B003CBSMsg1List.KK0351_GENE_ADD_DTM）"}
  S15 --> IF_GENEADD
  IF_GENEADD -.-> NOTE_IF5["gene_add_dtm: 世代登録年月日時分秒"]
  style NOTE_IF5 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF_GENEADD -->|"Yes"| S16["childMap.put（'gene_add_dtm', ''）"]
  IF_GENEADD -->|"No"| S17["childMap.put（'gene_add_dtm', value）"]
  S16 --> IF_IDODIV{"if childTemplate.isNull（EKK0351B003CBSMsg1List.IDO_DIV）"}
  S17 --> IF_IDODIV
  IF_IDODIV -.-> NOTE_IF6["ido_div: 異動区分"]
  style NOTE_IF6 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF_IDODIV -->|"Yes"| S18["childMap.put（'ido_div', ''）"]
  IF_IDODIV -->|"No"| S19["childMap.put（'ido_div', value）"]
  S18 --> S20["繰返し"]
  S19 --> S20
  S20 --> END1["dataMap.put（'EKK0351B003CBSMsg1List', dataList）"]
  END1 --> S21["Step8: param = editErrorInfo_EKK0351B003CBS（param, templates, return_code）"]
  S21 --> S22["Step9: errList = param.getControlMapData（SCControlMapKeys.ERROR_INFO）"]
  S22 --> IF_ERRLIST2{"if errList == null"}
  IF_ERRLIST2 -.-> NOTE_IF7["errList: エラー情報リスト"]
  style NOTE_IF7 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF_ERRLIST2 -->|"Yes"| S23["errList = new ArrayList<>（）"]
  IF_ERRLIST2 -->|"No"| S24["Step10: param.setControlMapData（SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo（msgList, errList））"]
  S23 --> S24
  S24 --> IF_ERRNOTEMPTY{"if errList != null && !errList.isEmpty（）"}
  IF_ERRNOTEMPTY -->|"Yes"| S25["throw new CCException（...）"]
  IF_ERRNOTEMPTY -->|"No"| RET["return param"]
```

**処理ステップ詳細:**

1. SCの戻り値からCAANMsg[] templatesを取得し、先頭要素からtemplateArrayを取り出す。
2. ユーザデータ領域（dataMap）がなければ新規生成し、paramにセット。
3. dataMap内のdataList（EKK0351B003CBSMSG1LIST）がなければ新規生成。
4. templateArray各要素ごとにchildMapを取得し、必要なフィールド（op_svc_kei_no, gene_add_dtm, ido_div）をセット。nullの場合は""を格納。
5. dataMapにリストを格納。
6. editErrorInfo_EKK0351B003CBS()でエラー情報をparamに反映。
7. param.getControlMapData(SCControlMapKeys.ERROR_INFO)でエラーリスト取得し、なければ新規生成。
8. TemplateErrorUtil.getErrorInfoでコントロールマップにエラー情報を再設定。
9. errListが非空の場合はCCExceptionをthrow。問題なければparamを返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                  |
| --- | ------------ | -------------------------- | ----------------------------------------- |
| 1   | msgList      | Map<?, ?>                  | SC呼出の戻り値（テンプレート・コード含む）|
| 2   | param        | IRequestParameterReadWrite | 業務パラメータ（ユーザデータ含む）        |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC / CBS | SCコード | エンティティ / DB | 操作説明 |
| ---- | -------- | -------- | ----------------- | -------- |
| - | (なし — 直接DB/SC呼び出しなし) | - | - | サブメソッド経由で処理 |
#### 5. 依存トレース (Dependency Trace)

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0351B003CBS` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0351B003CBS` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0351B003CBS` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0351B003CBS` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0351B003CBS` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0351B003CBS` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0351B003CBS` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0351B003CBS` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0351B003CBS` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0351B003CBS` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `getOpSvcKeiList` | private | オプションサービス契約一覧照会（サービス契約番号）<br> <br> オプションサービス契約一覧照会（サービス契約番号）サービスインターフェイスにより<br> サービス契約番号に紐づくオプションサービス契約の一覧を取得します。<br> <b… |
| 2 | `getOpSvcKeiNotDslList` | private | オプションサービス契約一覧照会（サービス契約番号）<br> <br> オプションサービス契約一覧照会（サービス契約番号）サービスインターフェイスにより<br> サービス契約番号に紐づく解約済ではないオプションサービス契約の一覧を取得します。… |

---

#### 📋 Per-Branch 詳細ブロック — `editResultRP_EKK0351B003CBS()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(dataMap == null)` (L35965)

> 📌 業務データ設定

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `dataMap = new HashMap();` |
| 2 | ⚡ EXEC | `param.setData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP, dataMap);` [➔ HAKKOSODCCWORKMAP="HakkoSODCCWORK"] \| |

##### Block 2 — 🔀 IF `(dataList == null)` (L35973)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `dataList = new ArrayList();` |

##### Block 3 — 🔀 IF `(templateArray != null)` (L35978)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `CAANMsg childTemplate = templateArray[i];` |
| 2 | ⚡ EXEC | `dataList.add(new HashMap());` |
| 3 | 📦 VAR | `HashMap childMap = (HashMap)dataList.get(i);` |
| 4 | 📋 SET | `childMap.put("op_svc_kei_no", "");` |
| 5 | 📋 SET | `childMap.put("op_svc_kei_no", childTemplate.getString(EKK0351B003CBSMsg1List.KK0351_OP_SVC_KEI_NO));` [➔ KK0351_OP_SVC_KEI_NO="kk0351_op_svc_kei_no"] \| |
| 6 | 📋 SET | `childMap.put("gene_add_dtm", "");` |
| 7 | 📋 SET | `childMap.put("gene_add_dtm", childTemplate.getString(EKK0351B003CBSMsg1List.KK0351_GENE_ADD_DTM));` [➔ KK0351_GENE_ADD_DTM="kk0351_gene_add_dtm"] \| |
| 8 | 📋 SET | `childMap.put("ido_div", "");` |

###### · Block 3.1 — 🔁 FOR `(for)` (L35980)

> （直接の処理内容なし — ネストされた子ブロックを参照）

###### ·· Block 3.1.1 — 🔀 IF `(i >= dataList.size())` (L35983)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `dataList.add(new HashMap());` |

###### ·· Block 3.1.2 — 🔀 IF `(childTemplate.isNull(EKK0351B003CBSMsg1List.KK0351_OP_SVC_KEI_NO))` [KK0351_OP_SVC_KEI_NO="kk0351_op_svc_kei_no"] (L35992)

> 📌 ← オプションサービス契約履歴一覧照会明細.オプションサービス契約番号

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("op_svc_kei_no", "");` |

###### ·· Block 3.1.3 — ↪️ ELSE `(else)` (L35997)

> 📌 オプションサービス契約履歴一覧照会マップ.オプションサービス契約履歴一覧照会明細.世代登録年月日時分秒

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("op_svc_kei_no", childTemplate.getString(EKK0351B003CBSMsg1List.KK0351_OP_SVC_KEI_NO));` [➔ KK0351_OP_SVC_KEI_NO="kk0351_op_svc_kei_no"] \| |

###### ·· Block 3.1.4 — 🔀 IF `(childTemplate.isNull(EKK0351B003CBSMsg1List.KK0351_GENE_ADD_DTM))` [KK0351_GENE_ADD_DTM="kk0351_gene_add_dtm"] (L36003)

> 📌 ← オプションサービス契約履歴一覧照会明細.世代登録年月日時分秒

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("gene_add_dtm", "");` |

###### ·· Block 3.1.5 — ↪️ ELSE `(else)` (L36008)

> 📌 オプションサービス契約履歴一覧照会マップ.オプションサービス契約履歴一覧照会明細.異動区分

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("gene_add_dtm", childTemplate.getString(EKK0351B003CBSMsg1List.KK0351_GENE_ADD_DTM));` [➔ KK0351_GENE_ADD_DTM="kk0351_gene_add_dtm"] \| |

###### ·· Block 3.1.6 — 🔀 IF `(childTemplate.isNull(EKK0351B003CBSMsg1List.IDO_DIV))` [IDO_DIV="ido_div"] (L36014)

> 📌 ← オプションサービス契約履歴一覧照会明細.異動区分

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("ido_div", "");` |

###### ·· Block 3.1.7 — ↪️ ELSE `(else)` (L36019)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("ido_div", childTemplate.getString(EKK0351B003CBSMsg1List.IDO_DIV));` [➔ IDO_DIV="ido_div"] \| |
| 2 | 📋 SET | `dataMap.put("EKK0351B003CBSMsg1List", dataList);` |
| 3 | ⚡ EXEC | `param = editErrorInfo_EKK0351B003CBS(param, templates, (Integer)return_code);` |

##### Block 4 — 🔀 IF `(errList == null)` (L36031)

> 📌 エラー情報のマップを取得

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `errList = new ArrayList<Object>();` |

##### Block 5 — 🔀 IF `(errList != null && !errList.isEmpty())` (L36039)

> 📌 エラー発生時はExceptionを設定

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 💥 THROW | `throw new CCException("", new SCCallException("", ((Integer)return_code).toString(), templates[0].getInt(EKK0351B003CBSMsg.STATUS)));` |

> **合計**: 13 blocks (3 depth levels)

### edit4OpSetOdrCtrl(String idoDiv, String sysid, String kk0081No, String kk0191No, String kk0191GeneDtm, String kk0351No, String kk0351GeneDtm)

---

#### 1. 役割

オプション設定オーダ制御メソッド呼び出し用のSOD入力マップ編集（共通化）処理。  
本メソッドは、SOD制御に必要な基本情報（異動区分、SYSID、サービス契約番号、内訳番号・世代、オプション契約番号・世代）を一括でセットしたHashMapを生成する。  
異動区分や契約情報、変更前後のオプション契約情報を全て同じ値（kk0351GeneDtm）で設定し、次工程のSOD制御メソッド呼び出しに渡す役割を持つ。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["edit4OpSetOdrCtrl（idoDiv, sysid, kk0081No, kk0191No, kk0191GeneDtm, kk0351No, kk0351GeneDtm）"] --> S1["Step1: edit4OpSetOdrCtrlを引数chbfKK0351GeneDtm=kk0351GeneDtm, chafKK0351GeneDtm=kk0351GeneDtmで呼び出し"]
  S1 --> RET["return opSodMap"]
```

**処理ステップ詳細:**

1. edit4OpSetOdrCtrl(idoDiv, sysid, kk0081No, kk0191No, kk0191GeneDtm, kk0351No, kk0351GeneDtm, kk0351GeneDtm) を呼び出し、結果（opSodMap）をそのまま返却する。

---

#### 3. パラメータ分析

| No  | パラメータ名         | 型           | 業務説明                         |
| --- | -------------------- | ------------ | -------------------------------- |
| 1   | idoDiv               | String       | 異動区分                         |
| 2   | sysid                | String       | SYSID                            |
| 3   | kk0081No             | String       | サービス契約番号                 |
| 4   | kk0191No             | String       | サービス契約内訳番号             |
| 5   | kk0191GeneDtm        | String       | サービス契約内訳世代登録日時     |
| 6   | kk0351No             | String       | オプションサービス契約番号       |
| 7   | kk0351GeneDtm        | String       | オプションサービス契約世代登録日時|

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC / CBS | SCコード | エンティティ / DB | 操作説明 |
| ---- | -------- | -------- | ----------------- | -------- |
| - | (なし — 直接DB/SC呼び出しなし) | - | - | サブメソッド経由で処理 |
#### 5. 依存トレース (Dependency Trace)

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → edit4OpSetOdrCtrl` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → edit4OpSetOdrCtrl` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → edit4OpSetOdrCtrl` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → edit4OpSetOdrCtrl` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → edit4OpSetOdrCtrl` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → edit4OpSetOdrCtrl` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → edit4OpSetOdrCtrl` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → edit4OpSetOdrCtrl` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → edit4OpSetOdrCtrl` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → edit4OpSetOdrCtrl` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `htelNoDslOdrCtrl` | private | 光電話番号解約オーダ制御処理<br> |
| 2 | `htelNoKaihkOdrCtrl` | private | 光電話番号回復オーダ制御処理<br> |
| 3 | `kaihkOdrCtrl` | private | 回復オーダ制御処理<br> |
### editResultRP_EKK0791A010SC()

---

#### 1. 役割

料金コース一意照会（EKK0791A010）のSC実行結果を解析し、各コースデータをHashMapリストとして返却する業務処理。  
SCから返却されたテンプレート（CAANMsg）から子リストを抽出・各フィールドをマッピングし、業務パラメータリストとして返却する。  
ステータスコードとエラー情報をコントロールマップに設定し、エラーが発生した場合は例外（SCCallException）をスローする。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["editResultRP_EKK0791A010SC（result, param）"] --> S1["Step1: CAANMsg[] templates = result.get（JCMConstants.TEMPLATE_LIST_KEY）"]
  S1 --> S2["Step2: CAANMsg template = templates[0]"]
  S2 --> S3["Step3: Integer returnCode = result.get（JCMConstants.RET_CD_INT_KEY）"]
  S3 --> S4["Step4: int templateStatus = template.getInt（EKK0791A010CBSMsg.STATUS）"]
  S4 --> IF_RETURN{"if returnCode != 0"}
  IF_RETURN -.-> NOTE_IF1["エラー時はtemplateStatus=9000に強制"]
  style NOTE_IF1 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF_RETURN -->|"Yes"| S5["templateStatus = 9000"]
  IF_RETURN -->|"No"| S6["Step5: if JCMAPLConstMgr.getString（'RETURN_MESSAGE_' + templateStatus） == null"]
  S5 --> S6
  S6 --> IF_TMPLSTAT{"if JCMAPLConstMgr.getString（...） == null"}
  IF_TMPLSTAT -.-> NOTE_IF2["templateStatus = ステータスコード（テンプレート）"]
  style NOTE_IF2 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF_TMPLSTAT -->|"Yes"| S7["templateStatus = 0"]
  IF_TMPLSTAT -->|"No"| S8["Step6: bpStatus（BP側ステータス）取得"]
  S7 --> S8
  S8 --> S9["Step7: obj = param.getControlMapData（SCControlMapKeys.RETURN_CODE）"]
  S9 --> IF_OBJ{"if obj == null"}
  IF_OBJ -.-> NOTE_IF3["bpStatus = -1 if null, else Integer.parseInt（obj）"]
  style NOTE_IF3 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF_OBJ -->|"Yes"| S10["bpStatus = -1"]
  IF_OBJ -->|"No"| S11["bpStatus = Integer.parseInt（obj）"]
  S10 --> S12["Step8: templateStatus > bpStatus 判定"]
  S11 --> S12
  S12 --> IF_TMPLBP{"if templateStatus > bpStatus"}
  IF_TMPLBP -.-> NOTE_IF4["templateStatus: サービスコンポーネントのステータス"]
  style NOTE_IF4 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF_TMPLBP -->|"Yes"| S13["param.setControlMapData（）にステータス・メッセージ設定"]
  IF_TMPLBP -->|"No"| S14["Step9: エラー情報取得"]
  S13 --> S14
  S14 --> S15["ArrayList errList = param.getControlMapData（SCControlMapKeys.ERROR_INFO）"]
  S15 --> IF_ERRLIST{"if errList == null"}
  IF_ERRLIST -.-> NOTE_IF5["errList: エラー情報リスト"]
  style NOTE_IF5 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF_ERRLIST -->|"Yes"| S16["errList = new ArrayList<>（）"]
  IF_ERRLIST -->|"No"| S17["Step10: param.setControlMapData（SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo（result, errList））"]
  S16 --> S17
  S17 --> IF_THROW{"if returnCode != 0 || templateStatus != 0"}
  IF_THROW -.-> NOTE_IF6["SCCallException発生: サービスインターフェイス呼出しでエラー発生"]
  style NOTE_IF6 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF_THROW -->|"Yes"| S18["throw new SCCallException（...）"]
  IF_THROW -->|"No"| S19["Step11: Object[][] contents = （new EKK0791A010CBSMsg1List（））.getContents（）"]
  S18 --> END["例外終了"]
  S19 --> S20["Step12: CAANMsg[] childTemplates = template.getCAANMsgList（EKK0791A010CBSMsg.EKK0791A010CBSMSG1LIST）"]
  S20 --> FOR_CHILD["for i in childTemplates"]
  FOR_CHILD --> FOR_CONTENT["for j in contents"]
  FOR_CONTENT --> S21["retMap.put（（String）contents[j][0], childTemplates[i].getString（（String）contents[j][0]））"]
  S21 --> S22["retList.add（retMap）"]
  S22 --> RET["return retList"]
```

**処理ステップ詳細:**

1. SCからの戻り値（CAANMsg[] templates）を取得し、先頭templateを選択。
2. 戻り値コードとテンプレートステータスを取得し、returnCodeが0でなければtemplateStatusを9000に設定。
3. templateStatusに該当するメッセージがなければtemplateStatus=0。
4. param.getControlMapData(SCControlMapKeys.RETURN_CODE)でBP側のステータス取得、なければbpStatus=-1。
5. templateStatus > bpStatusならコントロールマップにステータス・メッセージをセット。
6. エラー情報（errList）を取得し、なければ初期化。TemplateErrorUtil.getErrorInfoでエラー情報を再設定。
7. returnCodeまたはtemplateStatusが0でなければ例外throw。
8. EKK0791A010CBSMsg1Listのcontentsを取得し、childTemplatesごとに各フィールドをretMapにputし、retListに追加。
9. retListを返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                      |
| --- | ------------ | -------------------------- | --------------------------------------------- |
| 1   | result       | Map<?, ?>                  | サービスコンポーネントの実行結果（戻り値）    |
| 2   | param        | IRequestParameterReadWrite | 業務パラメータ（コントロールマップ含む）      |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC / CBS | SCコード | エンティティ / DB | 操作説明 |
| ---- | -------- | -------- | ----------------- | -------- |
| - | (なし — 直接DB/SC呼び出しなし) | - | - | サブメソッド経由で処理 |
#### 5. 依存トレース (Dependency Trace)

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0791A010SC` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0791A010SC` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0791A010SC` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0791A010SC` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0791A010SC` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0791A010SC` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0791A010SC` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0791A010SC` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0791A010SC` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0791A010SC` | - |

---

#### 📋 Per-Branch 詳細ブロック — `editResultRP_EKK0791A010SC()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(returnCode != 0)` (L35522)

> 📌 ステータスの検査

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `templateStatus = 9000;` |

##### Block 2 — 🔀 IF `(JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)` [JCMAPLC="JCMAPLC", RETURN_MESSAGE_="return_message_"] (L35525)

> 📌 ← `templateStatus = template.getInt(EKK0791A010CBSMsg.STATUS)`

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `templateStatus = 0;` |
| 2 | 📦 VAR | `int bpStatus = 0;` |

##### Block 3 — 🔀 IF `(obj == null)` (L35531)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `bpStatus = -1;` |

##### Block 4 — ↪️ ELSE `(else)` (L35533)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));` [➔ RETURN_CODE="returnCode" (リターンコード)] |

##### Block 5 — 🔀 IF `(templateStatus > bpStatus)` (L35537)

> 📌 BPにサービスコンポーネントのステータスを設定する。

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `String formatStatus = String.format("%1$04d", templateStatus);` |
| 2 | 📦 VAR | `String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);` [➔ RETURN_MESSAGE_="return_message_"] |
| 3 | ⚡ EXEC | `param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);` [➔ RETURN_CODE="returnCode" (リターンコード)] |
| 4 | ⚡ EXEC | `param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);` [➔ RETURN_MESSAGE="returnMessage" (リターンメッセージ)] |

##### Block 6 — 🔀 IF `(errList == null)` (L35547)

> 📌 エラー情報のマップを取得

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `errList = new ArrayList<Object>();` |
| 2 | ⚡ EXEC | `param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(result, errList));` [➔ ERROR_INFO="error_info"] |

##### Block 7 — 🔀 IF `(0 != returnCode || 0 != templateStatus)` (L35554)

> 📌 必要なら例外発生

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 💥 THROW | `throw new SCCallException("サービスインターフェイス呼出しでエラー発生", returnCode.toString(), Integer.valueOf(templateStatus));` |

##### Block 8 — 🔁 FOR `(for)` (L35565)

> 📌 照会結果を格納

> （直接の処理内容なし — ネストされた子ブロックを参照）

###### · Block 8.1 — 🔁 FOR `(for)` (L35568)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `retMap.put((String)contents[j][0], childTemplates[i].getString((String)contents[j][0]));` |

> **合計**: 9 blocks (2 depth levels)

### editBasicCmn()

---

#### 1. 役割

SCインプット共通データ（電文ヘッダやコントロールマップから取得する運用情報）をCAANMsgテンプレートに設定する。  
具体的には、paramのコントロールマップからオペレータID、運用日付、運用日時を取得し、SC向けメッセージの各フィールドにセットする。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["editBasicCmn（param, template）"] --> S1["Step1: param.getControlMapData（SCControlMapKeys.OPERATOR_ID）でオペレータID取得"]
  S1 --> S2["Step2: template.set（JCMConstants.OPERATOR_ID_KEY, operatorId）"]
  S2 --> S3["Step3: param.getControlMapData（SCControlMapKeys.OPE_DATE）で運用日付取得"]
  S3 --> S4["Step4: template.set（JCMConstants.OPERATE_DATE_KEY, operateDate）"]
  S4 --> S5["Step5: param.getControlMapData（SCControlMapKeys.OPE_TIME）で運用日時取得"]
  S5 --> S6["Step6: template.set（JCMConstants.OPERATE_DATETIME_KEY, operateDateTime）"]
  S6 --> END["return"]
  S2 -.- NOTE_OPID["SCControlMapKeys.OPERATOR_ID = オペレータID"]
  S4 -.- NOTE_OPDATE["SCControlMapKeys.OPE_DATE = 運用日付"]
  S6 -.- NOTE_OPTIME["SCControlMapKeys.OPE_TIME = 運用日時"]
  style NOTE_OPID fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE_OPDATE fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE_OPTIME fill:#fff,stroke:#333,stroke-dasharray: 5 5
```

**処理ステップ詳細:**

1. param.getControlMapData(SCControlMapKeys.OPERATOR_ID) でオペレータIDを取得し、templateにセット。
2. param.getControlMapData(SCControlMapKeys.OPE_DATE) で運用日付を取得し、templateにセット。
3. param.getControlMapData(SCControlMapKeys.OPE_TIME) で運用日時を取得し、templateにセット。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                 |
| --- | ------------ | -------------------------- | ---------------------------------------- |
| 1   | param        | IRequestParameterReadOnly  | 業務パラメータ（コントロールマップ含む） |
| 2   | template     | CAANMsg                    | SC入力メッセージテンプレート             |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC / CBS | SCコード | エンティティ / DB | 操作説明 |
| ---- | -------- | -------- | ----------------- | -------- |
| - | (なし — 直接DB/SC呼び出しなし) | - | - | サブメソッド経由で処理 |
#### 5. 依存トレース (Dependency Trace)

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → editBasicCmn` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → editBasicCmn` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → editBasicCmn` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → editBasicCmn` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → editBasicCmn` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → editBasicCmn` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → editBasicCmn` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → editBasicCmn` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → editBasicCmn` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → editBasicCmn` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `callEKK0081A010SC` | private | サービス契約一意照会SIFを呼び出し |
| 2 | `callEKK0081B004SC` | private | EKK0081B004 サービス契約一覧照会（SYSID）S-IFを実行します |
| 3 | `callEKK0091A010_SC` | private | サービス契約一意照会SIFを呼び出し |
| 4 | `callEKK0161A010SC` | private | サービス契約内訳一意照会SIFを呼び出し |
| 5 | `callEKK0161B003SC` | private | サービス契約内訳一覧照会（SYSID）SIFを呼び出し |
| 6 | `callEKK0161B004SC` | private | サービス契約内訳一覧照会（サービス契約番号）SIFを呼び出し |
| 7 | `callEKK0161B008SC` | private | 番ポ申込種別照会SIFを呼び出し |
| 8 | `callEKK0161B011SC` | private | サービス契約内訳履歴一覧照会SIFを呼び出し |
| 9 | `callEKK0191A010SC` | protected | サービス契約内訳＜eo光電話＞一意照会SIFを呼び出し |
| 10 | `callEKK0191B001_2SC` | private | サービス契約内訳<eo光電話>一覧照会（サービス契約番号）SIFを呼び出し |
| 11 | `callEKK0191B001SC` | private | サービス契約内訳<eo光電話>一覧照会（サービス契約番号）SIFを呼び出し |
| 12 | `callEKK0191B502SC` | private | - |
| 13 | `callEKK0251B001SC` | private | サービス契約回線内訳一覧照会（サービス契約番号）SIFを呼び出し |
| 14 | `callEKK0251B003SC` | private | EKK0251B003_サービス契約回線内訳一覧照会（現在利用中）SIFを呼び出し |
| 15 | `callEKK0251B003SCCAAMsg` | private | サービス契約回線内訳（現在利用中）SIFを呼び出し |
| 16 | `callEKK0341A010SC` | private | 機器提供サービス契約一意照会SIFを呼び出し |
| 17 | `callEKK0341B002SC` | private | 機器提供サービス契約一覧照会（サービス契約番号）SIFを呼び出し |
| 18 | `callEKK0341B008_02SC` | private | 機器提供サービス契約一覧照会SIFを呼び出し（交換中レコード専用） |
| 19 | `callEKK0341B008SC` | private | 機器提供サービス契約一覧照会SIFを呼び出し 2012-11/21　ロット２IT1-2012-0002131（EKK0341B022 に差替え） |
| 20 | `callEKK0341B504SC` | private | 機器提供サービス契約一覧照会（サービス契約回線内訳）SIFを呼び出し |
| 21 | `callEKK0351A010SC` | private | オプションサービス契約一意照会SIFを呼び出し |
| 22 | `callEKK0351B002SC` | private | オプションサービス契約一覧照会（サービス契約番号）SIFを呼び出し |
| 23 | `callEKK0351B010SC` | private | オプションサービス契約一覧照会（サービス契約番号）SIFを呼び出し |
| 24 | `callEKK0361A010SC` | private | オプションサービス契約＜ISP＞一意照会SIFを呼び出し |
| 25 | `callEKK0401A010SC` | private | サブオプションサービス契約一意照会SIFを呼び出し |
| 26 | `callEKK0411A010SC` | private | サブオプションサービス契約＜ISP＞一意照会SIFを呼び出し |
| 27 | `callEKK0791A010SC` | private | EKK0791A010 料金コース一意照会を実行します<br> <br> |
| 28 | `callEKK0881A010_SC` | private | 回線使用契約一意照会SIFを呼び出し |
| 29 | `callEKK0891A010_SC` | private | 提供方式契約一意照会を呼び出す。 |
| 30 | `callEKK1041A010SC` | private | オーダ設定一意照会SIFを呼び出し |
| 31 | `callEKK1041B001SC` | private | EKK1041B001 オーダ設定一覧照会を実行します |
| 32 | `callEKK1081B001SC` | private | EKK1081B001 オーダ発行条件一覧照会を実行します |
| 33 | `callEKK1081C011SC` | private | 同一処理番号取得SIFを呼び出し |
| 34 | `callEKK1081E010SC` | private | EKK1081E010 オーダ発行条件論理削除S-IFを実行します。 <br> |
| 35 | `callEKK1681B001SC` | private | 異動予約一覧照会<br> <br> |
| 36 | `callEKK2091A010SC` | private | 住所変更一意照会を呼び出す |
| 37 | `callEKK2101B001SC` | private | 住所変更明細一覧照会 |
| 38 | `callEKK2101B002SC` | private | 住所変更明細一覧照会（変更前識別番号）の取得 |
| 39 | `callEKK2811A010SC` | private | 機器オプションサービス契約一意照会SIFを呼び出し |
| 40 | `callEKK2811B010SC` | private | 機器オプションサービス契約一覧照会SIFを呼び出し |
| 41 | `callEKU0011A010SC` | private | 工事案件一意照会 |
| 42 | `callEKU0081B010SC` | private | サービス契約＿工事案件一覧照会 |
| 43 | `callETU0011B010SC` | private | 番ポ工事一覧照会SIFを呼び出し |
| 44 | `callEZM0121A010SC` | private | 電話番号一意照会SIFを呼び出し |
| 45 | `callEZM0321A010_SC` | private | 業務パラメータ一意照会検索を呼び出す。 |
| 46 | `callEZM0411A010SC` | private | 宅内機器型式一意照会SIFを呼び出し |
| 47 | `editInMsg_EKK0081A010CBS` | protected | 上りマッピング（サービス契約一意照会）<br> <br> サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングします。 <br> |
| 48 | `editInMsg_EKK0161B003CBS` | private | 上りマッピング（サービス契約内訳一覧照会（SYSID））<br> <br> サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングします。 <br> |
| 49 | `editInMsg_EKK0161B004CBS` | private | 上りマッピング（サービス契約内訳一覧照会）<br> <br> サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングします。 <br> |
| 50 | `editInMsg_EKK0341B002CBS` | private | 上りマッピング（機器提供サービス契約一覧照会（サービス契約番号））<br> <br> サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングします。 <br> |
| 51 | `editInMsg_EKK0351A010CBS` | private | 上りマッピング（オプションサービス契約一意照会）<br> <br> サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングします。 <br> |
| 52 | `editInMsg_EKK0351B002CBS` | private | 上りマッピング（オプションサービス契約一覧照会（サービス契約番号））<br> <br> サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングします。 <br> |
| 53 | `editInMsg_EKK0351B003CBS` | private | 上りマッピング（オプションサービス契約履歴一覧照会）<br> <br> サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングします。 <br> |
| 54 | `editInMsg_EKK0361A010CBS` | private | 上りマッピング（オプションサービス契約＜ISP＞一意照会）<br> <br> サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングします。 <br> |
| 55 | `editInMsg_EKK0401B001CBS` | private | 上りマッピング（サブオプションサービス契約一覧照会）<br> <br> サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングします。 <br> |
| 56 | `editInMsg_EKK1081C011CBS` | private | 上りマッピング（同一処理番号採番）<br> <br> サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングします。 <br> |
| 57 | `editInMsg_EKK1081D010CBS` | private | 上りマッピング（オーダ発行条件登録）<br> <br> サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングします。 <br> |
| 58 | `editInMsg_EKK1551D010CBS` | private | 上りマッピング（オーダ情報作成ワーク登録）<br> <br> サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングします。 <br> |
| 59 | `editInMsgEDK0301B060` | private | EDK0301B060_返品機器取消一覧照会処理 サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングする |
| 60 | `editInMsgEKK0341B001` | private | EKK0341B001_機器提供サービス契約一覧照会（機器製造番号） サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングする |
| 61 | `editInMsgEKK0341B008` | private | EKK0341B008_機器提供サービス契約一覧照会 サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングする |
| 62 | `editInMsgEKK0341B021` | private | EKK0341B021_機器提供サービス契約一覧照会（予約） サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングする |
| 63 | `editInMsgEKK0341B029` | private | EKK0341B029_機器提供サービス契約一覧照会（機器変更番号） サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングする |
### editResultRP()

---

#### 1. 役割

SC呼出後の共通的なレスポンス編集処理。  
SCからの戻り値（msgList）のテンプレート・リターンコード・ステータスを取得し、BP側のコントロールマップにステータスとメッセージを反映する。  
エラー情報（errList）もコントロールマップに反映し、必要なフィールドがあればユーザデータ情報へセットする。  
本メソッドは呼出元にエラーを返す仕様がない場合の共通化処理として利用される。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["editResultRP（msgList, param, contents）"] --> S1["Step1: CAANMsg[] templates = msgList.get（JCMConstants.TEMPLATE_LIST_KEY）"]
  S1 --> S2["Step2: CAANMsg template = templates[0]"]
  S2 --> S3["Step3: Integer returnCode = msgList.get（JCMConstants.RET_CD_INT_KEY）"]
  S3 --> S4["Step4: int templateStatus = template.getInt（JCMConstants.STATUS_INT_KEY）"]
  S4 --> IF_RETURN{"if returnCode.intValue（） != 0"}
  IF_RETURN -.-> NOTE_IF1["エラー時はtemplateStatus=9000に強制"]
  style NOTE_IF1 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF_RETURN -->|"Yes"| S5["templateStatus = 9000"]
  IF_RETURN -->|"No"| S6["Step5: if JCMAPLConstMgr.getString（'RETURN_MESSAGE_' + templateStatus） == null"]
  S5 --> S6
  S6 --> IF_TMPLSTAT{"if JCMAPLConstMgr.getString（...） == null"}
  IF_TMPLSTAT -.-> NOTE_IF2["templateStatus = ステータスコード（テンプレート）"]
  style NOTE_IF2 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF_TMPLSTAT -->|"Yes"| S7["templateStatus = 0"]
  IF_TMPLSTAT -->|"No"| S8["Step6: bpStatus（BP側ステータス）取得"]
  S7 --> S8
  S8 --> S9["Step7: obj = param.getControlMapData（SCControlMapKeys.RETURN_CODE）"]
  S9 --> IF_OBJ{"if obj == null"}
  IF_OBJ -.-> NOTE_IF3["bpStatus = -1 if null, else Integer.parseInt（obj）"]
  style NOTE_IF3 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF_OBJ -->|"Yes"| S10["bpStatus = -1"]
  IF_OBJ -->|"No"| S11["bpStatus = Integer.parseInt（obj）"]
  S10 --> S12["Step8: templateStatus > bpStatus 判定"]
  S11 --> S12
  S12 --> IF_TMPLBP{"if templateStatus > bpStatus"}
  IF_TMPLBP -.-> NOTE_IF4["templateStatus: サービスコンポーネントのステータス"]
  style NOTE_IF4 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF_TMPLBP -->|"Yes"| S13["param.setControlMapData（）にステータス・メッセージ設定"]
  IF_TMPLBP -->|"No"| S14["Step9: ユーザデータ情報にエラー情報をマッピング（コメントアウト）"]
  S13 --> S14
  S14 --> S15["Step10: エラー情報の取得"]
  S15 --> IF_ERRLIST{"if errList == null"}
  IF_ERRLIST -.-> NOTE_IF5["errList: エラー情報リスト"]
  style NOTE_IF5 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF_ERRLIST -->|"Yes"| S16["errList = new ArrayList<>（）"]
  IF_ERRLIST -->|"No"| S17["param.setControlMapData（SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo（msgList, errList））"]
  S16 --> S17
  S17 --> RET["return param"]
```

**処理ステップ詳細:**

1. SCの戻り値からtemplates[0]を取得し、returnCodeとtemplateStatusを取得。
2. returnCodeが0でなければtemplateStatus=9000、テンプレートメッセージがなければtemplateStatus=0。
3. param.getControlMapData(SCControlMapKeys.RETURN_CODE)でBP側のステータス取得、なければbpStatus=-1。
4. templateStatus > bpStatusならコントロールマップにステータス・メッセージをセット。
5. エラー情報（errList）を取得し、なければ初期化。TemplateErrorUtil.getErrorInfoでコントロールマップにエラー情報を再設定。
6. paramを返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                      |
| --- | ------------ | -------------------------- | --------------------------------------------- |
| 1   | msgList      | Map<?, ?>                  | SC呼出の戻り値（テンプレート・コード含む）    |
| 2   | param        | IRequestParameterReadWrite | 業務パラメータ（ユーザデータ含む）            |
| 3   | contents     | Object[][]                 | テンプレートマッピング用項目配列              |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC / CBS | SCコード | エンティティ / DB | 操作説明 |
| ---- | -------- | -------- | ----------------- | -------- |
| - | (なし — 直接DB/SC呼び出しなし) | - | - | サブメソッド経由で処理 |
#### 5. 依存トレース (Dependency Trace)

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → editResultRP` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → editResultRP` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → editResultRP` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → editResultRP` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → editResultRP` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → editResultRP` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → editResultRP` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → editResultRP` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → editResultRP` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → editResultRP` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `callSvcInter` | private | サービスインターフェース呼び出し処理です。 <br> |
### editInMsgCmn()

---

#### 1. 役割

SCインプット共通データ（電文ヘッダおよびコントロールマップから取得した情報）をHashMapとして構築し、SC呼出時の入力パラメータとして返却する。  
具体的には、電文ID、ユースケースID、オペレーションID、サービス呼び出し区分や、依頼先ホスト名・IPアドレス・画面ID・オペレータIDなどをフィールドにセットし、テンプレート（CAANMsg）もリスト形式で格納する。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["editInMsgCmn（param, template）"] --> S1["Step1: paramMap = new HashMap<String, Object>（）"]
  S1 --> S2["Step2: paramMap.put（JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID（））"]
  S2 --> S3["Step3: paramMap.put（JCMConstants.USECASE_ID_KEY, param.getUsecaseID（））"]
  S3 --> S4["Step4: paramMap.put（JCMConstants.OPERATION_ID_KEY, param.getOperationID（））"]
  S4 --> S5["Step5: paramMap.put（JCMConstants.CALL_TYPE_KEY, param.getCallType（））"]
  S5 --> S6["Step6: paramMap.put（JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData（SCControlMapKeys.REQ_HOSTNAME））"]
  S6 --> S7["Step7: paramMap.put（JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData（SCControlMapKeys.REQ_HOSTIP））"]
  S7 --> S8["Step8: paramMap.put（JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData（SCControlMapKeys.REQ_VIEWID））"]
  S8 --> S9["Step9: paramMap.put（JCMConstants.OPERATOR_ID_KEY, param.getControlMapData（SCControlMapKeys.OPERATOR_ID））"]
  S9 --> S10["Step10: templates[0] = template; paramMap.put（JCMConstants.TEMPLATE_LIST_KEY, templates）"]
  S10 --> RET["return paramMap"]
  S2 -.- NOTE_TID["TRANZACTION_ID_KEY = 電文ID"]
  S3 -.- NOTE_UCID["USECASE_ID_KEY = ユースケースID"]
  S4 -.- NOTE_OPID["OPERATION_ID_KEY = オペレーションID"]
  S5 -.- NOTE_CALLTYPE["CALL_TYPE_KEY = サービス呼び出し区分"]
  S6 -.- NOTE_HOSTNAME["CLIENT_HOST_NAME_KEY = 依頼先ホスト名"]
  S7 -.- NOTE_HOSTIP["CLIENT_IP_ADDRESS_KEY = 依頼元IPアドレス"]
  S8 -.- NOTE_VIEWID["INVOKE_GAMEN_ID_KEY = 依頼元画面ID"]
  S9 -.- NOTE_OPID2["OPERATOR_ID_KEY = オペレータID"]
  S10 -.- NOTE_TMPL["TEMPLATE_LIST_KEY = テンプレートリスト"]
  style NOTE_TID fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE_UCID fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE_OPID fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE_CALLTYPE fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE_HOSTNAME fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE_HOSTIP fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE_VIEWID fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE_OPID2 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE_TMPL fill:#fff,stroke:#333,stroke-dasharray: 5 5
```

**処理ステップ詳細:**

1. paramMap（HashMap<String, Object>）を初期化。
2. param.getTelegramID() をTRANZACTION_ID_KEYにセット。
3. param.getUsecaseID() をUSECASE_ID_KEYにセット。
4. param.getOperationID() をOPERATION_ID_KEYにセット。
5. param.getCallType() をCALL_TYPE_KEYにセット。
6. param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME) をCLIENT_HOST_NAME_KEYにセット。
7. param.getControlMapData(SCControlMapKeys.REQ_HOSTIP) をCLIENT_IP_ADDRESS_KEYにセット。
8. param.getControlMapData(SCControlMapKeys.REQ_VIEWID) をINVOKE_GAMEN_ID_KEYにセット。
9. param.getControlMapData(SCControlMapKeys.OPERATOR_ID) をOPERATOR_ID_KEYにセット。
10. templates[0]にtemplateをセットし、paramMapにTEMPLATE_LIST_KEYで格納。
11. paramMapを返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                     |
| --- | ------------ | -------------------------- | -------------------------------------------- |
| 1   | param        | IRequestParameterReadOnly  | 業務パラメータ（コントロールマップ含む）     |
| 2   | template     | CAANMsg                    | SC入力メッセージテンプレート                  |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC / CBS | SCコード | エンティティ / DB | 操作説明 |
| ---- | -------- | -------- | ----------------- | -------- |
| - | (なし — 直接DB/SC呼び出しなし) | - | - | サブメソッド経由で処理 |
#### 5. 依存トレース (Dependency Trace)

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → editInMsgCmn` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → editInMsgCmn` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → editInMsgCmn` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → editInMsgCmn` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → editInMsgCmn` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → editInMsgCmn` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → editInMsgCmn` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → editInMsgCmn` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → editInMsgCmn` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → editInMsgCmn` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `callEKK0081A010SC` | private | サービス契約一意照会SIFを呼び出し |
| 2 | `callEKK0081B004SC` | private | EKK0081B004 サービス契約一覧照会（SYSID）S-IFを実行します |
| 3 | `callEKK0091A010_SC` | private | サービス契約一意照会SIFを呼び出し |
| 4 | `callEKK0161A010SC` | private | サービス契約内訳一意照会SIFを呼び出し |
| 5 | `callEKK0161B003SC` | private | サービス契約内訳一覧照会（SYSID）SIFを呼び出し |
| 6 | `callEKK0161B004SC` | private | サービス契約内訳一覧照会（サービス契約番号）SIFを呼び出し |
| 7 | `callEKK0161B008SC` | private | 番ポ申込種別照会SIFを呼び出し |
| 8 | `callEKK0161B011SC` | private | サービス契約内訳履歴一覧照会SIFを呼び出し |
| 9 | `callEKK0191A010SC` | protected | サービス契約内訳＜eo光電話＞一意照会SIFを呼び出し |
| 10 | `callEKK0191B001_2SC` | private | サービス契約内訳<eo光電話>一覧照会（サービス契約番号）SIFを呼び出し |
| 11 | `callEKK0191B001SC` | private | サービス契約内訳<eo光電話>一覧照会（サービス契約番号）SIFを呼び出し |
| 12 | `callEKK0191B502SC` | private | - |
| 13 | `callEKK0251B001SC` | private | サービス契約回線内訳一覧照会（サービス契約番号）SIFを呼び出し |
| 14 | `callEKK0251B003SC` | private | EKK0251B003_サービス契約回線内訳一覧照会（現在利用中）SIFを呼び出し |
| 15 | `callEKK0251B003SCCAAMsg` | private | サービス契約回線内訳（現在利用中）SIFを呼び出し |
| 16 | `callEKK0341A010SC` | private | 機器提供サービス契約一意照会SIFを呼び出し |
| 17 | `callEKK0341B002SC` | private | 機器提供サービス契約一覧照会（サービス契約番号）SIFを呼び出し |
| 18 | `callEKK0341B008_02SC` | private | 機器提供サービス契約一覧照会SIFを呼び出し（交換中レコード専用） |
| 19 | `callEKK0341B008SC` | private | 機器提供サービス契約一覧照会SIFを呼び出し 2012-11/21　ロット２IT1-2012-0002131（EKK0341B022 に差替え） |
| 20 | `callEKK0341B504SC` | private | 機器提供サービス契約一覧照会（サービス契約回線内訳）SIFを呼び出し |
| 21 | `callEKK0351A010SC` | private | オプションサービス契約一意照会SIFを呼び出し |
| 22 | `callEKK0351B002SC` | private | オプションサービス契約一覧照会（サービス契約番号）SIFを呼び出し |
| 23 | `callEKK0351B010SC` | private | オプションサービス契約一覧照会（サービス契約番号）SIFを呼び出し |
| 24 | `callEKK0361A010SC` | private | オプションサービス契約＜ISP＞一意照会SIFを呼び出し |
| 25 | `callEKK0401A010SC` | private | サブオプションサービス契約一意照会SIFを呼び出し |
| 26 | `callEKK0411A010SC` | private | サブオプションサービス契約＜ISP＞一意照会SIFを呼び出し |
| 27 | `callEKK0791A010SC` | private | EKK0791A010 料金コース一意照会を実行します<br> <br> |
| 28 | `callEKK0881A010_SC` | private | 回線使用契約一意照会SIFを呼び出し |
| 29 | `callEKK0891A010_SC` | private | 提供方式契約一意照会を呼び出す。 |
| 30 | `callEKK1041A010SC` | private | オーダ設定一意照会SIFを呼び出し |
| 31 | `callEKK1041B001SC` | private | EKK1041B001 オーダ設定一覧照会を実行します |
| 32 | `callEKK1081B001SC` | private | EKK1081B001 オーダ発行条件一覧照会を実行します |
| 33 | `callEKK1081C011SC` | private | 同一処理番号取得SIFを呼び出し |
| 34 | `callEKK1081E010SC` | private | EKK1081E010 オーダ発行条件論理削除S-IFを実行します。 <br> |
| 35 | `callEKK1681B001SC` | private | 異動予約一覧照会<br> <br> |
| 36 | `callEKK2091A010SC` | private | 住所変更一意照会を呼び出す |
| 37 | `callEKK2101B001SC` | private | 住所変更明細一覧照会 |
| 38 | `callEKK2101B002SC` | private | 住所変更明細一覧照会（変更前識別番号）の取得 |
| 39 | `callEKK2811A010SC` | private | 機器オプションサービス契約一意照会SIFを呼び出し |
| 40 | `callEKK2811B010SC` | private | 機器オプションサービス契約一覧照会SIFを呼び出し |
| 41 | `callEKU0011A010SC` | private | 工事案件一意照会 |
| 42 | `callEKU0081B010SC` | private | サービス契約＿工事案件一覧照会 |
| 43 | `callETU0011B010SC` | private | 番ポ工事一覧照会SIFを呼び出し |
| 44 | `callEZM0121A010SC` | private | 電話番号一意照会SIFを呼び出し |
| 45 | `callEZM0321A010_SC` | private | 業務パラメータ一意照会検索を呼び出す。 |
| 46 | `callEZM0411A010SC` | private | 宅内機器型式一意照会SIFを呼び出し |
---

---

## 📋 全分岐詳細 (deterministic per-branch table)

> 以下のテーブルはソースコードから deterministic に生成されたものです。全条件分岐を網羅します。

### 📞 Screen/Batch 呼び出し元 (External Entry Points)

> このクラスを呼び出すScreen/Batchの一覧です（クラスレベルの呼び出し元）。
> **「呼出チェーン」列**: CC直接エントリメソッド → IntraClass経由 → 本チャンクの対象メソッド（**太字**）の実際の呼出パス。
> ※ 例: `CCエントリメソッド → 中間メソッド → **対象メソッド**` — 左端がCC入口、太字が本チャンクの対象メソッド。
> **「種別」列**: BPCheck＝業務確認チェック, Batch＝バッチ処理, Operation＝オペレーション, CC＝制御クラス。

| # | Screen/Batch | 種別 | 呼び出しクラス | 呼び出しメソッド | 呼出チェーン（CC入口 → IntraClass → 対象） |
|---|---|---|---|---|---|
| 1 | `KKSV0004` | BPCheck | `KKSV0004OPBPCheck` | `invokeCheck` | `getInvokeCBS` |
| 2 | `KKSV0008` | BPCheck | `KKSV0008OPBPCheck` | `invokeCheck` | `getInvokeCBS` |
| 3 | `KKSV0009` | BPCheck | `KKSV0009OPBPCheck` | `invokeCheck` | `getInvokeCBS` |
| 4 | `KKSV0031` | BPCheck | `KKSV0031OPBPCheck` | `invokeCheck` | `getInvokeCBS` |
| 5 | `KKSV0073` | BPCheck | `KKSV0073OPBPCheck` | `invokeCheck` | `getInvokeCBS` |
| 6 | `KKSV0136` | BPCheck | `KKSV0136OPBPCheck` | `invokeCheck` | `getInvokeCBS` |
| 7 | `KKSV0162` | BPCheck | `KKSV0162OPBPCheck` | `invokeCheck` | `getInvokeCBS` |
| 8 | `KKSV0428` | BPCheck | `KKSV0428OPBPCheck` | `invokeCheck` | `getInvokeCBS` |
| 9 | `KKSV0429` | BPCheck | `KKSV0429OPBPCheck` | `invokeCheck` | `getInvokeCBS` |
| 10 | `KKSV0430` | BPCheck | `KKSV0430OPBPCheck` | `invokeCheck` | `getInvokeCBS` |

## ③.6 制御フロー分岐 (Control Flow Branching)

### `editErrorInfo_EKK0351B003CBS()` (L36058) — 9 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (returnCode != 0) | - | - | - | L36067 |
| 2 | 🔀 IF | D0 | (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null) | - | - | - | L36071 |
| 3 | 🔀 IF | D0 | (obj == null) | - | - | - | L36078 |
| 4 | 🔀 ELSE | D0 | (else) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L36083 |
| 5 | 🔀 IF | D0 | (templateStatus > bpStatus) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L36087 |
| 6 | 🔀 IF | D0 | (inMap == null) | オプションサービス契約履歴一覧照会マップ.サービス契約番号 → ＫＥＹ＿サービス契約番号 のエラー情報返却 | - | - | L36100 |
| 7 | 🔀 IF | D0 | (!template.isNull(EKK0351B003CBSMsg.KEY_SVC_KEI_NO_ERR)) | - | - | - | L36107 |
| 8 | · 🔀 IF | D1 | (!inMap.containsKey("svc_kei_no_err")) | - | - | - | L36109 |
| 9 | ↩️ RETURN | D0 | param | - | - | - | L36115 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["editErrorInfo_EKK0351B003CBS()"] --> CF0{"制御フロー分岐"}
  B0["IF: （returnCode != 0）"]
  CF0 -->|"L36067"| B0
  B1["IF: （JCMAPLConstMgr.getString（'RETURN_MESSAG…"]
  CF0 -->|"L36071"| B1
  B2["IF: （obj == null）"]
  CF0 -->|"L36078"| B2
  B3["ELSE"]
  CF0 -->|"L36083"| B3
  B4["IF: （templateStatus > bpStatus）"]
  CF0 -->|"L36087"| B4
  B5["IF: （inMap == null）"]
  CF0 -->|"L36100"| B5
  subgraph SG6["IF: （!template.isNull（EKK0351B003CBSMsg.KEY_…"]
    direction TB
    C6_0["IF: （!inMap.containsKey（'svc_kei_no_err…"]
  end
  CF0 -->|"L36107"| SG6
  B7["RETURN: param"]
  CF0 -->|"L36115"| B7
```

### `editResultRP()` (L31278) — 7 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (returnCode.intValue() != 0) | - | - | - | L31296 |
| 2 | 🔀 IF | D0 | (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null) | - | - | - | L31300 |
| 3 | 🔀 IF | D0 | (obj == null) | - | - | - | L31308 |
| 4 | 🔀 ELSE | D0 | (else) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L31313 |
| 5 | 🔀 IF | D0 | (templateStatus > bpStatus) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L31317 |
| 6 | 🔀 IF | D0 | (errList == null) | コントロールマップに設定 | - | - | L31350 |
| 7 | ↩️ RETURN | D0 | param | - | - | - | L31358 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["editResultRP()"] --> CF0{"制御フロー分岐"}
  B0["IF: （returnCode.intValue（） != 0）"]
  CF0 -->|"L31296"| B0
  B1["IF: （JCMAPLConstMgr.getString（'RETURN_MESSAG…"]
  CF0 -->|"L31300"| B1
  B2["IF: （obj == null）"]
  CF0 -->|"L31308"| B2
  B3["ELSE"]
  CF0 -->|"L31313"| B3
  B4["IF: （templateStatus > bpStatus）"]
  CF0 -->|"L31317"| B4
  B5["IF: （errList == null）"]
  CF0 -->|"L31350"| B5
  B6["RETURN: param"]
  CF0 -->|"L31358"| B6
```

### `editResultRP_EKK0081B004SC()` (L36471) — 10 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (returnCode != 0) | ステータスの検査 | - | - | L36481 |
| 2 | 🔀 IF | D0 | (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null) | - | - | - | L36484 |
| 3 | 🔀 IF | D0 | (obj == null) | - | - | - | L36490 |
| 4 | 🔀 ELSE | D0 | (else) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L36492 |
| 5 | 🔀 IF | D0 | (templateStatus > bpStatus) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L36496 |
| 6 | 🔀 IF | D0 | (errList == null) | エラー情報のマップを取得 | - | - | L36506 |
| 7 | 🔀 IF | D0 | (0 != returnCode ｜｜ 0 != templateStatus) | 必要なら例外発生 | - | - | L36513 |
| 8 | · ⚠️ THROW | D1 | new SCCallException("サービスインターフェイス呼出しでエラー発生", returnCode.toString(), Integer.valueOf(templateStatus)) | 照会結果を格納 | - | - | L36515 |
| 9 | 🔁 FOR | D0 | (for-loop) | 照会結果を格納 | - | - | L36522 |
| 10 | ↩️ RETURN | D0 | retList | - | - | - | L36527 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["editResultRP_EKK0081B004SC()"] --> CF0{"制御フロー分岐"}
  B0["IF: （returnCode != 0）"]
  CF0 -->|"L36481"| B0
  B1["IF: （JCMAPLConstMgr.getString（'RETURN_MESSAG…"]
  CF0 -->|"L36484"| B1
  B2["IF: （obj == null）"]
  CF0 -->|"L36490"| B2
  B3["ELSE"]
  CF0 -->|"L36492"| B3
  B4["IF: （templateStatus > bpStatus）"]
  CF0 -->|"L36496"| B4
  B5["IF: （errList == null）"]
  CF0 -->|"L36506"| B5
  subgraph SG6["IF: （0 != returnCode || 0 != templateStatus）"]
    direction TB
    C6_0["THROW: new SCCallException（'サービスインターフ…"]
  end
  CF0 -->|"L36513"| SG6
  B7["FOR: …"]
  CF0 -->|"L36522"| B7
  B8["RETURN: retList"]
  CF0 -->|"L36527"| B8
```

### `editResultRP_EKK0351B003CBS()` (L35945) — 15 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (dataMap == null) | - | EKK0351B003CBSMSG1LIST=EKK0351B003CBSMsg1List | - | L35965 |
| 2 | 🔀 IF | D0 | (dataList == null) | - | - | - | L35973 |
| 3 | 🔀 IF | D0 | (templateArray != null) | - | - | `editErrorInfo_EKK0351B003CBS()` | L35978 |
| 4 | · 🔁 FOR | D1 | (for-loop) | - | - | `editErrorInfo_EKK0351B003CBS()` | L35980 |
| 5 | ·· 🔀 IF | D2 | (i >= dataList.size()) | オプションサービス契約履歴一覧照会マップ.オプションサービス契約履歴一覧照会明細.オプションサービス契約番号 | - | - | L35983 |
| 6 | ·· 🔀 IF | D2 | (childTemplate.isNull(EKK0351B003CBSMsg1List.KK0351_OP_SVC_KEI_NO)) | オプションサービス契約履歴一覧照会マップ.オプションサービス契約履歴一覧照会明細.世代登録年月日時分秒 | - | - | L35992 |
| 7 | ·· 🔀 ELSE | D2 | (else) | オプションサービス契約履歴一覧照会マップ.オプションサービス契約履歴一覧照会明細.世代登録年月日時分秒 | - | - | L35997 |
| 8 | ·· 🔀 IF | D2 | (childTemplate.isNull(EKK0351B003CBSMsg1List.KK0351_GENE_ADD_DTM)) | オプションサービス契約履歴一覧照会マップ.オプションサービス契約履歴一覧照会明細.異動区分 | - | - | L36003 |
| 9 | ·· 🔀 ELSE | D2 | (else) | オプションサービス契約履歴一覧照会マップ.オプションサービス契約履歴一覧照会明細.異動区分 | - | - | L36008 |
| 10 | ·· 🔀 IF | D2 | (childTemplate.isNull(EKK0351B003CBSMsg1List.IDO_DIV)) | - | IDO_DIV=ido_div | - | L36014 |
| 11 | ·· 🔀 ELSE | D2 | (else) | エラー情報の設定 | - | `editErrorInfo_EKK0351B003CBS()` | L36019 |
| 12 | 🔀 IF | D0 | (errList == null) | コントロールマップに設定 | - | - | L36031 |
| 13 | 🔀 IF | D0 | (errList != null && !errList.isEmpty()) | - | - | - | L36039 |
| 14 | · ⚠️ THROW | D1 | new CCException("", new SCCallException("", ((Integer)return_code).toString(), templates[0].getInt(EKK0351B003CBSMsg.STATUS))) | - | - | - | L36041 |
| 15 | ↩️ RETURN | D0 | param | - | - | - | L36044 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["editResultRP_EKK0351B003CBS()"] --> CF0{"制御フロー分岐"}
  B0["IF: （dataMap == null）"]
  CF0 -->|"L35965"| B0
  B1["IF: （dataList == null）"]
  CF0 -->|"L35973"| B1
  subgraph SG2["IF: （templateArray != null）"]
    direction TB
    C2_0["FOR: …"]
  end
  CF0 -->|"L35978"| SG2
  B3["IF: （errList == null）"]
  CF0 -->|"L36031"| B3
  subgraph SG4["IF: （errList != null && !errList.isEmpty（））"]
    direction TB
    C4_0["THROW: new CCException（'', new SCCall…"]
  end
  CF0 -->|"L36039"| SG4
  B5["RETURN: param"]
  CF0 -->|"L36044"| B5
```

### `editResultRP_EKK0791A010SC()` (L35512) — 11 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (returnCode != 0) | ステータスの検査 | - | - | L35522 |
| 2 | 🔀 IF | D0 | (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null) | - | - | - | L35525 |
| 3 | 🔀 IF | D0 | (obj == null) | - | - | - | L35531 |
| 4 | 🔀 ELSE | D0 | (else) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L35533 |
| 5 | 🔀 IF | D0 | (templateStatus > bpStatus) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L35537 |
| 6 | 🔀 IF | D0 | (errList == null) | エラー情報のマップを取得 | - | - | L35547 |
| 7 | 🔀 IF | D0 | (0 != returnCode ｜｜ 0 != templateStatus) | 必要なら例外発生 | - | - | L35554 |
| 8 | · ⚠️ THROW | D1 | new SCCallException("サービスインターフェイス呼出しでエラー発生", returnCode.toString(), Integer.valueOf(templateStatus)) | 照会結果を格納 | - | - | L35556 |
| 9 | 🔁 FOR | D0 | (for-loop) | - | - | - | L35565 |
| 10 | · 🔁 FOR | D1 | (for-loop) | - | - | - | L35568 |
| 11 | ↩️ RETURN | D0 | retList | - | - | - | L35575 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["editResultRP_EKK0791A010SC()"] --> CF0{"制御フロー分岐"}
  B0["IF: （returnCode != 0）"]
  CF0 -->|"L35522"| B0
  B1["IF: （JCMAPLConstMgr.getString（'RETURN_MESSAG…"]
  CF0 -->|"L35525"| B1
  B2["IF: （obj == null）"]
  CF0 -->|"L35531"| B2
  B3["ELSE"]
  CF0 -->|"L35533"| B3
  B4["IF: （templateStatus > bpStatus）"]
  CF0 -->|"L35537"| B4
  B5["IF: （errList == null）"]
  CF0 -->|"L35547"| B5
  subgraph SG6["IF: （0 != returnCode || 0 != templateStatus）"]
    direction TB
    C6_0["THROW: new SCCallException（'サービスインターフ…"]
  end
  CF0 -->|"L35554"| SG6
  subgraph SG7["FOR: …"]
    direction TB
    C7_0["FOR: …"]
  end
  CF0 -->|"L35565"| SG7
  B8["RETURN: retList"]
  CF0 -->|"L35575"| B8
```

### `editResultRP_EKK1081B001SC()` (L36319) — 10 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (returnCode != 0) | ステータスの検査 | - | - | L36329 |
| 2 | 🔀 IF | D0 | (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null) | - | - | - | L36332 |
| 3 | 🔀 IF | D0 | (obj == null) | - | - | - | L36338 |
| 4 | 🔀 ELSE | D0 | (else) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L36340 |
| 5 | 🔀 IF | D0 | (templateStatus > bpStatus) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L36344 |
| 6 | 🔀 IF | D0 | (errList == null) | エラー情報のマップを取得 | - | - | L36354 |
| 7 | 🔀 IF | D0 | (0 != returnCode ｜｜ 0 != templateStatus) | 必要なら例外発生 | - | - | L36361 |
| 8 | · ⚠️ THROW | D1 | new SCCallException("サービスインターフェイス呼出しでエラー発生", returnCode.toString(), Integer.valueOf(templateStatus)) | 照会結果を格納 | - | - | L36363 |
| 9 | 🔁 FOR | D0 | (for-loop) | 照会結果を格納 | - | - | L36370 |
| 10 | ↩️ RETURN | D0 | retList | - | - | - | L36375 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["editResultRP_EKK1081B001SC()"] --> CF0{"制御フロー分岐"}
  B0["IF: （returnCode != 0）"]
  CF0 -->|"L36329"| B0
  B1["IF: （JCMAPLConstMgr.getString（'RETURN_MESSAG…"]
  CF0 -->|"L36332"| B1
  B2["IF: （obj == null）"]
  CF0 -->|"L36338"| B2
  B3["ELSE"]
  CF0 -->|"L36340"| B3
  B4["IF: （templateStatus > bpStatus）"]
  CF0 -->|"L36344"| B4
  B5["IF: （errList == null）"]
  CF0 -->|"L36354"| B5
  subgraph SG6["IF: （0 != returnCode || 0 != templateStatus）"]
    direction TB
    C6_0["THROW: new SCCallException（'サービスインターフ…"]
  end
  CF0 -->|"L36361"| SG6
  B7["FOR: …"]
  CF0 -->|"L36370"| B7
  B8["RETURN: retList"]
  CF0 -->|"L36375"| B8
```

> **制御フロー合計**: 6 methods, 62 branches
