# Business Logic — DKW00301SFBean.addListDataInstance() [269 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.DKW00301SF.DKW00301SFBean` |
| Layer | Controller (Web View Bean — screen-level data holder in the X31 framework) |
| Module | `DKW00301SF` (Package: `eo.web.webview.DKW00301SF`) |

## 1. Role

### DKW00301SFBean.addListDataInstance()

This method is the central list-instantiation dispatcher for the DKW00301SF screen (an order/search screen in the telecom service order management domain). Its business purpose is to lazily create and manage typed list containers for repeatable (repeating) view data items that the screen's UI binds to. When the framework or UI layer requests a new element for a specific list item identified by `key`, this method determines which data bean class should hold the element and appends a fresh instance to the appropriate in-memory list.

The method supports **three categories of service types**: (1) common/shared information beans (prefixed with `//`), (2) structured data-type beans (`DKW00301SF01DBean` through `DKW00301SF05DBean`) for strongly-typed repeating fields such as receiving party (`受取先`), return item type (`返品種類`), model number (`型番`), date ranges (`日付FROM`/`日付TO`), and search result lists (`検索結果リスト`), and (3) plain String repeat items (`機器契約区分別コード一覧` / `機器契約区分別名称一覧`) which use `X33VDataTypeStringBean` as their element type.

It implements the **bridge/registry dispatch pattern**: a long `else-if` chain maps hardcoded business-key strings to specific bean instantiation logic, acting as a registry between user-facing item names and internal data structures. This is a **shared utility** within the screen — the X31 view framework calls it generically whenever the screen needs to add a row to a repeating table, making this method the single entry point for all list-data expansion on this screen.

For the 11 structured data-type branches, each performs lazy initialization (creating the list with one pre-populated element if it is null) and enforces a maximum element count (`MAX要素数`), throwing a framework exception (`ERRS_CANNOT_ADD_REPEATITEM`) if the user attempts to exceed the configured maximum. The two plain String branches and the three data-type-branch-less lists (search result, provision type, CSV result) are unbounded — they have no max element enforcement.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["addListDataInstance(key)"])
    CHECK_NULL{"key == null?"}
    COMMON_INFO{"key starts with '//'"}
    DISPATCH_SHARED(["super.addListDataInstance(key)"])
    RETURN_COMMON(["Return index from shared"])

    BLOCK1["'返品抽出条件' - DKW00301SF02DBean"]
    BLOCK2["'受取先' - DKW00301SF01DBean"]
    BLOCK3["'返品種類' - DKW00301SF02DBean"]
    BLOCK4["'型番' - DKW00301SF03DBean"]
    BLOCK5["'検索日付選択' - DKW00301SF02DBean"]
    BLOCK6["'日付FROM' - DKW00301SF04DBean"]
    BLOCK7["'日付TO' - DKW00301SF04DBean"]
    BLOCK8["'承認日FROM' - DKW00301SF04DBean"]
    BLOCK9["'承認日TO' - DKW00301SF04DBean"]
    BLOCK10["'検索結果リスト' - DKW00301SF05DBean"]
    BLOCK11["'提供種類リスト' - DKW00301SF02DBean"]
    BLOCK12["'CSV用検索結果リスト' - DKW00301SF05DBean"]
    BLOCK13["'機器契約区分別コード一覧' - String"]
    BLOCK14["'機器契約区分別名称一覧' - String"]
    BLOCK15["'選択検索結果リスト' - DKW00301SF05DBean"]

    RETURN_INDEX(["Return size()-1"])
    RETURN_NOT_FOUND(["Return -1"])

    START --> CHECK_NULL
    CHECK_NULL -->|true| RETURN_NOT_FOUND
    CHECK_NULL -->|false| COMMON_INFO
    COMMON_INFO -->|true| DISPATCH_SHARED --> RETURN_COMMON
    COMMON_INFO -->|false| BLOCK1

    BLOCK1 --> BLOCK2
    BLOCK2 --> BLOCK3
    BLOCK3 --> BLOCK4
    BLOCK4 --> BLOCK5
    BLOCK5 --> BLOCK6
    BLOCK6 --> BLOCK7
    BLOCK7 --> BLOCK8
    BLOCK8 --> BLOCK9
    BLOCK9 --> BLOCK10
    BLOCK10 --> BLOCK11
    BLOCK11 --> BLOCK12
    BLOCK12 --> BLOCK13
    BLOCK13 --> BLOCK14
    BLOCK14 --> BLOCK15
    BLOCK15 --> RETURN_NOT_FOUND

    END_NODE(["End"])
    RETURN_COMMON --> END_NODE
    RETURN_INDEX --> END_NODE
    RETURN_NOT_FOUND --> END_NODE
```

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `key` | `String` | The business identifier of a repeating view data item. It is a human-readable Japanese label that maps to a specific data bean class and list container. Examples: "返品抽出条件" (Return Extraction Conditions — filter criteria for returns), "受取先" (Receiving Party — the recipient of the service), "検索結果リスト" (Search Result List), "機器契約区分別コード一覧" (Device Contract Division Code List). The key determines which bean type is instantiated and appended to which list field. |

**Instance fields read by this method:**

| Field | Type | Business Description |
|-------|------|---------------------|
| `i_hmpin_chsht_joken_list` | `X33VDataTypeList` | List for Return Extraction Conditions (bean type: `DKW00301SF02DBean`), with max element count enforcement |
| `i_ukeire_sk_list` | `X33VDataTypeList` | List for Receiving Party information (bean type: `DKW00301SF01DBean`), with max element count enforcement |
| `i_hmpin_sbt_list` | `X33VDataTypeList` | List for Return Item Type (bean type: `DKW00301SF02DBean`), with max element count enforcement |
| `i_mdl_no_list` | `X33VDataTypeList` | List for Model Number (bean type: `DKW00301SF03DBean`), with max element count enforcement |
| `i_search_ymd_choice_list` | `X33VDataTypeList` | List for Search Date Selection (bean type: `DKW00301SF02DBean`), with max element count enforcement |
| `i_ymd_sta_list` | `X33VDataTypeList` | List for Date FROM (bean type: `DKW00301SF04DBean`), with max element count enforcement |
| `i_ymd_end_list` | `X33VDataTypeList` | List for Date TO (bean type: `DKW00301SF04DBean`), with max element count enforcement |
| `i_shonin_ymd_sta_list` | `X33VDataTypeList` | List for Approval Date FROM (bean type: `DKW00301SF04DBean`), with max element count enforcement |
| `i_shonin_ymd_end_list` | `X33VDataTypeList` | List for Approval Date TO (bean type: `DKW00301SF04DBean`), with max element count enforcement |
| `search_rslt_list_list` | `X33VDataTypeList` | Unbounded list for Search Results (bean type: `DKW00301SF05DBean`) |
| `l_kiki_kei_div_list` | `X33VDataTypeList` | Unbounded list for Provision Type List (bean type: `DKW00301SF02DBean`) |
| `search_rslt_list_csv_list` | `X33VDataTypeList` | Unbounded list for CSV Search Results (bean type: `DKW00301SF05DBean`) |
| `kiki_kei_div_cd_list_list` | `X33VDataTypeList` | Unbounded list for Device Contract Division Code (bean type: `X33VDataTypeStringBean`) |
| `kiki_kei_div_nm_list_list` | `X33VDataTypeList` | Unbounded list for Device Contract Division Name (bean type: `X33VDataTypeStringBean`) |
| `SEARCH_RSLT_LIST_SELECTED_list` | `X33VDataTypeList` | Unbounded list for Selected Search Results (bean type: `DKW00301SF05DBean`) |

## 4. CRUD Operations / Called Services

### Pre-computed evidence from code analysis graph:

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| C | `super.addListDataInstance` | (framework) | (X31 framework internal state) | Delegates common/shared information list management to the parent class `X33VDataTypeListBean` (or base bean), which handles items prefixed with `//` |
| C | `DKW00301SFBean.addListDataInstance` | (self) | — | Creates new bean instances and adds them to in-memory lists — no DB interaction |

**CRUD Classification:**

This method performs **purely in-memory Create operations**. It does not directly invoke any SC (Service Component) or CBS (Common Business Service) layers, and it does not interact with any database tables. All data it manipulates lives in the screen's bean-level in-memory list fields (`X33VDataTypeList`). The only external call is to `super.addListDataInstance(key)` for the common/shared information path (`//` prefix), which delegates to the framework's base bean.

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| C | `X33VDataTypeList.(constructor)` | (framework) | — | Allocates a new typed list instance with optional initial capacity (e.g., `new X33VDataTypeList(1)`) |
| C | `X33VDataTypeList.add` | (framework) | — | Appends a new bean instance to an in-memory list |
| C | `X33VDataTypeList.size` | (framework) | — | Reads the current list size to compute the return index |
| C | `X33VDataTypeList.getMaxElementCnt` | (framework) | — | Reads the configured maximum element count for max-element enforcement |
| C | `X33VDataTypeList.size` (max check) | (framework) | — | Reads current size to compare against max element count |
| C | `super.createExceptionForX31Method` | (framework) | — | Creates an `X33SException` with error code `ERRS_CANNOT_ADD_REPEATITEM` when the max element limit is exceeded |
| C | `super.addListDataInstance` | (framework) | — | Delegates common/shared info list management to the parent base bean (only for `//`-prefixed keys) |

## 5. Dependency Trace

The pre-computed caller data indicates the only direct caller is the method's own overload (`DKW00301SFBean.addListDataInstance()` with no parameters, which likely delegates to the `String key` variant). No external screens, batches, or CBS components directly call this method based on the code graph — it is invoked by the X31 framework's data binding mechanism internally, not by explicit caller code.

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Screen: DKW00301 (self-variant) | `DKW00301SFBean.addListDataInstance()` (no-arg overload) -> `DKW00301SFBean.addListDataInstance(String key)` | in-memory list Create |

**What this method calls (outbound):**

| # | Called Method | Type |
|---|--------------|------|
| 1 | `super.addListDataInstance(key)` | Framework delegation (shared/common info) |
| 2 | `super.createExceptionForX31Method(ERRS_CANNOT_ADD_REPEATITEM)` | Framework exception factory |
| 3 | `X33VDataTypeList` constructors and `add`/`size`/`getMaxElementCnt` | Framework list management |
| 4 | `DKW00301SF01DBean()` constructor | In-memory bean instantiation |
| 5 | `DKW00301SF02DBean()` constructor | In-memory bean instantiation |
| 6 | `DKW00301SF03DBean()` constructor | In-memory bean instantiation |
| 7 | `DKW00301SF04DBean()` constructor | In-memory bean instantiation |
| 8 | `DKW00301SF05DBean()` constructor | In-memory bean instantiation |
| 9 | `X33VDataTypeStringBean()` constructor | In-memory String bean instantiation |

## 6. Per-Branch Detail Blocks

**Block 1** — IF (null check) (L2589)

> Checks if the key is null; if so, returns -1 immediately as a sentinel value indicating no item was found.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if(key == null)` [-> Returns `-1` — no matching item] |

**Block 2** — ELSE-IF (common info prefix) (L2595)

> Detects keys starting with `//` (common/shared information). Delegates entirely to the parent class's `addListDataInstance` method, which manages shared view lists in the base bean.

| # | Type | Code |
|---|------|------|
| 1 | IF | `else if(key.startsWith("//"))` [Common Info View prefix] |
| 2 | CALL | `super.addListDataInstance(key)` [Delegates to framework base bean] |
| 3 | RETURN | `return super.addListDataInstance(key);` |

**Block 3** — ELSE-IF (返品抽出条件 — Return Extraction Conditions) (L2602)

> Handles the "Return Extraction Conditions" item. Manages `i_hmpin_chsht_joken_list` of `DKW00301SF02DBean`. If the list is null, lazily initializes it with capacity 1 and creates one pre-populated element. Then checks max element count before adding.

| # | Type | Code |
|---|------|------|
| 1 | IF | `else if(key.equals("返品抽出条件"))` [Item: Return Extraction Conditions] |
| 2 | IF | `if(i_hmpin_chsht_joken_list == null)` [List not initialized] |
| 2.1 | SET | `i_hmpin_chsht_joken_list = new X33VDataTypeList(1);` [Initialize with capacity 1] |
| 2.2 | FOR | `for(int i=0; i<1; i++)` |
| 2.3 | SET | `DKW00301SF02DBean tmpBean = new DKW00301SF02DBean();` [Create new data-type bean] |
| 2.4 | CALL | `i_hmpin_chsht_joken_list.add(tmpBean);` [Pre-populate with one element] |
| 3 | IF | `if(i_hmpin_chsht_joken_list.getMaxElementCnt() == 0 || i_hmpin_chsht_joken_list.size() < i_hmpin_chsht_joken_list.getMaxElementCnt())` [Max element check: 0 means unlimited, or size is within limit] |
| 3.1 | SET | `DKW00301SF02DBean tmpBean = new DKW00301SF02DBean();` [Create new instance] |
| 3.2 | CALL | `i_hmpin_chsht_joken_list.add(tmpBean);` [Append to list] |
| 4 | ELSE | [Exceeded max element count] |
| 4.1 | EXEC | `throw super.createExceptionForX31Method(ERRS_CANNOT_ADD_REPEATITEM);` [Framework exception] |
| 5 | RETURN | `return i_hmpin_chsht_joken_list.size() - 1;` [Return index of newly added element] |

**Block 4** — ELSE-IF (受取先 — Receiving Party) (L2620)

> Handles the "Receiving Party" item. Manages `i_ukeire_sk_list` of `DKW00301SF01DBean`. Same lazy-init + max-element-enforcement pattern as Block 3.

| # | Type | Code |
|---|------|------|
| 1 | IF | `else if(key.equals("受取先"))` [Item: Receiving Party] |
| 2 | IF | `if(i_ukeire_sk_list == null)` [List not initialized] |
| 2.1 | SET | `i_ukeire_sk_list = new X33VDataTypeList(1);` |
| 2.2 | FOR | `for(int i=0; i<1; i++)` |
| 2.3 | SET | `DKW00301SF01DBean tmpBean = new DKW00301SF01DBean();` |
| 2.4 | CALL | `i_ukeire_sk_list.add(tmpBean);` |
| 3 | IF | `if(i_ukeire_sk_list.getMaxElementCnt() == 0 \|\| i_ukeire_sk_list.size() < i_ukeire_sk_list.getMaxElementCnt())` |
| 3.1 | SET | `DKW00301SF01DBean tmpBean = new DKW00301SF01DBean();` |
| 3.2 | CALL | `i_ukeire_sk_list.add(tmpBean);` |
| 4 | ELSE | [Max exceeded — throws `ERRS_CANNOT_ADD_REPEATITEM`] |
| 5 | RETURN | `return i_ukeire_sk_list.size() - 1;` |

**Block 5** — ELSE-IF (返品種類 — Return Item Type) (L2638)

> Handles the "Return Item Type" item. Manages `i_hmpin_sbt_list` of `DKW00301SF02DBean`. Same pattern as Block 3 and Block 4.

| # | Type | Code |
|---|------|------|
| 1 | IF | `else if(key.equals("返品種類"))` [Item: Return Item Type] |
| 2 | IF | `if(i_hmpin_sbt_list == null)` |
| 2.1 | SET | `i_hmpin_sbt_list = new X33VDataTypeList(1);` |
| 2.2 | FOR | `for(int i=0; i<1; i++)` |
| 2.3 | SET | `DKW00301SF02DBean tmpBean = new DKW00301SF02DBean();` |
| 2.4 | CALL | `i_hmpin_sbt_list.add(tmpBean);` |
| 3 | IF | `if(i_hmpin_sbt_list.getMaxElementCnt() == 0 \|\| i_hmpin_sbt_list.size() < i_hmpin_sbt_list.getMaxElementCnt())` |
| 3.1 | SET | `DKW00301SF02DBean tmpBean = new DKW00301SF02DBean();` |
| 3.2 | CALL | `i_hmpin_sbt_list.add(tmpBean);` |
| 4 | ELSE | [Max exceeded — throws `ERRS_CANNOT_ADD_REPEATITEM`] |
| 5 | RETURN | `return i_hmpin_sbt_list.size() - 1;` |

**Block 6** — ELSE-IF (型番 — Model Number) (L2656)

> Handles the "Model Number" item. Manages `i_mdl_no_list` of `DKW00301SF03DBean`. Same pattern.

| # | Type | Code |
|---|------|------|
| 1 | IF | `else if(key.equals("型番"))` [Item: Model Number] |
| 2 | IF | `if(i_mdl_no_list == null)` |
| 2.1 | SET | `i_mdl_no_list = new X33VDataTypeList(1);` |
| 2.2 | FOR | `for(int i=0; i<1; i++)` |
| 2.3 | SET | `DKW00301SF03DBean tmpBean = new DKW00301SF03DBean();` |
| 2.4 | CALL | `i_mdl_no_list.add(tmpBean);` |
| 3 | IF | `if(i_mdl_no_list.getMaxElementCnt() == 0 \|\| i_mdl_no_list.size() < i_mdl_no_list.getMaxElementCnt())` |
| 3.1 | SET | `DKW00301SF03DBean tmpBean = new DKW00301SF03DBean();` |
| 3.2 | CALL | `i_mdl_no_list.add(tmpBean);` |
| 4 | ELSE | [Max exceeded — throws `ERRS_CANNOT_ADD_REPEATITEM`] |
| 5 | RETURN | `return i_mdl_no_list.size() - 1;` |

**Block 7** — ELSE-IF (検索日付選択 — Search Date Selection) (L2674)

> Handles the "Search Date Selection" item. Manages `i_search_ymd_choice_list` of `DKW00301SF02DBean`. Same pattern.

| # | Type | Code |
|---|------|------|
| 1 | IF | `else if(key.equals("検索日付選択"))` [Item: Search Date Selection] |
| 2 | IF | `if(i_search_ymd_choice_list == null)` |
| 2.1 | SET | `i_search_ymd_choice_list = new X33VDataTypeList(1);` |
| 2.2 | FOR | `for(int i=0; i<1; i++)` |
| 2.3 | SET | `DKW00301SF02DBean tmpBean = new DKW00301SF02DBean();` |
| 2.4 | CALL | `i_search_ymd_choice_list.add(tmpBean);` |
| 3 | IF | `if(i_search_ymd_choice_list.getMaxElementCnt() == 0 \|\| i_search_ymd_choice_list.size() < i_search_ymd_choice_list.getMaxElementCnt())` |
| 3.1 | SET | `DKW00301SF02DBean tmpBean = new DKW00301SF02DBean();` |
| 3.2 | CALL | `i_search_ymd_choice_list.add(tmpBean);` |
| 4 | ELSE | [Max exceeded — throws `ERRS_CANNOT_ADD_REPEATITEM`] |
| 5 | RETURN | `return i_search_ymd_choice_list.size() - 1;` |

**Block 8** — ELSE-IF (日付FROM — Date FROM) (L2692)

> Handles the "Date FROM" item (a date range start field). Manages `i_ymd_sta_list` of `DKW00301SF04DBean`. Same pattern.

| # | Type | Code |
|---|------|------|
| 1 | IF | `else if(key.equals("日付FROM"))` [Item: Date FROM] |
| 2 | IF | `if(i_ymd_sta_list == null)` |
| 2.1 | SET | `i_ymd_sta_list = new X33VDataTypeList(1);` |
| 2.2 | FOR | `for(int i=0; i<1; i++)` |
| 2.3 | SET | `DKW00301SF04DBean tmpBean = new DKW00301SF04DBean();` |
| 2.4 | CALL | `i_ymd_sta_list.add(tmpBean);` |
| 3 | IF | `if(i_ymd_sta_list.getMaxElementCnt() == 0 \|\| i_ymd_sta_list.size() < i_ymd_sta_list.getMaxElementCnt())` |
| 3.1 | SET | `DKW00301SF04DBean tmpBean = new DKW00301SF04DBean();` |
| 3.2 | CALL | `i_ymd_sta_list.add(tmpBean);` |
| 4 | ELSE | [Max exceeded — throws `ERRS_CANNOT_ADD_REPEATITEM`] |
| 5 | RETURN | `return i_ymd_sta_list.size() - 1;` |

**Block 9** — ELSE-IF (日付TO — Date TO) (L2710)

> Handles the "Date TO" item (a date range end field). Manages `i_ymd_end_list` of `DKW00301SF04DBean`. Same pattern.

| # | Type | Code |
|---|------|------|
| 1 | IF | `else if(key.equals("日付TO"))` [Item: Date TO] |
| 2 | IF | `if(i_ymd_end_list == null)` |
| 2.1 | SET | `i_ymd_end_list = new X33VDataTypeList(1);` |
| 2.2 | FOR | `for(int i=0; i<1; i++)` |
| 2.3 | SET | `DKW00301SF04DBean tmpBean = new DKW00301SF04DBean();` |
| 2.4 | CALL | `i_ymd_end_list.add(tmpBean);` |
| 3 | IF | `if(i_ymd_end_list.getMaxElementCnt() == 0 \|\| i_ymd_end_list.size() < i_ymd_end_list.getMaxElementCnt())` |
| 3.1 | SET | `DKW00301SF04DBean tmpBean = new DKW00301SF04DBean();` |
| 3.2 | CALL | `i_ymd_end_list.add(tmpBean);` |
| 4 | ELSE | [Max exceeded — throws `ERRS_CANNOT_ADD_REPEATITEM`] |
| 5 | RETURN | `return i_ymd_end_list.size() - 1;` |

**Block 10** — ELSE-IF (承認日FROM — Approval Date FROM) (L2728)

> Handles the "Approval Date FROM" item. Manages `i_shonin_ymd_sta_list` of `DKW00301SF04DBean`. Same pattern.

| # | Type | Code |
|---|------|------|
| 1 | IF | `else if(key.equals("承認日FROM"))` [Item: Approval Date FROM] |
| 2 | IF | `if(i_shonin_ymd_sta_list == null)` |
| 2.1 | SET | `i_shonin_ymd_sta_list = new X33VDataTypeList(1);` |
| 2.2 | FOR | `for(int i=0; i<1; i++)` |
| 2.3 | SET | `DKW00301SF04DBean tmpBean = new DKW00301SF04DBean();` |
| 2.4 | CALL | `i_shonin_ymd_sta_list.add(tmpBean);` |
| 3 | IF | `if(i_shonin_ymd_sta_list.getMaxElementCnt() == 0 \|\| i_shonin_ymd_sta_list.size() < i_shonin_ymd_sta_list.getMaxElementCnt())` |
| 3.1 | SET | `DKW00301SF04DBean tmpBean = new DKW00301SF04DBean();` |
| 3.2 | CALL | `i_shonin_ymd_sta_list.add(tmpBean);` |
| 4 | ELSE | [Max exceeded — throws `ERRS_CANNOT_ADD_REPEATITEM`] |
| 5 | RETURN | `return i_shonin_ymd_sta_list.size() - 1;` |

**Block 11** — ELSE-IF (承認日TO — Approval Date TO) (L2746)

> Handles the "Approval Date TO" item. Manages `i_shonin_ymd_end_list` of `DKW00301SF04DBean`. Same pattern.

| # | Type | Code |
|---|------|------|
| 1 | IF | `else if(key.equals("承認日TO"))` [Item: Approval Date TO] |
| 2 | IF | `if(i_shonin_ymd_end_list == null)` |
| 2.1 | SET | `i_shonin_ymd_end_list = new X33VDataTypeList(1);` |
| 2.2 | FOR | `for(int i=0; i<1; i++)` |
| 2.3 | SET | `DKW00301SF04DBean tmpBean = new DKW00301SF04DBean();` |
| 2.4 | CALL | `i_shonin_ymd_end_list.add(tmpBean);` |
| 3 | IF | `if(i_shonin_ymd_end_list.getMaxElementCnt() == 0 \|\| i_shonin_ymd_end_list.size() < i_shonin_ymd_end_list.getMaxElementCnt())` |
| 3.1 | SET | `DKW00301SF04DBean tmpBean = new DKW00301SF04DBean();` |
| 3.2 | CALL | `i_shonin_ymd_end_list.add(tmpBean);` |
| 4 | ELSE | [Max exceeded — throws `ERRS_CANNOT_ADD_REPEATITEM`] |
| 5 | RETURN | `return i_shonin_ymd_end_list.size() - 1;` |

**Block 12** — ELSE-IF (検索結果リスト — Search Result List) (L2764)

> Handles the "Search Result List" — an **unbounded** list (no max element check). Manages `search_rslt_list_list` of `DKW00301SF05DBean`. Initializes with default capacity (no initial count) and adds directly.

| # | Type | Code |
|---|------|------|
| 1 | IF | `else if(key.equals("検索結果リスト"))` [Item: Search Result List] |
| 2 | IF | `if(search_rslt_list_list == null)` [List not initialized] |
| 2.1 | SET | `search_rslt_list_list = new X33VDataTypeList();` [Initialize without capacity parameter — unbounded] |
| 3 | SET | `DKW00301SF05DBean tmpBean = new DKW00301SF05DBean();` [Create new instance] |
| 4 | CALL | `search_rslt_list_list.add(tmpBean);` [Add without max check — unbounded] |
| 5 | RETURN | `return search_rslt_list_list.size() - 1;` |

**Block 13** — ELSE-IF (提供種類リスト — Provision Type List) (L2776)

> Handles the "Provision Type List" — an **unbounded** list. Manages `l_kiki_kei_div_list` of `DKW00301SF02DBean`. Same unbounded pattern as Block 12.

| # | Type | Code |
|---|------|------|
| 1 | IF | `else if(key.equals("提供種類リスト"))` [Item: Provision Type List] |
| 2 | IF | `if(l_kiki_kei_div_list == null)` |
| 2.1 | SET | `l_kiki_kei_div_list = new X33VDataTypeList();` |
| 3 | SET | `DKW00301SF02DBean tmpBean = new DKW00301SF02DBean();` |
| 4 | CALL | `l_kiki_kei_div_list.add(tmpBean);` |
| 5 | RETURN | `return l_kiki_kei_div_list.size() - 1;` |

**Block 14** — ELSE-IF (CSV用検索結果リスト — CSV Search Result List) (L2788)

> Handles the "CSV Search Result List" — an **unbounded** list for CSV export. Manages `search_rslt_list_csv_list` of `DKW00301SF05DBean`. Same unbounded pattern.

| # | Type | Code |
|---|------|------|
| 1 | IF | `else if(key.equals("CSV用検索結果リスト"))` [Item: CSV Search Result List] |
| 2 | IF | `if(search_rslt_list_csv_list == null)` |
| 2.1 | SET | `search_rslt_list_csv_list = new X33VDataTypeList();` |
| 3 | SET | `DKW00301SF05DBean tmpBean = new DKW00301SF05DBean();` |
| 4 | CALL | `search_rslt_list_csv_list.add(tmpBean);` |
| 5 | RETURN | `return search_rslt_list_csv_list.size() - 1;` |

**Block 15** — ELSE-IF (機器契約区分別コード一覧 — Device Contract Division Code List) (L2800)

> Handles the "Device Contract Division Code List" — a **String-type** repeating item. Manages `kiki_kei_div_cd_list_list`. Uses `X33VDataTypeStringBean` (not a DKW00301SF0*DBean) as the element type. Unbounded.

| # | Type | Code |
|---|------|------|
| 1 | IF | `else if(key.equals("機器契約区分別コード一覧"))` [Item: Device Contract Division Code List — plain String type] |
| 2 | IF | `if(kiki_kei_div_cd_list_list == null)` |
| 2.1 | SET | `kiki_kei_div_cd_list_list = new X33VDataTypeList();` |
| 3 | SET | `X33VDataTypeStringBean tmpBean = new X33VDataTypeStringBean();` [String-type repeating bean] |
| 4 | CALL | `kiki_kei_div_cd_list_list.add(tmpBean);` |
| 5 | RETURN | `return kiki_kei_div_cd_list_list.size() - 1;` |

**Block 16** — ELSE-IF (機器契約区分別名称一覧 — Device Contract Division Name List) (L2812)

> Handles the "Device Contract Division Name List" — a **String-type** repeating item. Manages `kiki_kei_div_nm_list_list`. Same pattern as Block 15.

| # | Type | Code |
|---|------|------|
| 1 | IF | `else if(key.equals("機器契約区分別名称一覧"))` [Item: Device Contract Division Name List — plain String type] |
| 2 | IF | `if(kiki_kei_div_nm_list_list == null)` |
| 2.1 | SET | `kiki_kei_div_nm_list_list = new X33VDataTypeList();` |
| 3 | SET | `X33VDataTypeStringBean tmpBean = new X33VDataTypeStringBean();` |
| 4 | CALL | `kiki_kei_div_nm_list_list.add(tmpBean);` |
| 5 | RETURN | `return kiki_kei_div_nm_list_list.size() - 1;` |

**Block 17** — ELSE-IF (選択検索結果リスト — Selected Search Result List) (L2824)

> Handles the "Selected Search Result List" — an **unbounded** list. Manages `SEARCH_RSLT_LIST_SELECTED_list` of `DKW00301SF05DBean`. Same unbounded pattern as Block 12.

| # | Type | Code |
|---|------|------|
| 1 | IF | `else if(key.equals("選択検索結果リスト"))` [Item: Selected Search Result List] |
| 2 | IF | `if(SEARCH_RSLT_LIST_SELECTED_list == null)` |
| 2.1 | SET | `SEARCH_RSLT_LIST_SELECTED_list = new X33VDataTypeList();` |
| 3 | SET | `DKW00301SF05DBean tmpBean = new DKW00301SF05DBean();` |
| 4 | CALL | `SEARCH_RSLT_LIST_SELECTED_list.add(tmpBean);` |
| 5 | RETURN | `return SEARCH_RSLT_LIST_SELECTED_list.size() - 1;` |

**Block 18** — ELSE (not found fallback) (L2834)

> Default case: if no key matched any known list item, return -1 as a sentinel indicating the item type is not recognized.

| # | Type | Code |
|---|------|------|
| 1 | ELSE | `return -1;` [No matching item — fallback] |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `key` | Parameter | Business identifier of a repeating view data item — a Japanese string label that selects which data bean class and list to instantiate |
| 返品抽出条件 | Field/Item | Return Extraction Conditions — search filter criteria for return items on the screen |
| 受取先 | Field/Item | Receiving Party — the recipient/contact information for the service order |
| 返品種類 | Field/Item | Return Item Type — classification of what type of return/defect is being recorded |
| 型番 | Field/Item | Model Number — the equipment/model identifier for the device being ordered |
| 検索日付選択 | Field/Item | Search Date Selection — a date filtering choice for search queries |
| 日付FROM | Field/Item | Date FROM — the start of a date range for search criteria (start date) |
| 日付TO | Field/Item | Date TO — the end of a date range for search criteria (end date) |
| 承認日FROM | Field/Item | Approval Date FROM — the start of an approval date range |
| 承認日TO | Field/Item | Approval Date TO — the end of an approval date range |
| 検索結果リスト | Field/Item | Search Result List — the main list displaying search query results |
| 提供種類リスト | Field/Item | Provision Type List — a list of service/provision types available |
| CSV用検索結果リスト | Field/Item | CSV Search Result List — a copy of search results formatted for CSV export |
| 機器契約区分別コード一覧 | Field/Item | Device Contract Division Code List — a list of codes classifying device contract divisions |
| 機器契約区分別名称一覧 | Field/Item | Device Contract Division Name List — a list of names corresponding to device contract division codes |
| 選択検索結果リスト | Field/Item | Selected Search Result List — a list of user-selected items from search results |
| X33VDataTypeList | Framework Type | X31 framework generic typed list container for repeating view data items |
| X33VDataTypeStringBean | Framework Type | Framework bean for plain String-type repeating items (used for code/name lists) |
| DKW00301SF01DBean | Framework Type | Data-type bean class for Receiving Party (`受取先`) repeating fields |
| DKW00301SF02DBean | Framework Type | Data-type bean class for Return-related fields (Return Extraction Conditions, Return Item Type, Search Date Selection, Provision Type) |
| DKW00301SF03DBean | Framework Type | Data-type bean class for Model Number (`型番`) repeating fields |
| DKW00301SF04DBean | Framework Type | Data-type bean class for date-range fields (Date FROM/TO, Approval Date FROM/TO) |
| DKW00301SF05DBean | Framework Type | Data-type bean class for search result display fields |
| X31 | Acronym | The enterprise framework name (view-bean data binding framework used in the KOPT system) |
| ERRS_CANNOT_ADD_REPEATITEM | Constant | Framework error code — thrown when attempting to add an element beyond the maximum allowed count for a repeating item |
| MAX要素数 | Field concept | Maximum Element Count — a configuration on the list that limits how many rows can be added to a repeating item |
| // (prefix) | Convention | Common/Shared Information View prefix — items starting with `//` are managed by the framework's base bean, not the screen-specific bean |
| KOPT | Acronym | The enterprise order management system platform (KOPT = Key Order Processing Tool) |
