# Business Logic — KKW22501SFBean.typeModelData() [311 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.KKW22501SF.KKW22501SFBean` |
| Layer | Controller (Web view bean in the SF screen framework) |
| Module | `KKW22501SF` (Package: `eo.web.webview.KKW22501SF`) |

## 1. Role

### KKW22501SFBean.typeModelData()

This method serves as a **runtime type resolution dispatcher** for the KKW22501SF screen's data binding framework. Its purpose is to inspect a hierarchical item path (the `key` parameter) combined with a property descriptor (the `subkey` parameter) and return the corresponding Java `Class<?>` type that represents the data model for that field. It is a core utility in the web screen bean framework, enabling dynamic UI rendering by answering the question "what type does this item's data have?" without needing to inspect the actual data objects directly.

The method implements a **routing/dispatch pattern**: it inspects the `key` string — which encodes a dotted path like `"Data Extraction Item Settings Panel (Event BP) Details/principleList/0/principleName"` — parses out the top-level field name, and then branches into ~14 specialized handlers. Simple scalar fields (String, Boolean) resolve directly. Nested data type beans (lists of type-view beans) recursively delegate to `typeModelData` on the nested bean instance, enabling resolution of deeply nested property paths. Common-info view items (those prefixed with `//`) are dispatched to the superclass implementation `typeCommonInfoData`, which handles shared metadata fields.

Its role in the larger system is that of a **shared type introspection gateway** used by the web framework's data binding and view-rendering machinery. Any screen component that needs to determine the runtime type of a field — for validation, form rendering, or data binding — calls this method. It is called both directly by the screen bean and recursively by nested type view beans (implementing `X33VDataTypeBeanInterface`), forming a tree traversal over the screen's data model.

The method handles six principal branches: (1) common-info data routing to the parent bean, (2) simple String fields with value/state sub-properties, (3) Boolean flag fields (search, delete, reset, detail display) with value/state/enable sub-properties, (4) date-time fields, (5) nested data type bean lists (3 types: data extraction item settings panel details, pre-change data extraction item settings panel details, data extraction item list details) that parse index-based paths and recurse into nested beans, and (6) a catch-all `null` return for unrecognized item paths.

## 2. Processing Pattern (Detailed Business Logic)

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

    START --> CheckKeyNull["key == null"]
    CheckKeyNull -->|Yes| ReturnNull1["return null"]
    CheckKeyNull -->|No| CheckSubkeyNull["subkey == null"]

    CheckSubkeyNull -->|Yes| SetSubkey["subkey = \"\""]
    SetSubkey --> CheckCommonInfo["key starts with //"]
    CheckSubkeyNull -->|No| CheckCommonInfo

    CheckCommonInfo -->|Yes| CallTypeCommon["super.typeCommonInfoData(key)"]
    CheckCommonInfo -->|No| FindFirstSlash["Find first '/' in key"]

    FindFirstSlash --> SlashExists["separaterPoint > 0"]
    SlashExists -->|Yes| ExtractKeyElement["keyElement = key.substring(0, separaterPoint)"]
    SlashExists -->|No| SetKeyElement["keyElement = key"]

    ExtractKeyElement --> CheckField1["keyElement = '代理店コード' (Agent Code)"]
    SetKeyElement --> CheckField1

    CheckField1 -->|Yes| CheckSub1["subkey = 'value' or 'state'"]
    CheckSub1 --> ReturnString1["return String.class"]

    CheckField1 -->|No| CheckField2["keyElement = '表示用データ抽出項目コード' (Display Data Extraction Item Code)"]
    CheckField2 -->|Yes| ReturnString2["return String.class"]
    CheckField2 -->|No| CheckField3["keyElement = 'データ抽出項目コード（登録用）' (Data Extraction Item Code for Registration)"]
    CheckField3 -->|Yes| ReturnString3["return String.class"]
    CheckField3 -->|No| CheckField4["keyElement = 'データ抽出項目名' (Data Extraction Item Name)"]
    CheckField4 -->|Yes| ReturnString4["return String.class"]
    CheckField4 -->|No| CheckField5["keyElement = '受付開始年月日時' (Reception Start DateTime)"]
    CheckField5 -->|Yes| ReturnString5["return String.class"]
    CheckField5 -->|No| CheckField6["keyElement = '受付終了年月日時' (Reception End DateTime)"]
    CheckField6 -->|Yes| ReturnString6["return String.class"]
    CheckField6 -->|No| CheckNested1["keyElement = 'データ抽出項目設定条件一覧照会（イベントBP）詳細' (Data Extraction Item Settings Panel Details)"]

    CheckNested1 -->|Yes| NestedProcess1["Extract keyRemain, parse index, recurse into nested bean"]
    CheckNested1 -->|No| CheckNested2["keyElement = '変更前データ抽出項目設定条件一覧照会（イベントBP）詳細' (Pre-Change Settings Panel Details)"]
    CheckNested2 -->|Yes| NestedProcess2["Extract keyRemain, parse index, recurse into nested bean"]
    CheckNested2 -->|No| CheckNested3["keyElement = 'データ抽出項目一覧照会詳細' (Data Extraction Item List Details)"]
    CheckNested3 -->|Yes| NestedProcess3["Extract keyRemain, parse index, recurse into nested bean"]
    CheckNested3 -->|No| CheckField7["keyElement = '検索フラグ' (Search Flag)"]

    CheckField7 -->|Yes| CheckSub7["subkey = value/state/enable"]
    CheckSub7 --> Return7a["return String.class or Boolean.class"]

    CheckField7 -->|No| CheckField8["keyElement = '削除フラグ' (Delete Flag)"]
    CheckField8 -->|Yes| ReturnString8["return String.class or Boolean.class"]
    CheckField8 -->|No| CheckField9["keyElement = 'リセットフラグ' (Reset Flag)"]
    CheckField9 -->|Yes| ReturnString9["return String.class or Boolean.class"]
    CheckField9 -->|No| CheckField10["keyElement = '詳細表示フラグ' (Detail Display Flag)"]
    CheckField10 -->|Yes| ReturnString10["return String.class or Boolean.class"]
    CheckField10 -->|No| CheckField11["keyElement = '検索エラーフラグ（0件）' (Search Error Flag (0 results))"]
    CheckField11 -->|Yes| ReturnString11["return String.class"]
    CheckField11 -->|No| CheckField12["keyElement = '処理区分' (Process Category)"]
    CheckField12 -->|Yes| ReturnString12["return String.class or Boolean.class"]
    CheckField12 -->|No| CheckField13["keyElement = '検索ボタン使用可否' (Search Button Enable/Disable)"]
    CheckField13 -->|Yes| ReturnString13["return String.class"]
    CheckField13 -->|No| CheckField14["keyElement = '登録ボタン使用可否' (Registration Button Enable/Disable)"]
    CheckField14 -->|Yes| ReturnString14["return String.class"]
    CheckField14 -->|No| CheckField15["keyElement = '削除ボタン使用可否' (Delete Button Enable/Disable)"]
    CheckField15 -->|Yes| ReturnString15["return String.class"]
    CheckField15 -->|No| ReturnNull2["return null"]

    ReturnNull1 --> END(["End"])
    ReturnString1 --> END
    ReturnString2 --> END
    ReturnString3 --> END
    ReturnString4 --> END
    ReturnString5 --> END
    ReturnString6 --> END
    NestedProcess1 --> END
    NestedProcess2 --> END
    NestedProcess3 --> END
    CallTypeCommon --> END
    ReturnString8 --> END
    ReturnString9 --> END
    ReturnString10 --> END
    ReturnString11 --> END
    ReturnString12 --> END
    ReturnString13 --> END
    ReturnString14 --> END
    ReturnString15 --> END
    ReturnNull2 --> END
```

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `key` | `String` | The hierarchical item path (フィールド名) that identifies which data field's type is being requested. Encodes a dotted slash-separated path like `"Data Extraction Item Settings Panel Details/principleList/0/principleName"`. The path may reference a simple scalar field, a nested list element, or a common-info view item (prefixed with `//`). It determines the entire processing branch taken by this method. |
| 2 | `subkey` | `String` | The sub-property descriptor within the field identified by `key`. Typically one of `"value"` (the field's data value type), `"state"` (the field's UI state type, e.g., enabled/disabled), `"enable"` (the field's enable/disable flag type). For nested data type beans, it resolves to the child field name within the nested bean. |
| - | `dchskm_sete_jkn_list_list` | `List<X33VDataTypeBeanInterface>` | Instance field — list of data extraction item settings panel (Event BP) detail beans. Used in Block 4 to resolve index-based access into nested bean list items. |
| - | `bf_dchskm_sete_jkn_list_list` | `List<X33VDataTypeBeanInterface>` | Instance field — list of pre-change data extraction item settings panel (Event BP) detail beans. Used in Block 5 for the same purpose. |
| - | `dchskm_list_list` | `List<X33VDataTypeBeanInterface>` | Instance field — list of data extraction item list detail beans. Used in Block 6 for index-based list access. |

## 4. CRUD Operations / Called Services

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

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| - | `KKW22501SFBean.typeModelData` | KKW22501SFBean | - | Recursive call to `typeModelData` on nested data type bean instances (X33VDataTypeBeanInterface) for list items at index `tmpIndex`. This is a type resolution delegation, not a CRUD operation. |
| - | `super.typeCommonInfoData` | (Parent class) | - | Delegates to the superclass implementation for common-info view items (key path starts with `//`). Handles shared metadata fields like common business info fields. |
| - | `JKKAdEditCC.substring` | JKKAdEditCC | - | Calls `substring` in `JKKAdEditCC` |
| - | `JKKAdEdit.substring` | JKKAdEdit | - | Calls `substring` in `JKKAdEdit` |
| - | `JKKTelnoInfoAddMapperCC.substring` | JKKTelnoInfoAddMapperCC | - | Calls `substring` in `JKKTelnoInfoAddMapperCC` |
| - | `JDKejbStringEdit.substring` | JDKejbStringEdit | - | Calls `substring` in `JDKejbStringEdit` |

This method performs **no database or entity operations**. It is purely a **type introspection / routing utility** that resolves `Class<?>` return types for data model fields. All its called methods are either:
- Recursive type model data lookups on nested bean instances (delegation within the view model tree)
- A superclass delegation for common-info view items
- String manipulation via `indexOf` and `substring` for path parsing

## 5. Dependency Trace

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

No screen/batch entry points found within 8 hops. Direct callers found: 1 methods.
Terminal operations from this method: `typeModelData` [-], `typeModelData` [-], `substring` [-], `substring` [-], `substring` [-], `substring` [-], `substring` [-], `substring` [-], `substring` [-], `substring` [-], `substring` [-], `substring` [-], `substring` [-], `substring` [-], `typeModelData` [-], `typeModelData` [-], `substring` [-], `substring` [-], `substring` [-], `substring` [-]

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Internal (KKW22501SF) | `KKW22501SFBean.typeModelData` (self-recursive + nested bean recursion) | `typeModelData [R] ViewDataTypeBean` (recursive type resolution) |

The `typeModelData` method is a framework-level utility called during the **data model initialization and UI rendering phase** of the KKW22501SF screen. It is called both by the parent bean itself (when parsing nested paths like `"dchskm_sete_jkn_list/0/..."`) and by nested data type bean instances implementing `X33VDataTypeBeanInterface`. It does not participate in direct CRUD — instead, it resolves types for the data binding framework to know what UI components to render and what validation rules to apply.

## 6. Per-Branch Detail Blocks

**Block 1** — [IF] `(key == null)` (L1439)

> If the key is null, return null immediately. No further processing is performed.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null;` // key is null — cannot resolve type |

**Block 2** — [ELSE-IF] `(subkey == null)` (L1444)

> If subkey is null, normalize it to an empty string. This ensures downstream comparisons against subkey never encounter a null reference.

| # | Type | Code |
|---|------|------|
| 1 | SET | `subkey = new String("");` // normalize null subkey to empty string |

**Block 3** — [IF] `(separaterPoint == 0)` i.e., `key.indexOf("//") == 0` (L1450)

> Checks if the key starts with `//`, which indicates a common-info view item. If so, delegates to the superclass implementation `typeCommonInfoData`.

| # | Type | Code |
|---|------|------|
| 1 | SET | `String keyElement;` // declaration |
| 2 | SET | `int separaterPoint = key.indexOf("//");` // check if key is for common-info view |
| 3 | CALL | `return super.typeCommonInfoData(key);` // delegate common-info handling to parent |

**Block 4** — [IF] `(separaterPoint > 0)` — key contains a `/` separator (L1457)

> Extracts the first element from the key path. If the key is a nested path like `"principleList/0/principleName"`, `keyElement` becomes `"principleList"`. Otherwise (no separator found), the entire key is the field name.

| # | Type | Code |
|---|------|------|
| 1 | SET | `separaterPoint = key.indexOf("/");` // search for first '/' separator |
| 2 | SET | `keyElement = key.substring(0, separaterPoint);` // extract first path segment (first field name) |
| 3 | SET | `keyElement = key;` // no separator found — key itself is the field name |

**Block 5** — [IF] `(keyElement.equals("代理店コード"))` — Agent Code field (L1465)

> Handles the String field "代理店コード" (Agent Code / Item ID: `search_agnt_cd`). For subkey `"value"` or `"state"`, returns `String.class`.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` — data value type |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` — state status (subkey is "state") |
| 4 | RETURN | `return String.class;` |

**Block 6** — [ELSE-IF] `(keyElement.equals("表示用データ抽出項目コード"))` — Display Data Extraction Item Code (L1473)

> Handles the String field "表示用データ抽出項目コード" (Item ID: `search_campaign_cd`).

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` — state status |
| 4 | RETURN | `return String.class;` |

**Block 7** — [ELSE-IF] `(keyElement.equals("データ抽出項目コード（登録用"))` — Data Extraction Item Code for Registration (L1481)

> Handles the String field "データ抽出項目コード（登録用）" (Item ID: `search_dchskm_cd`).

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` — state status |
| 4 | RETURN | `return String.class;` |

**Block 8** — [ELSE-IF] `(keyElement.equals("データ抽出項目名"))` — Data Extraction Item Name (L1489)

> Handles the String field "データ抽出項目名" (Item ID: `search_campaign_nm`).

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` — state status |
| 4 | RETURN | `return String.class;` |

**Block 9** — [ELSE-IF] `(keyElement.equals("受付開始年月日時"))` — Reception Start DateTime (L1497)

> Handles the String field "受付開始年月日時" (Item ID: `agnt_set_campaign_staymd`).

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` — state status |
| 4 | RETURN | `return String.class;` |

**Block 10** — [ELSE-IF] `(keyElement.equals("受付終了年月日時"))` — Reception End DateTime (L1505)

> Handles the String field "受付終了年月日時" (Item ID: `agnt_set_campaign_endymd`).

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` — state status |
| 4 | RETURN | `return String.class;` |

**Block 11** — [ELSE-IF] `(keyElement.equals("データ抽出項目設定条件一覧照会（イベントBP）詳細"))` — Data Extraction Item Settings Panel (Event BP) Details (L1513)

> Handles a **data type bean list** field. The key path encodes `"FieldName/index/childField"`. First, extracts the remainder of the path after the first `/`. If `keyRemain` is `"*"`, returns `Integer.class` (meaning: the type of the list element count). Otherwise, parses the index as an integer, validates bounds against `dchskm_sete_jkn_list_list.size()`, casts the list element to `X33VDataTypeBeanInterface`, and recursively calls `typeModelData` on it with the remaining path and subkey.

| # | Type | Code |
|---|------|------|
| 1 | SET | `String keyRemain = key.substring(separaterPoint + 1);` // get remainder after first '/' |
| 2 | IF | `keyRemain.equals("*")` — wildcard: asking for list element count type |
| 3 | RETURN | `return Integer.class;` // type of list element count |
| 4 | SET | `separaterPoint = keyRemain.indexOf("/");` // find next separator |
| 5 | IF | `separaterPoint <= 0` — no more separators found or invalid path |
| 6 | RETURN | `return null;` // invalid format |
| 7 | SET | `keyElement = keyRemain.substring(0, separaterPoint);` // extract index string |
| 8 | SET | `Integer tmpIndexInt = null;` // declaration |
| 9 | TRY | `tmpIndexInt = Integer.valueOf(keyElement);` // parse index as integer |
| 10 | CATCH | `NumberFormatException e` — index is not a numeric string |
| 11 | RETURN | `return null;` // invalid index |
| 12 | IF | `tmpIndexInt == null` — (defensive check) |
| 13 | RETURN | `return null;` |
| 14 | SET | `int tmpIndex = tmpIndexInt.intValue();` // convert to primitive int |
| 15 | IF | `tmpIndex < 0 || tmpIndex >= dchskm_sete_jkn_list_list.size()` — out of bounds |
| 16 | RETURN | `return null;` // index exceeds list count |
| 17 | SET | `keyElement = keyRemain.substring(separaterPoint + 1);` // extract child field name |
| 18 | CALL | `return ((X33VDataTypeBeanInterface)dchskm_sete_jkn_list_list.get(tmpIndex)).typeModelData(keyElement, subkey);` // delegate to nested bean |

**Block 12** — [ELSE-IF] `(keyElement.equals("変更前データ抽出項目設定条件一覧照会（イベントBP）詳細"))` — Pre-Change Data Extraction Item Settings Panel (Event BP) Details (L1558)

> Handles a **data type bean list** field for pre-change data. Same structure as Block 11, but uses `bf_dchskm_sete_jkn_list_list`.

| # | Type | Code |
|---|------|------|
| 1 | SET | `String keyRemain = key.substring(separaterPoint + 1);` // get remainder after first '/' |
| 2 | IF | `keyRemain.equals("*")` — wildcard |
| 3 | RETURN | `return Integer.class;` |
| 4 | SET | `separaterPoint = keyRemain.indexOf("/");` // find next separator |
| 5 | IF | `separaterPoint <= 0` — invalid path |
| 6 | RETURN | `return null;` |
| 7 | SET | `keyElement = keyRemain.substring(0, separaterPoint);` // extract index |
| 8 | SET | `Integer tmpIndexInt = null;` |
| 9 | TRY | `tmpIndexInt = Integer.valueOf(keyElement);` |
| 10 | CATCH | `NumberFormatException e` |
| 11 | RETURN | `return null;` |
| 12 | IF | `tmpIndexInt == null` |
| 13 | RETURN | `return null;` |
| 14 | SET | `int tmpIndex = tmpIndexInt.intValue();` |
| 15 | IF | `tmpIndex < 0 || tmpIndex >= bf_dchskm_sete_jkn_list_list.size()` — out of bounds |
| 16 | RETURN | `return null;` |
| 17 | SET | `keyElement = keyRemain.substring(separaterPoint + 1);` // extract child field name |
| 18 | CALL | `return ((X33VDataTypeBeanInterface)bf_dchskm_sete_jkn_list_list.get(tmpIndex)).typeModelData(keyElement, subkey);` |

**Block 13** — [ELSE-IF] `(keyElement.equals("データ抽出項目一覧照会詳細"))` — Data Extraction Item List Details (L1603)

> Handles a **data type bean list** field for data extraction item list details. Same structure as Blocks 11 and 12, but uses `dchskm_list_list`.

| # | Type | Code |
|---|------|------|
| 1 | SET | `String keyRemain = key.substring(separaterPoint + 1);` // get remainder after first '/' |
| 2 | IF | `keyRemain.equals("*")` — wildcard |
| 3 | RETURN | `return Integer.class;` |
| 4 | SET | `separaterPoint = keyRemain.indexOf("/");` // find next separator |
| 5 | IF | `separaterPoint <= 0` — invalid path |
| 6 | RETURN | `return null;` |
| 7 | SET | `keyElement = keyRemain.substring(0, separaterPoint);` // extract index |
| 8 | SET | `Integer tmpIndexInt = null;` |
| 9 | TRY | `tmpIndexInt = Integer.valueOf(keyElement);` |
| 10 | CATCH | `NumberFormatException e` |
| 11 | RETURN | `return null;` |
| 12 | IF | `tmpIndexInt == null` |
| 13 | RETURN | `return null;` |
| 14 | SET | `int tmpIndex = tmpIndexInt.intValue();` |
| 15 | IF | `tmpIndex < 0 || tmpIndex >= dchskm_list_list.size()` — out of bounds |
| 16 | RETURN | `return null;` |
| 17 | SET | `keyElement = keyRemain.substring(separaterPoint + 1);` // extract child field name |
| 18 | CALL | `return ((X33VDataTypeBeanInterface)dchskm_list_list.get(tmpIndex)).typeModelData(keyElement, subkey);` |

**Block 14** — [ELSE-IF] `(keyElement.equals("検索フラグ"))` — Search Flag (L1648)

> Handles the String field "検索フラグ" (Search Flag / Item ID: `search_flg`). Supports subkeys: `"value"` → `String.class`, `"enable"` → `Boolean.class`, `"state"` → `String.class`.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE-IF | `subkey.equalsIgnoreCase("state")` — state status |
| 6 | RETURN | `return String.class;` |

**Block 15** — [ELSE-IF] `(keyElement.equals("削除フラグ"))` — Delete Flag (L1659)

> Handles the String field "削除フラグ" (Delete Flag / Item ID: `del_flg`). Same subkey structure as Block 14.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE-IF | `subkey.equalsIgnoreCase("state")` — state status |
| 6 | RETURN | `return String.class;` |

**Block 16** — [ELSE-IF] `(keyElement.equals("リセットフラグ"))` — Reset Flag (L1670)

> Handles the String field "リセットフラグ" (Reset Flag / Item ID: `reset_flg`). Same subkey structure.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE-IF | `subkey.equalsIgnoreCase("state")` — state status |
| 6 | RETURN | `return String.class;` |

**Block 17** — [ELSE-IF] `(keyElement.equals("詳細表示フラグ"))` — Detail Display Flag (L1681)

> Handles the String field "詳細表示フラグ" (Detail Display Flag / Item ID: `dtl_dsp_flg`). Same subkey structure.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE-IF | `subkey.equalsIgnoreCase("state")` — state status |
| 6 | RETURN | `return String.class;` |

**Block 18** — [ELSE-IF] `(keyElement.equals("検索エラーフラグ（0件"))` — Search Error Flag (0 Results) (L1692)

> Handles the String field "検索エラーフラグ（0件）" (Item ID: `search_err_flg_zero`). Only supports `"value"` and `"state"` subkeys (no `"enable"`).

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` — state status |
| 4 | RETURN | `return String.class;` |

**Block 19** — [ELSE-IF] `(keyElement.equals("処理区分"))` — Process Category (L1701)

> Handles the String field "処理区分" (Process Category / Item ID: `process_kbn`). Supports `"value"`, `"enable"`, and `"state"` subkeys.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE-IF | `subkey.equalsIgnoreCase("state")` — state status |
| 6 | RETURN | `return String.class;` |

**Block 20** — [ELSE-IF] `(keyElement.equals("検索ボタン使用可否"))` — Search Button Enable/Disable (L1712)

> Handles the String field "検索ボタン使用可否" (Item ID: `search_btn_disabled`). Only supports `"value"` and `"state"` subkeys.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` — state status |
| 4 | RETURN | `return String.class;` |

**Block 21** — [ELSE-IF] `(keyElement.equals("登録ボタン使用可否"))` — Registration Button Enable/Disable (L1721)

> Handles the String field "登録ボタン使用可否" (Item ID: `add_cfm_btn_disabled`). Only supports `"value"` and `"state"` subkeys.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` — state status |
| 4 | RETURN | `return String.class;` |

**Block 22** — [ELSE-IF] `(keyElement.equals("削除ボタン使用可否"))` — Delete Button Enable/Disable (L1730)

> Handles the String field "削除ボタン使用可否" (Item ID: `del_cfm_btn_disabled`). Only supports `"value"` and `"state"` subkeys.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` — state status |
| 4 | RETURN | `return String.class;` |

**Block 23** — [CATCH-ALL] (L1733)

> If no field matches, return null. This is the default fallback for unrecognized item paths.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null;` // no matching field found — return null |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `代理店コード` | Field | Agent Code — the identification code for a sales agent / distributor (Item ID: `search_agnt_cd`) |
| `表示用データ抽出項目コード` | Field | Display Data Extraction Item Code — item code used for data extraction in display contexts (Item ID: `search_campaign_cd`) |
| `データ抽出項目コード（登録用）` | Field | Data Extraction Item Code for Registration — item code used when registering data extraction criteria (Item ID: `search_dchskm_cd`) |
| `データ抽出項目名` | Field | Data Extraction Item Name — the display name of a data extraction item (Item ID: `search_campaign_nm`) |
| `受付開始年月日時` | Field | Reception Start Date/Time — the start date and time when service reception begins (Item ID: `agnt_set_campaign_staymd`) |
| `受付終了年月日時` | Field | Reception End Date/Time — the end date and time when service reception closes (Item ID: `agnt_set_campaign_endymd`) |
| `データ抽出項目設定条件一覧照会（イベントBP）詳細` | Field | Data Extraction Item Settings Panel Details — a nested bean list for the Event BP (Business Process) data extraction settings panel configuration |
| `変更前データ抽出項目設定条件一覧照会（イベントBP）詳細` | Field | Pre-Change Data Extraction Item Settings Panel Details — a nested bean list for the pre-change state of Event BP data extraction settings |
| `データ抽出項目一覧照会詳細` | Field | Data Extraction Item List Details — a nested bean list for the data extraction item lookup panel |
| `検索フラグ` | Field | Search Flag — a UI flag controlling search functionality (Item ID: `search_flg`) |
| `削除フラグ` | Field | Delete Flag — a UI flag controlling delete functionality (Item ID: `del_flg`) |
| `リセットフラグ` | Field | Reset Flag — a UI flag controlling reset functionality (Item ID: `reset_flg`) |
| `詳細表示フラグ` | Field | Detail Display Flag — a UI flag controlling whether detail views are displayed (Item ID: `dtl_dsp_flg`) |
| `検索エラーフラグ（0件）` | Field | Search Error Flag (0 Results) — a flag indicating when a search returns zero results (Item ID: `search_err_flg_zero`) |
| `処理区分` | Field | Process Category — classifies the type of business process being performed (Item ID: `process_kbn`) |
| `検索ボタン使用可否` | Field | Search Button Enable/Disable — controls whether the search button is active (Item ID: `search_btn_disabled`) |
| `登録ボタン使用可否` | Field | Registration Button Enable/Disable — controls whether the registration button is active (Item ID: `add_cfm_btn_disabled`) |
| `削除ボタン使用可否` | Field | Delete Button Enable/Disable — controls whether the delete button is active (Item ID: `del_cfm_btn_disabled`) |
| `value` | Subkey | The data value type of a field — resolves to the type of the actual data stored in the field |
| `state` | Subkey | The UI state type of a field — resolves to the type representing the field's enabled/disabled/valid state |
| `enable` | Subkey | The field's enable/disable flag type — resolves to `Boolean.class` for toggleable UI controls |
| `X33VDataTypeBeanInterface` | Interface | Data type bean interface — defines the contract for nested view beans that support `typeModelData` recursion, enabling hierarchical type resolution |
| `//` | Convention | Common-info view prefix — when a key starts with `//`, it indicates the item belongs to the shared/common-info view, and processing is delegated to the superclass |
| Event BP | Business term | Event Business Process — a screen panel or process block that handles event-related business operations within the KKW22501SF screen |
| `dchskm_sete_jkn_list_list` | Field | Data extraction item settings criteria list panel list — instance field holding the list of nested bean items for the Event BP settings panel |
| `bf_dchskm_sete_jkn_list_list` | Field | Before-change data extraction item settings criteria list — instance field holding the list of nested bean items for the pre-change state |
| `dchskm_list_list` | Field | Data extraction item list — instance field holding the list of nested bean items for the item list panel |
| SF | Acronym | Screen Framework — the web screen framework used for enterprise application development |
| Bean | Pattern | JavaBean — a reusable component class following JavaBeans conventions (getters/setters, no-arg constructor) |
| Type View | Pattern | Data type view — a UI rendering abstraction that manages field type information, validation state, and UI properties independently from business data |
| Data Extraction | Business term | The operation of querying and filtering records based on specified criteria conditions in the screen |
