# Business Logic — FUW00156SF02DBean.loadModelData() [113 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.FUW00156SF.FUW00156SF02DBean` |
| Layer | Webview (Web Model Bean / View Data Access) |
| Module | `FUW00156SF` (Package: `eo.web.webview.FUW00156SF`) |

## 1. Role

### FUW00156SF02DBean.loadModelData()

This method is the central data accessor for the FUW00156SF webview bean, implementing a string-keyed dispatch (routing) pattern that maps human-readable Japanese field labels to specific getter methods. It enables screens to retrieve any property of a questionnaire-based web page through a single unified method call, by passing a `key` that identifies the business field and a `subkey` that identifies the attribute (value, enabled state, or display state) of that field.

The method supports six distinct data categories — all question-related fields in a telecom service order page: questionnaire content (アンケート内容), questionnaire check type (アンケートチェック種類), questionnaire number (アンケート番号), display order (表示順序), radio button selection value (ラジオボタン選択値), and a dynamic questionnaire answer list (アンケート回答リスト). Each category except the answer list follows the same three-attribute pattern: value, enable (boolean visibility flag), and state (validation error state string).

The answer list branch implements a delegator pattern: it parses a nested path like `"プランリスト/0/プラン名"` (plan list / index / plan name) from the remaining key after the initial slash, converts the index to an integer, bounds-checks it against the list size, and then delegates to the individual list item's own `loadModelData` method. This allows screens to access nested properties of arbitrary-length questionnaire answer rows without knowing the list size or specific field names at compile time.

In the larger system, this method serves as the view-model bridge for the FUW00156SF screen (a questionnaire/answer input page for telecom service orders). Callers use it to dynamically fetch field values, enable/disable flags, and validation states — enabling templated screen rendering where field metadata is resolved at runtime rather than hardcoded.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["loadModelData key, subkey"])

    SUB_CHECK["Check key or subkey is null"]
    SUB_RET["Return null"]

    SEP["separaterPoint = key.indexOf"]

    K1["Branch 1: key = アンケート内容 question content"]
    K1_SUB["Subkey equals value"]
    K1_VAL["Call getEnquete_content_value"]
    K1_EN["Subkey equals enable"]
    K1_ENB["Call getEnquete_content_enabled"]
    K1_ST["Subkey equals state"]
    K1_STB["Call getEnquete_content_state"]

    K2["Branch 2: key = アンケートチェック種類 question check type"]
    K2_SUB["Subkey equals value"]
    K2_VAL["Call getEnquete_chk_sbt_value"]
    K2_EN["Subkey equals enable"]
    K2_ENB["Call getEnquete_chk_sbt_enabled"]
    K2_ST["Subkey equals state"]
    K2_STB["Call getEnquete_chk_sbt_state"]

    K3["Branch 3: key = アンケート番号 question number"]
    K3_SUB["Subkey equals value"]
    K3_VAL["Call getEnquete_content_no_value"]
    K3_EN["Subkey equals enable"]
    K3_ENB["Call getEnquete_content_no_enabled"]
    K3_ST["Subkey equals state"]
    K3_STB["Call getEnquete_content_no_state"]

    K4["Branch 4: key = 表示順序 display order"]
    K4_SUB["Subkey equals value"]
    K4_VAL["Call getDsp_jun_content_value"]
    K4_EN["Subkey equals enable"]
    K4_ENB["Call getDsp_jun_content_enabled"]
    K4_ST["Subkey equals state"]
    K4_STB["Call getDsp_jun_content_state"]

    K5["Branch 5: key = ラジオボタン選択値 radio button value"]
    K5_SUB["Subkey equals value"]
    K5_VAL["Call getRadio_value_value"]
    K5_EN["Subkey equals enable"]
    K5_ENB["Call getRadio_value_enabled"]
    K5_ST["Subkey equals state"]
    K5_STB["Call getRadio_value_state"]

    K6["Branch 6: key = アンケート回答リスト question answer list"]

    KR["keyRemain = key.substring after first slash"]

    KWILDCARD["keyRemain equals star wildcard"]
    KWILD_RET["Return list size as Integer"]

    KSEP["separaterPoint = keyRemain.indexOf slash"]

    KSEP_CHECK["separaterPoint is zero or negative"]
    KSEP_RET["Return null"]

    KIDX_ASSIGN["key = keyRemain.substring before index"]

    KPARSING["Parse key as Integer tmpIndexInt"]

    KPARSING_ERR["Catch NumberFormatException"]
    KPARSING_ERR_RET["Return null"]

    KNONE["tmpIndexInt is null"]
    KNONE_RET["Return null"]

    KBOUND["Index out of list range"]
    KBOUND_RET["Return null"]

    KKEY_SET["key = keyRemain.substring after index"]

    KDELEGATE["Delegate to enquete_answer_list_item loadModelData"]

    UNKNOWN["No matching key"]
    UNKNOWN_RET["Return null"]

    END_NODE(["Return next"])

    START --> SUB_CHECK
    SUB_CHECK -->|"true"| SUB_RET
    SUB_CHECK -->|"false"| SEP

    SEP --> K1
    K1 --> K1_SUB
    K1_SUB -->|"true"| K1_VAL
    K1_SUB -->|"false"| K1_EN
    K1_EN -->|"true"| K1_ENB
    K1_EN -->|"false"| K1_ST
    K1_ST -->|"true"| K1_STB
    K1_ST -->|"false"| K2

    K2 --> K2_SUB
    K2_SUB -->|"true"| K2_VAL
    K2_SUB -->|"false"| K2_EN
    K2_EN -->|"true"| K2_ENB
    K2_EN -->|"false"| K2_ST
    K2_ST -->|"true"| K2_STB
    K2_ST -->|"false"| K3

    K3 --> K3_SUB
    K3_SUB -->|"true"| K3_VAL
    K3_SUB -->|"false"| K3_EN
    K3_EN -->|"true"| K3_ENB
    K3_EN -->|"false"| K3_ST
    K3_ST -->|"true"| K3_STB
    K3_ST -->|"false"| K4

    K4 --> K4_SUB
    K4_SUB -->|"true"| K4_VAL
    K4_SUB -->|"false"| K4_EN
    K4_EN -->|"true"| K4_ENB
    K4_EN -->|"false"| K4_ST
    K4_ST -->|"true"| K4_STB
    K4_ST -->|"false"| K5

    K5 --> K5_SUB
    K5_SUB -->|"true"| K5_VAL
    K5_SUB -->|"false"| K5_EN
    K5_EN -->|"true"| K5_ENB
    K5_EN -->|"false"| K5_ST
    K5_ST -->|"true"| K5_STB
    K5_ST -->|"false"| K6

    K6 --> KR
    KR --> KWILDCARD
    KWILDCARD -->|"true"| KWILD_RET
    KWILDCARD -->|"false"| KSEP
    KSEP --> KSEP_CHECK
    KSEP_CHECK -->|"true"| KSEP_RET
    KSEP_CHECK -->|"false"| KIDX_ASSIGN
    KIDX_ASSIGN --> KPARSING
    KPARSING --> KPARSING_ERR
    KPARSING_ERR --> KPARSING_ERR_RET
    KPARSING -->|"catch"| KPARSING_ERR
    KPARSING --> KNONE
    KNONE -->|"true"| KNONE_RET
    KNONE -->|"false"| KBOUND
    KBOUND -->|"true"| KBOUND_RET
    KBOUND -->|"false"| KKEY_SET
    KKEY_SET --> KDELEGATE

    K1_STB --> UNKNOWN
    K2_STB --> UNKNOWN
    K3_STB --> UNKNOWN
    K4_STB --> UNKNOWN
    K5_STB --> UNKNOWN
    UNKNOWN --> UNKNOWN_RET

    SUB_RET --> END_NODE
    K1_VAL --> END_NODE
    K1_ENB --> END_NODE
    K1_STB --> END_NODE
    K2_VAL --> END_NODE
    K2_ENB --> END_NODE
    K2_STB --> END_NODE
    K3_VAL --> END_NODE
    K3_ENB --> END_NODE
    K3_STB --> END_NODE
    K4_VAL --> END_NODE
    K4_ENB --> END_NODE
    K4_STB --> END_NODE
    K5_VAL --> END_NODE
    K5_ENB --> END_NODE
    K5_STB --> END_NODE
    KWILD_RET --> END_NODE
    KSEP_RET --> END_NODE
    KPARSING_ERR_RET --> END_NODE
    KNONE_RET --> END_NODE
    KBOUND_RET --> END_NODE
    KDELEGATE --> END_NODE
    UNKNOWN_RET --> END_NODE
```

**Branch summary:**

| Branch | Condition | Business Action |
|--------|-----------|-----------------|
| Guard | `key == null || subkey == null` | Return null (no field / no attribute requested) |
| 1 | key = "アンケート内容" (questionnaire content) | Dispatch to enquete_content value/enable/state getters |
| 2 | key = "アンケートチェック種類" (questionnaire check type) | Dispatch to enquete_chk_sbt value/enable/state getters |
| 3 | key = "アンケート番号" (questionnaire number) | Dispatch to enquete_content_no value/enable/state getters |
| 4 | key = "表示順序（アンケート内容）" (display order) | Dispatch to dsp_jun_content value/enable/state getters |
| 5 | key = "ラジオボタン選択値" (radio button selection value) | Dispatch to radio_value value/enable/state getters |
| 6 | key = "アンケート回答リスト" (questionnaire answer list) | Parse nested path, bounds-check index, delegate to list item bean |
| Fallback | No branch matched | Return null |

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `key` | `String` | The business field identifier (項目名) — a human-readable Japanese label that selects which property category to query. Valid values: "アンケート内容" (questionnaire content text), "アンケートチェック種類" (questionnaire check type), "アンケート番号" (questionnaire number), "表示順序（アンケート内容）" (display order for questionnaire content), "ラジオボタン選択値" (radio button selection value), or "アンケート回答リスト" (questionnaire answer list with a nested path like "プランリスト/0/プラン名"). |
| 2 | `subkey` | `String` | The attribute sub-key (サブキー) that selects which aspect of the field to retrieve — "value" (current field data), "enable" (boolean visibility/enable flag), or "state" (validation error state string). For the answer list branch, this is the property name on the nested list item bean. |

**Instance fields read by this method:**

| Field | Type | Business Description |
|-------|------|---------------------|
| `enquete_answer_list_list` | `X33VDataTypeList` | The dynamic list of questionnaire answer items (rows), each implementing `X33VDataTypeBeanInterface`, used by the answer list branch (Branch 6) |

## 4. CRUD Operations / Called Services

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| - | `JKKAdEditCC.substring` | JKKAdEditCC | - | Calls `substring` in `JKKAdEditCC` (string utility) |
| - | `JKKAdEdit.substring` | JKKAdEdit | - | Calls `substring` in `JKKAdEdit` (string utility) |
| - | `JKKTelnoInfoAddMapperCC.substring` | JKKTelnoInfoAddMapperCC | - | Calls `substring` in `JKKTelnoInfoAddMapperCC` (string utility) |
| - | `JDKejbStringEdit.substring` | JDKejbStringEdit | - | Calls `substring` in `JDKejbStringEdit` (string utility) |
| R | `FUW00156SF02DBean.getEnquete_content_value` | FUW00156SF02DBean | - | Reads questionnaire content value |
| R | `FUW00156SF02DBean.getEnquete_content_enabled` | FUW00156SF02DBean | - | Reads questionnaire content enable flag |
| R | `FUW00156SF02DBean.getEnquete_content_state` | FUW00156SF02DBean | - | Reads questionnaire content validation state |
| R | `FUW00156SF02DBean.getEnquete_chk_sbt_value` | FUW00156SF02DBean | - | Reads questionnaire check type value |
| R | `FUW00156SF02DBean.getEnquete_chk_sbt_enabled` | FUW00156SF02DBean | - | Reads questionnaire check type enable flag |
| R | `FUW00156SF02DBean.getEnquete_chk_sbt_state` | FUW00156SF02DBean | - | Reads questionnaire check type validation state |
| R | `FUW00156SF02DBean.getEnquete_content_no_value` | FUW00156SF02DBean | - | Reads questionnaire number value |
| R | `FUW00156SF02DBean.getEnquete_content_no_enabled` | FUW00156SF02DBean | - | Reads questionnaire number enable flag |
| R | `FUW00156SF02DBean.getEnquete_content_no_state` | FUW00156SF02DBean | - | Reads questionnaire number validation state |
| R | `FUW00156SF02DBean.getDsp_jun_content_value` | FUW00156SF02DBean | - | Reads display order (questionnaire content) value |
| R | `FUW00156SF02DBean.getDsp_jun_content_enabled` | FUW00156SF02DBean | - | Reads display order enable flag |
| R | `FUW00156SF02DBean.getDsp_jun_content_state` | FUW00156SF02DBean | - | Reads display order validation state |
| R | `FUW00156SF02DBean.getRadio_value_value` | FUW00156SF02DBean | - | Reads radio button selection value |
| R | `FUW00156SF02DBean.getRadio_value_enabled` | FUW00156SF02DBean | - | Reads radio button selection enable flag |
| R | `FUW00156SF02DBean.getRadio_value_state` | FUW00156SF02DBean | - | Reads radio button selection validation state |
| R | `FUW00156SF02DBean.loadModelData` | FUW00156SF02DBean | - | Recursively delegates to list item bean's loadModelData |

All operations are Read (R) — this method never writes data. It is a pure accessor/dispatcher. The substring calls are inherited utility invocations via the base class `X31CBaseBean` and do not represent direct calls in this method's body.

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Method: `FUW00156SF02DBean.getJsflist_typelist_enquete_answer_list()` | `getJsflist_typelist_enquete_answer_list` -> `loadModelData("アンケート回答リスト", "value")` | `loadModelData [R] enquete_answer_list_list items` |
| 2 | Method: `FUW00156SF02DBean.loadModelData()` (overloaded) | `loadModelData()` (no-arg) -> `loadModelData(key, subkey)` with string key/subkey | `loadModelData [R] various property getters` |

**Callers detail:**

1. **`getJsflist_typelist_enquete_answer_list()`** — An internal getter that iterates the answer list and calls `loadModelData` with key "アンケート回答リスト" (questionnaire answer list) and subkey "value" to retrieve each row's value, then joins them.
2. **`loadModelData()` (no-arg overload)** — An overloaded variant of this method that delegates to the key/subkey version, passing string-based field identifiers.

Both callers are within the same class `FUW00156SF02DBean` and are used internally by the screen's webview rendering logic. No external screen (KKSV*) or batch entry point was found within 8 hops.

**Terminal operations reached from this method:**

| Terminal | Type | Description |
|----------|------|-------------|
| `enquete_answer_list_list.size()` | R | Access to the dynamic answer list collection |
| `enquete_answer_list_list.get(index)` | R | Access to a specific list item |
| `loadModelData(key, subkey)` on item | R | Recursive delegation to item bean |
| `getEnquete_content_value()` | R | Questionnaire content text value |
| `getEnquete_content_enabled()` | R | Questionnaire content enable flag |
| `getEnquete_content_state()` | R | Questionnaire content validation state |
| `getEnquete_chk_sbt_value()` | R | Questionnaire check type value |
| `getEnquete_chk_sbt_enabled()` | R | Questionnaire check type enable flag |
| `getEnquete_chk_sbt_state()` | R | Questionnaire check type validation state |
| `getEnquete_content_no_value()` | R | Questionnaire number value |
| `getEnquete_content_no_enabled()` | R | Questionnaire number enable flag |
| `getEnquete_content_no_state()` | R | Questionnaire number validation state |
| `getDsp_jun_content_value()` | R | Display order value |
| `getDsp_jun_content_enabled()` | R | Display order enable flag |
| `getDsp_jun_content_state()` | R | Display order validation state |
| `getRadio_value_value()` | R | Radio button selection value |
| `getRadio_value_enabled()` | R | Radio button selection enable flag |
| `getRadio_value_state()` | R | Radio button selection validation state |

## 6. Per-Branch Detail Blocks

**Block 1** — [IF] `key == null || subkey == null` (L279)
> Guard clause: if either the field name or subkey is null, return null immediately. This prevents null pointer exceptions on downstream operations and handles callers that do not supply complete parameters.

| # | Type | Code |
|---|------|------|
| 1 | SET | `separaterPoint = key.indexOf("/")` // Find first slash position in key (L282) [-> `"/"`] |
| 2 | RETURN | `return null;` // Early exit if parameters are incomplete (L281) |

**Block 2** — [IF] `key.equals("アンケート内容")` (questionnaire content) (L285)

> This block handles the questionnaire content field (項目ID: enquete_content). It dispatches to the appropriate getter based on the subkey.

**Block 2.1** — [IF] `subkey.equalsIgnoreCase("value")` (L286)
> Returns the actual text/value of the questionnaire content field.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getEnquete_content_value();` // Get questionnaire content value |

**Block 2.2** — [ELSE-IF] `subkey.equalsIgnoreCase("enable")` (L289)
> (サブキーが"enable"の場合、enquete_content_enableのgetterの戻り値を返す。 / When subkey is "enable", returns the getter value of enquete_content_enable.)
> Returns the boolean enable/visibility flag for the questionnaire content field.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getEnquete_content_enabled();` // Get questionnaire content enable flag |

**Block 2.3** — [ELSE-IF] `subkey.equalsIgnoreCase("state")` (L292)
> (サブキーが"state"の場合、ステータスを返す。 / When subkey is "state", returns the status.)
> Returns the validation error state string for the questionnaire content field.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getEnquete_content_state();` // Get questionnaire content state |

**Block 2.4** — [ELSE] (implicit fallback from Block 2 chain)
> If subkey matches none of "value", "enable", "state", fall through to the next branch.

**Block 3** — [ELSE-IF] `key.equals("アンケートチェック種類")` (questionnaire check type) (L298)

> This block handles the questionnaire check type field (項目ID: enquete_chk_sbt). It dispatches to the appropriate getter based on the subkey.

**Block 3.1** — [IF] `subkey.equalsIgnoreCase("value")` (L299)
> Returns the actual text/value of the questionnaire check type field.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getEnquete_chk_sbt_value();` // Get questionnaire check type value |

**Block 3.2** — [ELSE-IF] `subkey.equalsIgnoreCase("enable")` (L302)
> (サブキーが"enable"の場合、enquete_chk_sbt_enableのgetterの戻り値を返す。 / When subkey is "enable", returns the getter value of enquete_chk_sbt_enable.)
> Returns the boolean enable/visibility flag for the questionnaire check type field.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getEnquete_chk_sbt_enabled();` // Get questionnaire check type enable flag |

**Block 3.3** — [ELSE-IF] `subkey.equalsIgnoreCase("state")` (L305)
> (サブキーが"state"の場合、ステータスを返す。 / When subkey is "state", returns the status.)
> Returns the validation error state string for the questionnaire check type field.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getEnquete_chk_sbt_state();` // Get questionnaire check type state |

**Block 4** — [ELSE-IF] `key.equals("アンケート番号")` (questionnaire number) (L311)

> This block handles the questionnaire number field (項目ID: enquete_content_no). It dispatches to the appropriate getter based on the subkey.

**Block 4.1** — [IF] `subkey.equalsIgnoreCase("value")` (L312)
> Returns the actual text/value of the questionnaire number field.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getEnquete_content_no_value();` // Get questionnaire number value |

**Block 4.2** — [ELSE-IF] `subkey.equalsIgnoreCase("enable")` (L315)
> (サブキーが"enable"の場合、enquete_content_no_enableのgetterの戻り値を返す。 / When subkey is "enable", returns the getter value of enquete_content_no_enable.)
> Returns the boolean enable/visibility flag for the questionnaire number field.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getEnquete_content_no_enabled();` // Get questionnaire number enable flag |

**Block 4.3** — [ELSE-IF] `subkey.equalsIgnoreCase("state")` (L318)
> (サブキーが"state"の場合、ステータスを返す。 / When subkey is "state", returns the status.)
> Returns the validation error state string for the questionnaire number field.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getEnquete_content_no_state();` // Get questionnaire number state |

**Block 5** — [ELSE-IF] `key.equals("表示順序（アンケート内容）")` (display order) (L324)

> This block handles the display order field for questionnaire content (項目ID: dsp_jun_content). The display order determines the sequence in which questionnaire items are rendered on the screen. It dispatches to the appropriate getter based on the subkey.

**Block 5.1** — [IF] `subkey.equalsIgnoreCase("value")` (L325)
> Returns the display order value (typically a numeric string indicating sort position).

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getDsp_jun_content_value();` // Get display order value |

**Block 5.2** — [ELSE-IF] `subkey.equalsIgnoreCase("enable")` (L328)
> (サブキーが"enable"の場合、dsp_jun_content_enableのgetterの戻り値を返す。 / When subkey is "enable", returns the getter value of dsp_jun_content_enable.)
> Returns the boolean enable/visibility flag for the display order field.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getDsp_jun_content_enabled();` // Get display order enable flag |

**Block 5.3** — [ELSE-IF] `subkey.equalsIgnoreCase("state")` (L331)
> (サブキーが"state"の場合、ステータスを返す。 / When subkey is "state", returns the status.)
> Returns the validation error state string for the display order field.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getDsp_jun_content_state();` // Get display order state |

**Block 6** — [ELSE-IF] `key.equals("ラジオボタン選択値")` (radio button selection value) (L337)

> This block handles the radio button selection value field (項目ID: radio_value). In a telecom service questionnaire, radio buttons may be used for single-choice selections (e.g., plan type). It dispatches to the appropriate getter based on the subkey.

**Block 6.1** — [IF] `subkey.equalsIgnoreCase("value")` (L338)
> Returns the selected radio button value.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getRadio_value_value();` // Get radio button selection value |

**Block 6.2** — [ELSE-IF] `subkey.equalsIgnoreCase("enable")` (L341)
> (サブキーが"enable"の場合、radio_value_enableのgetterの戻り値を返す。 / When subkey is "enable", returns the getter value of radio_value_enable.)
> Returns the boolean enable/visibility flag for the radio button field.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getRadio_value_enabled();` // Get radio button selection enable flag |

**Block 6.3** — [ELSE-IF] `subkey.equalsIgnoreCase("state")` (L344)
> (サブキーが"state"の場合、ステータスを返す。 / When subkey is "state", returns the status.)
> Returns the validation error state string for the radio button field.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getRadio_value_state();` // Get radio button selection state |

**Block 7** — [ELSE-IF] `key.equals("アンケート回答リスト")` (questionnaire answer list) (L349)

> (データタイプ項目 "アンケート回答リスト" (項目ID: enquete_answer_list) / Data-type field "Questionnaire Answer List" (item ID: enquete_answer_list))
>
> This is the most complex branch. It handles dynamic, indexed access to a list of questionnaire answer rows. The key format is a slash-delimited path like `"プランリスト/0/プラン名"` (plan list / index / plan name). The method parses this path, validates the index, and delegates to the specific list item bean.

**Block 7.1** — [SET] Extract remaining path after the first slash (L351)

> (keyの次の要素を取得 / Get the next element of key. For a path like "プランリスト/0/プラン名", extracts everything after the first slash.)

| # | Type | Code |
|---|------|------|
| 1 | SET | `keyRemain = key.substring(separaterPoint + 1)` // Extract path after first slash (L352) |

**Block 7.2** — [IF] `keyRemain.equals("*")` (L354)
> (インデックス値の代わりに"*"が指定されていたら、リストの要素数を返す。 / If "*" is specified instead of an index value, return the number of list elements.)
> Wildcard support: when the caller passes "*" as the index, return the total count of answer list items.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `enquete_answer_list_list.size()` // Get list size |
| 2 | SET | `Integer.valueOf(...)` // Convert int to Integer wrapper |
| 3 | RETURN | `return Integer.valueOf(enquete_answer_list_list.size());` (L355) |

**Block 7.3** — [SET] Find next slash delimiter (L357)

> (次の切り抜き記号 (ここでは"/") を検索する。 / Search for the next delimiter (here "/").)

| # | Type | Code |
|---|------|------|
| 1 | SET | `separaterPoint = keyRemain.indexOf("/")` // Find next slash in remaining path (L357) [-> `"/"`] |

**Block 7.4** — [IF] `separaterPoint <= 0` (L359)
> (切り抜き記号が見つからない、または不正直な場合は、ここでnullを返す。 / If no delimiter is found, or the path is invalid, return null here.)
> Guard: if there's no second slash in the path, the index is not present — return null.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null;` // No valid index component (L360) |

**Block 7.5** — [SET] Extract index substring (L361)

> Assign the index portion (before the next slash) to the local `key` variable for parsing.

| # | Type | Code |
|---|------|------|
| 1 | SET | `key = keyRemain.substring(0, separaterPoint)` // Extract index string (L361) |

**Block 7.6** — [SET] Initialize index variable (L363)

| # | Type | Code |
|---|------|------|
| 1 | SET | `tmpIndexInt = null` // Initialize Integer for parsed index (L363) |

**Block 7.7** — [TRY-CATCH] Parse index as integer (L364-L370)

> (インデックス値が数値文字列でない場合は、ここでnullを返す。 / If the index value is not a numeric string, return null here.)

**Block 7.7.1** — [TRY] Parse key as Integer (L365)

| # | Type | Code |
|---|------|------|
| 1 | SET | `tmpIndexInt = Integer.valueOf(key)` // Parse index string to Integer (L365) |

**Block 7.7.2** — [CATCH] `NumberFormatException` (L368)
> (インデックス値が数値文字列でない場合は、ここでnullを返す。 / If the index value is not a numeric string, return null here.)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null;` // Invalid index — not a valid integer (L369) |

**Block 7.8** — [IF] `tmpIndexInt == null` (L372)
> Redundant null check after try-catch (the parser either succeeds or returns early). Defensive guard.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null;` // Index parsed to null (L373) |

**Block 7.9** — [SET] Convert Integer to primitive int (L374)

| # | Type | Code |
|---|------|------|
| 1 | SET | `tmpIndex = tmpIndexInt.intValue()` // Unwrap Integer to int (L374) |

**Block 7.10** — [IF] `tmpIndex < 0 || tmpIndex >= enquete_answer_list_list.size()` (L376)
> (インデックス値がリスト個数-1を超える場合は、ここでnullを返す。 / If the index value exceeds the list count minus 1, return null here.)
> Bounds check: ensure the parsed index is within the valid range of the list.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null;` // Index out of bounds — return null (L377) |

**Block 7.11** — [SET] Extract property name from path (L379)

> (項目名を生成し、データタイプビューアンの戻り値を返す / Generate the item name and return the data-type bean's value.)
> The remaining path segment after the index becomes the property key for delegation.

| # | Type | Code |
|---|------|------|
| 1 | SET | `key = keyRemain.substring(separaterPoint + 1)` // Extract property name after index (L379) |

**Block 7.12** — [CALL] Delegate to list item bean (L380)
> (データタイプビューアでは項目名とsubkeyのみ引数に指定 / For the data-type bean, only the item name and subkey are specified as arguments.)
> Cast the list item to `X33VDataTypeBeanInterface` and delegate to its `loadModelData` method, passing the resolved property key and the original subkey. This enables recursive property access on nested bean structures.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `(X33VDataTypeBeanInterface)enquete_answer_list_list.get(tmpIndex)` // Cast list item (L380) |
| 2 | CALL | `.loadModelData(key, subkey)` // Delegate to item's own loadModelData (L380) |
| 3 | RETURN | `return ((X33VDataTypeBeanInterface)enquete_answer_list_list.get(tmpIndex)).loadModelData(key, subkey);` |

**Block 8** — [ELSE] No matching key (L383)
> (条件に合致するプロパティが存在しない場合は、nullを返す。 / If no matching property exists, return null.)
> Default fallback: when the key does not match any of the six known field identifiers, return null.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null;` // No matching field identified (L384) |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| アンケート内容 | Field | Questionnaire content — the main text/content of a questionnaire question |
| enquete_content | Field | Internally mapped question ID for アンケート内容 |
| アンケートチェック種類 | Field | Questionnaire check type — the type/category of the questionnaire check item |
| enquete_chk_sbt | Field | Internally mapped question ID for アンケートチェック種類 |
| アンケート番号 | Field | Questionnaire number — the sequential number or ID of the questionnaire item |
| enquete_content_no | Field | Internally mapped question ID for アンケート番号 |
| 表示順序（アンケート内容） | Field | Display order — the sort sequence in which questionnaire content items are rendered on the screen |
| dsp_jun_content | Field | Internally mapped question ID for 表示順序（アンケート内容） |
| ラジオボタン選択値 | Field | Radio button selection value — the selected value from a single-choice radio button group |
| radio_value | Field | Internally mapped question ID for ラジオボタン選択値 |
| アンケート回答リスト | Field | Questionnaire answer list — a dynamic, variable-length list of answer rows for the questionnaire |
| enquete_answer_list | Field | Internally mapped question ID for アンケート回答リスト |
| enquete_answer_list_list | Field | The in-memory list (`X33VDataTypeList`) holding all questionnaire answer row beans |
| key | Parameter | Field identifier (項目名) — Japanese label selecting which property category to query |
| subkey | Parameter | Attribute sub-key (サブキー) — selects which attribute: "value" (data), "enable" (visibility flag), or "state" (validation error) |
| X33VDataTypeBeanInterface | Type | Interface implemented by each item in the answer list, providing its own `loadModelData` for property access |
| X33VDataTypeList | Type | Typed list collection holding answer list items that implement `X33VDataTypeBeanInterface` |
| X31CBaseBean | Type | Parent class providing base bean methods including `substring` utility and `storeModelData` |
| value | Subkey | Request the actual data value of a field |
| enable | Subkey | Request the boolean enable/visibility flag of a field |
| state | Subkey | Request the validation error state string of a field |
| プランリスト | Field | Plan list — a named section within the answer list path (e.g., "プランリスト/0/プラン名") |
| プラン名 | Field | Plan name — a property accessed within a specific answer list row |
| Webview | Layer | The view-model layer in this architecture where beans bridge between the web screen and underlying data |
| FUW00156SF | Module | Survey/Questionnaire screen module — handles questionnaire input pages for telecom service orders |
| getJsflist_typelist_enquete_answer_list | Method | Internal getter that iterates the answer list and aggregates each row's value via loadModelData |
