
# Business Logic — KKW22501SFBean.loadModelData() [309 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.KKW22501SF.KKW22501SFBean` |
| Layer | Web / Controller (UI model data routing) |
| Module | `KKW22501SF` (Package: `eo.web.webview.KKW22501SF`) |

## 1. Role

### KKW22501SFBean.loadModelData()

This method serves as the central **data access gateway** for the KKW22501SF screen, which handles **campaign-based data extraction query configuration** (データ抽出項目設定 — data extraction item settings) in a telecom service management system. It implements a **hierarchical key-based dispatch pattern** that routes incoming requests to the correct field value, state descriptor, or nested bean based on a slash-delimited key string and an optional subkey.

The method supports **three service categories**: (1) **Scalar String fields** such as search agent codes, campaign codes, date/time values, and status flags, which return either their raw value, enable/disable state, or UI state descriptor depending on the subkey; (2) **Data-type Bean lists** such as `dchskm_sete_jkn_list`, `bf_dchskm_sete_jkn_list`, and `dchskm_list`, which represent reusable compound data views (イベントBP — Event Business Process items) and support recursive nested access via slash-delimited indices; (3) **Common Info View fields** prefixed with `//` which are delegated to the superclass `loadCommonInfoData()` for shared metadata handling.

Within the larger system, this method is the **primary data provider** for the KKW22501SF screen's JavaScript-side form model. It is called by UI binding logic to populate form fields on initial load, re-render form states after AJAX updates, and resolve nested list item properties — making it the single entry point for all screen data retrieval.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["loadModelData key, subkey"])
    CHECK_NULL_KEY{"key == null?"}
    START --> CHECK_NULL_KEY
    CHECK_NULL_KEY -->|true| RET_NULL_1(["return null"])
    CHECK_NULL_KEY -->|false| CHECK_NULL_SUBKEY{"subkey == null?"}
    CHECK_NULL_SUBKEY -->|true| SET_EMPTY_SUBKEY["subkey = new String('')"]
    CHECK_NULL_SUBKEY -->|false| SEARCH_SLASH_1["separaterPoint = key.indexOf('//')"]
    SEARCH_SLASH_1 --> CHECK_COMMON_INFO{"separaterPoint == 0?"}
    CHECK_COMMON_INFO -->|true| CALL_SUPER["super.loadCommonInfoData(key)"]
    CHECK_COMMON_INFO -->|false| SEARCH_SLASH_2["separaterPoint = key.indexOf('/')"]
    SET_EMPTY_SUBKEY --> SEARCH_SLASH_2
    SEARCH_SLASH_2 --> CHECK_ROOT_ROOT{"separaterPoint > 0?"}
    CHECK_ROOT_ROOT -->|true| EXTRACT_ROOT["keyElement = key.substring(0, separaterPoint)"]
    CHECK_ROOT_ROOT -->|false| SET_ROOT["keyElement = key"]
    CHECK_ROOT_ROOT -->|true| EXTRACT_ROOT
    EXTRACT_ROOT --> ROUTE["Route by keyElement"]
    SET_ROOT --> ROUTE

    ROUTE --> AGENT_CD["代理店コード"]
    ROUTE --> CAMPAIGN_CD["表示用データ抽出項目コード"]
    ROUTE --> DCHSKM_CD["データ抽出項目コード<br/>（登録用）"]
    ROUTE --> CAMPAIGN_NM["データ抽出項目名"]
    ROUTE --> STAY_MD["受付開始年月日时分"]
    ROUTE --> ENDY_MD["受付終了年月日时分"]
    ROUTE --> DCHSKM_SET_E["データ抽出項目設定条件一覧<br/>照会（イベントBP）詳細"]
    ROUTE --> BF_DCHSKM_SET_E["変更前データ抽出項目設定条件一覧<br/>照会（イベントBP）詳細"]
    ROUTE --> DCHSKM_LIST["データ抽出項目一覧<br/>照会詳細"]
    ROUTE --> SEARCH_FLG["検索フラグ"]
    ROUTE --> DEL_FLG["削除フラグ"]
    ROUTE --> RESET_FLG["リセットフラグ"]
    ROUTE --> DTL_DSP_FLG["明細表示フラグ"]
    ROUTE --> SEARCH_ERR_FLG["検索エラーフラグ（0件）"]
    ROUTE --> PROCESS_KBN["処理区分"]
    ROUTE --> SEARCH_BTN["検索ボタン使用可否"]
    ROUTE --> ADD_CFM_BTN["登録ボタン使用可否"]
    ROUTE --> DEL_CFM_BTN["削除ボタン使用可否"]
    ROUTE --> UNKNOWN(["unknown - fallthrough"])

    AGENT_CD --> AGENT_VAL{"subkey.equalsIgnoreCase('value')?"}
    AGENT_VAL -->|true| RET_AGENT_VAL["return getSearch_agnt_cd_value()"]
    AGENT_VAL -->|false| AGENT_STATE{"subkey.equalsIgnoreCase('state')?"}
    AGENT_STATE -->|true| RET_AGENT_STATE["return getSearch_agnt_cd_state()"]
    AGENT_STATE -->|false| NEXT_1["(no match, fallthrough)"]
    NEXT_1 --> END_1(["return null at end"])

    CAMPAIGN_CD --> CAM_VAL{"subkey.equalsIgnoreCase('value')?"}
    CAM_VAL -->|true| RET_CAM_VAL["return getSearch_campaign_cd_value()"]
    CAM_VAL -->|false| CAM_STATE{"subkey.equalsIgnoreCase('state')?"}
    CAM_STATE -->|true| RET_CAM_STATE["return getSearch_campaign_cd_state()"]
    CAM_STATE -->|false| NEXT_2["(no match, fallthrough)"]
    NEXT_2 --> END_1

    DCHSKM_CD --> DCH_VAL{"subkey.equalsIgnoreCase('value')?"}
    DCH_VAL -->|true| RET_DCH_VAL["return getSearch_dchskm_cd_value()"]
    DCH_VAL -->|false| DCH_STATE{"subkey.equalsIgnoreCase('state')?"}
    DCH_STATE -->|true| RET_DCH_STATE["return getSearch_dchskm_cd_state()"]
    DCH_STATE -->|false| NEXT_3["(no match, fallthrough)"]
    NEXT_3 --> END_1

    CAMPAIGN_NM --> CAME_VAL{"subkey.equalsIgnoreCase('value')?"}
    CAME_VAL -->|true| RET_CAME_VAL["return getSearch_campaign_nm_value()"]
    CAME_VAL -->|false| CAME_STATE{"subkey.equalsIgnoreCase('state')?"}
    CAME_STATE -->|true| RET_CAME_STATE["return getSearch_campaign_nm_state()"]
    CAME_STATE -->|false| NEXT_4["(no match, fallthrough)"]
    NEXT_4 --> END_1

    STAY_MD --> STAY_VAL{"subkey.equalsIgnoreCase('value')?"}
    STAY_VAL -->|true| RET_STAY_VAL["return getAgnt_set_campaign_staymd_value()"]
    STAY_VAL -->|false| STAY_STATE{"subkey.equalsIgnoreCase('state')?"}
    STAY_STATE -->|true| RET_STAY_STATE["return getAgnt_set_campaign_staymd_state()"]
    STAY_STATE -->|false| NEXT_5["(no match, fallthrough)"]
    NEXT_5 --> END_1

    ENDY_MD --> ENDY_VAL{"subkey.equalsIgnoreCase('value')?"}
    ENDY_VAL -->|true| RET_ENDY_VAL["return getAgnt_set_campaign_endymd_value()"]
    ENDY_VAL -->|false| ENDY_STATE{"subkey.equalsIgnoreCase('state')?"}
    ENDY_STATE -->|true| RET_ENDY_STATE["return getAgnt_set_campaign_endymd_state()"]
    ENDY_STATE -->|false| NEXT_6["(no match, fallthrough)"]
    NEXT_6 --> END_1

    DCHSKM_SET_E --> EXTRACT_REMAIN["keyRemain = key.substring(separaterPoint + 1)"]
    EXTRACT_REMAIN --> STAR_CHECK_A{"keyRemain.equals('*')?"}
    STAR_CHECK_A -->|true| RET_A["return list size (dchskm_sete_jkn_list_list)"]
    STAR_CHECK_A -->|false| SEARCH_SLASH_A["separaterPoint = keyRemain.indexOf('/')"]
    SEARCH_SLASH_A --> CHECK_SEP_A{"separaterPoint <= 0?"}
    CHECK_SEP_A -->|true| RET_NULL_A["return null"]
    CHECK_SEP_A -->|false| EXTRACT_INDEX_A["keyElement = keyRemain.substring(0, separaterPoint)"]
    CHECK_SEP_A -->|false| EXTRACT_INDEX_A
    CHECK_SEP_A -->|true| RET_NULL_A
    EXTRACT_INDEX_A --> TRY_PARSE_A["try { tmpIndexInt = Integer.valueOf(keyElement) }"]
    TRY_PARSE_A --> CATCH_A{"NumberFormatException?"}
    CATCH_A -->|true| RET_CATCH_A["return null"]
    CATCH_A -->|false| BOUNDS_A{"tmpIndex < 0 or tmpIndex >= list.size()?"}
    BOUNDS_A -->|true| RET_BOUNDS_A["return null"]
    BOUNDS_A -->|false| EXTRACT_SUBKEY_A["keyElement = keyRemain.substring(separaterPoint + 1)"]
    BOUNDS_A -->|true| RET_BOUNDS_A
    BOUNDS_A -->|false| EXTRACT_SUBKEY_A
    EXTRACT_SUBKEY_A --> DISPATCH_A["delegate to child bean.loadModelData(keyElement, subkey)"]
    DISPATCH_A --> END_A(["return child result"])
    RET_A --> END_A
    RET_NULL_A --> END_A
    RET_CATCH_A --> END_A
    RET_BOUNDS_A --> END_A
    RET_NULL_A --> END_A
    CATCH_A -->|true| RET_CATCH_A

    BF_DCHSKM_SET_E --> EXTRACT_REMAIN_B["keyRemain = key.substring(separaterPoint + 1)"]
    EXTRACT_REMAIN_B --> STAR_CHECK_B{"keyRemain.equals('*')?"}
    STAR_CHECK_B -->|true| RET_B["return list size (bf_dchskm_sete_jkn_list_list)"]
    STAR_CHECK_B -->|false| SEARCH_SLASH_B["separaterPoint = keyRemain.indexOf('/')"]
    SEARCH_SLASH_B --> CHECK_SEP_B{"separaterPoint <= 0?"}
    CHECK_SEP_B -->|true| RET_NULL_B["return null"]
    CHECK_SEP_B -->|false| EXTRACT_INDEX_B["keyElement = keyRemain.substring(0, separaterPoint)"]
    CHECK_SEP_B -->|false| EXTRACT_INDEX_B
    CHECK_SEP_B -->|true| RET_NULL_B
    EXTRACT_INDEX_B --> TRY_PARSE_B["try { tmpIndexInt = Integer.valueOf(keyElement) }"]
    TRY_PARSE_B --> CATCH_B{"NumberFormatException?"}
    CATCH_B -->|true| RET_CATCH_B["return null"]
    CATCH_B -->|false| BOUNDS_B{"tmpIndex < 0 or tmpIndex >= list.size()?"}
    BOUNDS_B -->|true| RET_BOUNDS_B["return null"]
    BOUNDS_B -->|false| EXTRACT_SUBKEY_B["keyElement = keyRemain.substring(separaterPoint + 1)"]
    BOUNDS_B -->|true| RET_BOUNDS_B
    BOUNDS_B -->|false| EXTRACT_SUBKEY_B
    EXTRACT_SUBKEY_B --> DISPATCH_B["delegate to child bean.loadModelData(keyElement, subkey)"]
    DISPATCH_B --> END_B(["return child result"])
    RET_B --> END_B
    RET_NULL_B --> END_B
    RET_CATCH_B --> END_B
    RET_BOUNDS_B --> END_B

    DCHSKM_LIST --> EXTRACT_REMAIN_C["keyRemain = key.substring(separaterPoint + 1)"]
    EXTRACT_REMAIN_C --> STAR_CHECK_C{"keyRemain.equals('*')?"}
    STAR_CHECK_C -->|true| RET_C["return list size (dchskm_list_list)"]
    STAR_CHECK_C -->|false| SEARCH_SLASH_C["separaterPoint = keyRemain.indexOf('/')"]
    SEARCH_SLASH_C --> CHECK_SEP_C{"separaterPoint <= 0?"}
    CHECK_SEP_C -->|true| RET_NULL_C["return null"]
    CHECK_SEP_C -->|false| EXTRACT_INDEX_C["keyElement = keyRemain.substring(0, separaterPoint)"]
    CHECK_SEP_C -->|false| EXTRACT_INDEX_C
    CHECK_SEP_C -->|true| RET_NULL_C
    EXTRACT_INDEX_C --> TRY_PARSE_C["try { tmpIndexInt = Integer.valueOf(keyElement) }"]
    TRY_PARSE_C --> CATCH_C{"NumberFormatException?"}
    CATCH_C -->|true| RET_CATCH_C["return null"]
    CATCH_C -->|false| BOUNDS_C{"tmpIndex < 0 or tmpIndex >= list.size()?"}
    BOUNDS_C -->|true| RET_BOUNDS_C["return null"]
    BOUNDS_C -->|false| EXTRACT_SUBKEY_C["keyElement = keyRemain.substring(separaterPoint + 1)"]
    BOUNDS_C -->|true| RET_BOUNDS_C
    BOUNDS_C -->|false| EXTRACT_SUBKEY_C
    EXTRACT_SUBKEY_C --> DISPATCH_C["delegate to child bean.loadModelData(keyElement, subkey)"]
    DISPATCH_C --> END_C(["return child result"])
    RET_C --> END_C
    RET_NULL_C --> END_C
    RET_CATCH_C --> END_C
    RET_BOUNDS_C --> END_C

    SEARCH_FLG --> FLG_VAL{"subkey.equalsIgnoreCase('value')?"}
    FLG_VAL -->|true| RET_FLG_VAL["return getSearch_flg_value()"]
    FLG_VAL -->|false| FLG_EN{"subkey.equalsIgnoreCase('enable')?"}
    FLG_EN -->|true| RET_FLG_EN["return getSearch_flg_enabled()"]
    FLG_EN -->|false| FLG_ST{"subkey.equalsIgnoreCase('state')?"}
    FLG_ST -->|true| RET_FLG_ST["return getSearch_flg_state()"]
    FLG_ST -->|false| NEXT_FLG["(no match, fallthrough)"]
    NEXT_FLG --> END_FLG(["return null at end"])

    DEL_FLG --> DEL_VAL{"subkey.equalsIgnoreCase('value')?"}
    DEL_VAL -->|true| RET_DEL_VAL["return getDel_flg_value()"]
    DEL_VAL -->|false| DEL_EN{"subkey.equalsIgnoreCase('enable')?"}
    DEL_EN -->|true| RET_DEL_EN["return getDel_flg_enabled()"]
    DEL_EN -->|false| DEL_ST{"subkey.equalsIgnoreCase('state')?"}
    DEL_ST -->|true| RET_DEL_ST["return getDel_flg_state()"]
    DEL_ST -->|false| NEXT_DEL["(no match, fallthrough)"]
    NEXT_DEL --> END_DEL(["return null at end"])

    RESET_FLG --> RST_VAL{"subkey.equalsIgnoreCase('value')?"}
    RST_VAL -->|true| RET_RST_VAL["return getReset_flg_value()"]
    RST_VAL -->|false| RST_EN{"subkey.equalsIgnoreCase('enable')?"}
    RST_EN -->|true| RET_RST_EN["return getReset_flg_enabled()"]
    RST_EN -->|false| RST_ST{"subkey.equalsIgnoreCase('state')?"}
    RST_ST -->|true| RET_RST_ST["return getReset_flg_state()"]
    RST_ST -->|false| NEXT_RST["(no match, fallthrough)"]
    NEXT_RST --> END_RST(["return null at end"])

    DTL_DSP_FLG --> DTL_VAL{"subkey.equalsIgnoreCase('value')?"}
    DTL_VAL -->|true| RET_DTL_VAL["return getDtl_dsp_flg_value()"]
    DTL_VAL -->|false| DTL_EN{"subkey.equalsIgnoreCase('enable')?"}
    DTL_EN -->|true| RET_DTL_EN["return getDtl_dsp_flg_enabled()"]
    DTL_EN -->|false| DTL_ST{"subkey.equalsIgnoreCase('state')?"}
    DTL_ST -->|true| RET_DTL_ST["return getDtl_dsp_flg_state()"]
    DTL_ST -->|false| NEXT_DTL["(no match, fallthrough)"]
    NEXT_DTL --> END_DTL(["return null at end"])

    SEARCH_ERR_FLG --> ERR_VAL{"subkey.equalsIgnoreCase('value')?"}
    ERR_VAL -->|true| RET_ERR_VAL["return getSearch_err_flg_zero_value()"]
    ERR_VAL -->|false| ERR_ST{"subkey.equalsIgnoreCase('state')?"}
    ERR_ST -->|true| RET_ERR_ST["return getSearch_err_flg_zero_state()"]
    ERR_ST -->|false| NEXT_ERR["(no match, fallthrough)"]
    NEXT_ERR --> END_ERR(["return null at end"])

    PROCESS_KBN --> PKB_VAL{"subkey.equalsIgnoreCase('value')?"}
    PKB_VAL -->|true| RET_PKB_VAL["return getProcess_kbn_value()"]
    PKB_VAL -->|false| PKB_EN{"subkey.equalsIgnoreCase('enable')?"}
    PKB_EN -->|true| RET_PKB_EN["return getProcess_kbn_enabled()"]
    PKB_EN -->|false| PKB_ST{"subkey.equalsIgnoreCase('state')?"}
    PKB_ST -->|true| RET_PKB_ST["return getProcess_kbn_state()"]
    PKB_ST -->|false| NEXT_PKB["(no match, fallthrough)"]
    NEXT_PKB --> END_PKB(["return null at end"])

    SEARCH_BTN --> SB_VAL{"subkey.equalsIgnoreCase('value')?"}
    SB_VAL -->|true| RET_SB_VAL["return getSearch_btn_disabled_value()"]
    SB_VAL -->|false| SB_ST{"subkey.equalsIgnoreCase('state')?"}
    SB_ST -->|true| RET_SB_ST["return getSearch_btn_disabled_state()"]
    SB_ST -->|false| NEXT_SB["(no match, fallthrough)"]
    NEXT_SB --> END_SB(["return null at end"])

    ADD_CFM_BTN --> AC_VAL{"subkey.equalsIgnoreCase('value')?"}
    AC_VAL -->|true| RET_AC_VAL["return getAdd_cfm_btn_disabled_value()"]
    AC_VAL -->|false| AC_ST{"subkey.equalsIgnoreCase('state')?"}
    AC_ST -->|true| RET_AC_ST["return getAdd_cfm_btn_disabled_state()"]
    AC_ST -->|false| NEXT_AC["(no match, fallthrough)"]
    NEXT_AC --> END_AC(["return null at end"])

    DEL_CFM_BTN --> DC_VAL{"subkey.equalsIgnoreCase('value')?"}
    DC_VAL -->|true| RET_DC_VAL["return getDel_cfm_btn_disabled_value()"]
    DC_VAL -->|false| DC_ST{"subkey.equalsIgnoreCase('state')?"}
    DC_ST -->|true| RET_DC_ST["return getDel_cfm_btn_disabled_state()"]
    DC_ST -->|false| NEXT_DC["(no match, fallthrough)"]
    NEXT_DC --> END_DC(["return null at end"])

    UNKNOWN --> END_UNKNOWN(["return null at end"])
```

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `key` | `String` | A slash-delimited hierarchical path identifying which screen data field to retrieve. The format supports three modes: (a) Simple field name (e.g. `"代理店コード"` for agent code), (b) Nested list path (e.g. `"データ抽出項目設定条件一覧照会（イベントBP）詳細/0/サブキー"` for the subkey of list index 0), (c) Common info view path (e.g. `"//sharedField"`). The first element (root key) determines the field category and dispatch target. |
| 2 | `subkey` | `String` | A qualifier that refines what aspect of the field to return. For scalar fields it accepts `"value"` (the field's actual data), `"state"` (UI state descriptor), or `"enable"` (enabled/disabled toggle for flag fields). For nested bean lists it serves as the field name delegated to the child bean. When `null`, it is coerced to an empty string. |

**Instance fields read by this method:**

| Field | Type | Usage |
|-------|------|-------|
| `dchskm_sete_jkn_list_list` | `List<X33VDataTypeBeanInterface>` | Active data extraction item settings list — used in nested dispatch for `"データ抽出項目設定条件一覧照会（イベントBP）詳細"` |
| `bf_dchskm_sete_jkn_list_list` | `List<X33VDataTypeBeanInterface>` | Pre-modification data extraction item settings list — used in nested dispatch for `"変更前データ抽出項目設定条件一覧照会（イベントBP）詳細"` |
| `dchskm_list_list` | `List<X33VDataTypeBeanInterface>` | Data extraction item list — used in nested dispatch for `"データ抽出項目一覧照会詳細"` |

## 4. CRUD Operations / Called Services

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

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| R | `KKW22501SFBean.getSearch_agnt_cd_value` | KKW22501SFBean | - | Reads agent code search field value |
| R | `KKW22501SFBean.getSearch_agnt_cd_state` | KKW22501SFBean | - | Reads agent code search field UI state |
| R | `KKW22501SFBean.getSearch_campaign_cd_value` | KKW22501SFBean | - | Reads campaign code search field value |
| R | `KKW22501SFBean.getSearch_campaign_cd_state` | KKW22501SFBean | - | Reads campaign code search field UI state |
| R | `KKW22501SFBean.getSearch_dchskm_cd_value` | KKW22501SFBean | - | Reads data extraction item code (registration) field value |
| R | `KKW22501SFBean.getSearch_dchskm_cd_state` | KKW22501SFBean | - | Reads data extraction item code (registration) field UI state |
| R | `KKW22501SFBean.getSearch_campaign_nm_value` | KKW22501SFBean | - | Reads campaign name search field value |
| R | `KKW22501SFBean.getSearch_campaign_nm_state` | KKW22501SFBean | - | Reads campaign name search field UI state |
| R | `KKW22501SFBean.getAgnt_set_campaign_staymd_value` | KKW22501SFBean | - | Reads campaign start date/time value |
| R | `KKW22501SFBean.getAgnt_set_campaign_staymd_state` | KKW22501SFBean | - | Reads campaign start date/time UI state |
| R | `KKW22501SFBean.getAgnt_set_campaign_endymd_value` | KKW22501SFBean | - | Reads campaign end date/time value |
| R | `KKW22501SFBean.getAgnt_set_campaign_endymd_state` | KKW22501SFBean | - | Reads campaign end date/time UI state |
| R | `KKW22501SFBean.loadCommonInfoData` | Parent (X33V) | - | Delegates to parent superclass for common info view field retrieval |
| R | `KKW22501SFBean.getSearch_flg_value` | KKW22501SFBean | - | Reads search flag value |
| R | `KKW22501SFBean.getSearch_flg_enabled` | KKW22501SFBean | - | Reads search flag enabled state |
| R | `KKW22501SFBean.getSearch_flg_state` | KKW22501SFBean | - | Reads search flag UI state |
| R | `KKW22501SFBean.getDel_flg_value` | KKW22501SFBean | - | Reads delete flag value |
| R | `KKW22501SFBean.getDel_flg_enabled` | KKW22501SFBean | - | Reads delete flag enabled state |
| R | `KKW22501SFBean.getDel_flg_state` | KKW22501SFBean | - | Reads delete flag UI state |
| R | `KKW22501SFBean.getReset_flg_value` | KKW22501SFBean | - | Reads reset flag value |
| R | `KKW22501SFBean.getReset_flg_enabled` | KKW22501SFBean | - | Reads reset flag enabled state |
| R | `KKW22501SFBean.getReset_flg_state` | KKW22501SFBean | - | Reads reset flag UI state |
| R | `KKW22501SFBean.getDtl_dsp_flg_value` | KKW22501SFBean | - | Reads detail display flag value |
| R | `KKW22501SFBean.getDtl_dsp_flg_enabled` | KKW22501SFBean | - | Reads detail display flag enabled state |
| R | `KKW22501SFBean.getDtl_dsp_flg_state` | KKW22501SFBean | - | Reads detail display flag UI state |
| R | `KKW22501SFBean.getSearch_err_flg_zero_value` | KKW22501SFBean | - | Reads search error flag (zero results) value |
| R | `KKW22501SFBean.getSearch_err_flg_zero_state` | KKW22501SFBean | - | Reads search error flag (zero results) UI state |
| R | `KKW22501SFBean.getProcess_kbn_value` | KKW22501SFBean | - | Reads processing type value |
| R | `KKW22501SFBean.getProcess_kbn_enabled` | KKW22501SFBean | - | Reads processing type enabled state |
| R | `KKW22501SFBean.getProcess_kbn_state` | KKW22501SFBean | - | Reads processing type UI state |
| R | `KKW22501SFBean.getSearch_btn_disabled_value` | KKW22501SFBean | - | Reads search button disabled value |
| R | `KKW22501SFBean.getSearch_btn_disabled_state` | KKW22501SFBean | - | Reads search button disabled state |
| R | `KKW22501SFBean.getAdd_cfm_btn_disabled_value` | KKW22501SFBean | - | Reads registration button disabled value |
| R | `KKW22501SFBean.getAdd_cfm_btn_disabled_state` | KKW22501SFBean | - | Reads registration button disabled state |
| R | `KKW22501SFBean.getDel_cfm_btn_disabled_value` | KKW22501SFBean | - | Reads delete button disabled value |
| R | `KKW22501SFBean.getDel_cfm_btn_disabled_state` | KKW22501SFBean | - | Reads delete button disabled state |
| R | `X33VDataTypeBeanInterface.loadModelData` (child) | X33V (nested bean) | - | Recursive delegation to child bean for nested data-type view fields (lines 682, 749, 816) |

**Notes:**
- This method performs **no database writes, creates, updates, or deletes**. It is a pure **Read-only** data routing method.
- All scalar field accessors (`get*`) are internal bean getters that resolve values from the bean's model store.
- Three nested dispatch branches delegate to `X33VDataTypeBeanInterface.loadModelData()` on child beans, which recursively resolves sub-fields within compound data views (イベントBP items).
- No direct SC Codes or database tables are accessed — all data resides within the bean's in-memory model.

## 5. Dependency Trace

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

No screen/batch entry points found within 8 hops. Direct callers found: 4 methods.
Terminal operations from this method: `getDel_cfm_btn_disabled_state` [R], `getDel_cfm_btn_disabled_value` [R], `getAdd_cfm_btn_disabled_state` [R], `getAdd_cfm_btn_disabled_value` [R], `getSearch_btn_disabled_state` [R], `getSearch_btn_disabled_value` [R], `getProcess_kbn_state` [R], `getProcess_kbn_enabled` [R], `getProcess_kbn_value` [R], `getSearch_err_flg_zero_state` [R], `getSearch_err_flg_zero_value` [R], `getDtl_dsp_flg_state` [R], `getDtl_dsp_flg_enabled` [R], `getDtl_dsp_flg_value` [R], `getReset_flg_state` [R], `getReset_flg_enabled` [R], `getReset_flg_value` [R], `getDel_flg_state` [R], `getDel_flg_enabled` [R], `getDel_flg_value` [R], `getSearch_agnt_cd_state` [R], `getSearch_agnt_cd_value` [R], `getSearch_campaign_cd_state` [R], `getSearch_campaign_cd_value` [R], `getSearch_dchskm_cd_state` [R], `getSearch_dchskm_cd_value` [R], `getSearch_campaign_nm_state` [R], `getSearch_campaign_nm_value` [R], `getAgnt_set_campaign_staymd_state` [R], `getAgnt_set_campaign_staymd_value` [R], `getAgnt_set_campaign_endymd_state` [R], `getAgnt_set_campaign_endymd_value` [R], `getSearch_flg_state` [R], `getSearch_flg_enabled` [R], `getSearch_flg_value` [R]

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Method: `KKW22501SFBean.getJsflist_typelist_bf_dchskm_sete_jkn_list()` | `getJsflist_typelist_bf_dchskm_sete_jkn_list()` → `loadModelData(key, subkey)` | All 35+ terminal getters listed above [R] |
| 2 | Method: `KKW22501SFBean.getJsflist_typelist_dchskm_list()` | `getJsflist_typelist_dchskm_list()` → `loadModelData(key, subkey)` | All 35+ terminal getters listed above [R] |
| 3 | Method: `KKW22501SFBean.getJsflist_typelist_dchskm_sete_jkn_list()` | `getJsflist_typelist_dchskm_sete_jkn_list()` → `loadModelData(key, subkey)` | All 35+ terminal getters listed above [R] |
| 4 | Method: `KKW22501SFBean.loadModelData()` (no-arg) | `loadModelData()` (no-arg overload) → `loadModelData(key, subkey)` | All 35+ terminal getters listed above [R] |

**Analysis:** All callers are internal methods within `KKW22501SFBean`. No external screen/batch entry points were detected within 8 hops. This method is purely an **intra-bean data access utility** — the screen population logic calls these `getJsflist_*` methods, which in turn delegate to `loadModelData()` to resolve individual field values for the UI model.

## 6. Per-Branch Detail Blocks

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

Early return: if no key is provided, the method returns `null` immediately. This prevents null pointer exceptions during key parsing.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null;` // key is null — nothing to load |

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

Normalization: when subkey is null, replace it with an empty string to ensure safe string operations downstream.

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

**Block 3** — [IF] `key.indexOf("//") == 0` — Common Info View dispatch (L611)

Checks if the key starts with `//`, which is the convention for **shared/common info view** fields. If so, delegates entirely to the parent class implementation.

| # | Type | Code |
|---|------|------|
| 1 | SET | `separaterPoint = key.indexOf("//");` // checks if key is a common info view reference |
| 2 | IF | `separaterPoint == 0` → common info view key |
| 3 | CALL | `super.loadCommonInfoData(key);` // delegate to parent class for common info view handling |

**Block 4** — [ELSE] Root element extraction (L618-624)

Parses the hierarchical key by finding the first `/` separator. If a `/` exists, the first segment becomes `keyElement` (the root field name); otherwise the entire key is the root name.

| # | Type | Code |
|---|------|------|
| 1 | SET | `separaterPoint = key.indexOf("/");` // finds first slash to extract root element |
| 2 | IF | `separaterPoint > 0` → nested path, extract root |
| 3 | SET | `keyElement = key.substring(0, separaterPoint);` // extracts first element (e.g., "代理店コード" from "代理店コード/value") |
| 4 | ELSE | no slash → keyElement is the full key |
| 5 | SET | `keyElement = key;` // full key is the root element |

**Block 5** — [IF-ELSE CHAIN] Scalar field dispatch — String type fields

Routes to getter methods for simple String-type UI fields. Each branch checks `subkey.equalsIgnoreCase("value")` or `subkey.equalsIgnoreCase("state")`.

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

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | CALL | `return getSearch_agnt_cd_value();` // returns the agent code value |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` |
| 4 | CALL | `return getSearch_agnt_cd_state();` // returns the agent code UI state |

**Block 5.2** — [ELSE-IF] `keyElement.equals("表示用データ抽出項目コード")` (Campaign Code for Display) (L636)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | CALL | `return getSearch_campaign_cd_value();` // returns the campaign code |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` |
| 4 | CALL | `return getSearch_campaign_cd_state();` // returns the campaign code UI state |

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

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | CALL | `return getSearch_dchskm_cd_value();` // returns the data extraction item code (registration) |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` |
| 4 | CALL | `return getSearch_dchskm_cd_state();` // returns the registration item code UI state |

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

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | CALL | `return getSearch_campaign_nm_value();` // returns the data extraction item name |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` |
| 4 | CALL | `return getSearch_campaign_nm_state();` // returns the item name UI state |

**Block 5.5** — [ELSE-IF] `keyElement.equals("受付開始年月日时分")` (Campaign Start Date/Time) (L663)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | CALL | `return getAgnt_set_campaign_staymd_value();` // returns the campaign start date/time |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` |
| 4 | CALL | `return getAgnt_set_campaign_staymd_state();` // returns the start date/time UI state |

**Block 5.6** — [ELSE-IF] `keyElement.equals("受付終了年月日时分")` (Campaign End Date/Time) (L672)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | CALL | `return getAgnt_set_campaign_endymd_value();` // returns the campaign end date/time |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` |
| 4 | CALL | `return getAgnt_set_campaign_endymd_state();` // returns the end date/time UI state |

**Block 6** — [ELSE-IF] `keyElement.equals("データ抽出項目設定条件一覧照会（イベントBP）詳細")` — Nested data-type bean dispatch for active settings list (L681)

This block handles nested access into the `dchskm_sete_jkn_list_list` (data extraction item settings conditions list — Event BP items). The key format is `"データ抽出項目設定条件一覧照会（イベントBP）詳細/INDEX/fieldName"` where INDEX is a zero-based array index and fieldName is the sub-field name within the child bean.

| # | Type | Code |
|---|------|------|
| 1 | SET | `keyRemain = key.substring(separaterPoint + 1);` // extracts rest after first slash (e.g., "0/fieldName") |
| 2 | IF | `keyRemain.equals("*")` → list size request |
| 3 | CALL | `return Integer.valueOf(dchskm_sete_jkn_list_list.size());` // returns the number of items in the active settings list |
| 4 | ELSE | index-based access |
| 5 | SET | `separaterPoint = keyRemain.indexOf("/");` // finds next separator in remainder |
| 6 | IF | `separaterPoint <= 0` → invalid path |
| 7 | RETURN | `return null;` // no separator found or invalid format |
| 8 | SET | `keyElement = keyRemain.substring(0, separaterPoint);` // extracts the index string |
| 9 | TRY | `tmpIndexInt = Integer.valueOf(keyElement);` // parse index as integer |
| 10 | CATCH | `NumberFormatException e` → `return null;` // index is not a valid number |
| 11 | IF | `tmpIndexInt == null` |
| 12 | RETURN | `return null;` |
| 13 | SET | `tmpIndex = tmpIndexInt.intValue();` // convert to primitive int |
| 14 | IF | `tmpIndex < 0 || tmpIndex >= dchskm_sete_jkn_list_list.size()` → out of bounds |
| 15 | RETURN | `return null;` // index exceeds list size |
| 16 | SET | `keyElement = keyRemain.substring(separaterPoint + 1);` // extracts the sub-field name |
| 17 | CALL | `((X33VDataTypeBeanInterface)dchskm_sete_jkn_list_list.get(tmpIndex)).loadModelData(keyElement, subkey);` // delegates to child bean for sub-field resolution |

**Block 7** — [ELSE-IF] `keyElement.equals("変更前データ抽出項目設定条件一覧照会（イベントBP）詳細")` — Nested data-type bean dispatch for pre-modification settings list (L749)

Identical structure to Block 6 but operates on `bf_dchskm_sete_jkn_list_list` (前 = "before", i.e., pre-modification data). Used to display the state of settings before changes were made.

| # | Type | Code |
|---|------|------|
| 1 | SET | `keyRemain = key.substring(separaterPoint + 1);` // extracts rest after first slash |
| 2 | IF | `keyRemain.equals("*")` |
| 3 | CALL | `return Integer.valueOf(bf_dchskm_sete_jkn_list_list.size());` // returns size of pre-modification list |
| 4 | SET | `separaterPoint = keyRemain.indexOf("/");` // finds next separator |
| 5 | IF | `separaterPoint <= 0` |
| 6 | RETURN | `return null;` |
| 7 | SET | `keyElement = keyRemain.substring(0, separaterPoint);` // extracts index string |
| 8 | TRY | `tmpIndexInt = Integer.valueOf(keyElement);` // parse as integer |
| 9 | CATCH | `NumberFormatException e` → `return null;` |
| 10 | IF | `tmpIndexInt == null` |
| 11 | RETURN | `return null;` |
| 12 | SET | `tmpIndex = tmpIndexInt.intValue();` |
| 13 | IF | `tmpIndex < 0 || tmpIndex >= bf_dchskm_sete_jkn_list_list.size()` |
| 14 | RETURN | `return null;` |
| 15 | SET | `keyElement = keyRemain.substring(separaterPoint + 1);` // extracts sub-field name |
| 16 | CALL | `((X33VDataTypeBeanInterface)bf_dchskm_sete_jkn_list_list.get(tmpIndex)).loadModelData(keyElement, subkey);` // delegates to child bean |

**Block 8** — [ELSE-IF] `keyElement.equals("データ抽出項目一覧照会詳細")` — Nested data-type bean dispatch for data extraction item list (L816)

Identical structure to Blocks 6-7 but operates on `dchskm_list_list` (data extraction item list). Used for listing data extraction conditions.

| # | Type | Code |
|---|------|------|
| 1 | SET | `keyRemain = key.substring(separaterPoint + 1);` |
| 2 | IF | `keyRemain.equals("*")` |
| 3 | CALL | `return Integer.valueOf(dchskm_list_list.size());` // returns size of data extraction item list |
| 4 | SET | `separaterPoint = keyRemain.indexOf("/");` |
| 5 | IF | `separaterPoint <= 0` |
| 6 | RETURN | `return null;` |
| 7 | SET | `keyElement = keyRemain.substring(0, separaterPoint);` |
| 8 | TRY | `tmpIndexInt = Integer.valueOf(keyElement);` |
| 9 | CATCH | `NumberFormatException e` → `return null;` |
| 10 | IF | `tmpIndexInt == null` |
| 11 | RETURN | `return null;` |
| 12 | SET | `tmpIndex = tmpIndexInt.intValue();` |
| 13 | IF | `tmpIndex < 0 || tmpIndex >= dchskm_list_list.size()` |
| 14 | RETURN | `return null;` |
| 15 | SET | `keyElement = keyRemain.substring(separaterPoint + 1);` |
| 16 | CALL | `((X33VDataTypeBeanInterface)dchskm_list_list.get(tmpIndex)).loadModelData(keyElement, subkey);` // delegates to child bean |

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

Flag field with three subkey options: `value`, `enable`, and `state`.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | CALL | `return getSearch_flg_value();` |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | CALL | `return getSearch_flg_enabled();` // returns enabled/disabled toggle |
| 5 | ELSE-IF | `subkey.equalsIgnoreCase("state")` |
| 6 | CALL | `return getSearch_flg_state();` |

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

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | CALL | `return getDel_flg_value();` |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | CALL | `return getDel_flg_enabled();` |
| 5 | ELSE-IF | `subkey.equalsIgnoreCase("state")` |
| 6 | CALL | `return getDel_flg_state();` |

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

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | CALL | `return getReset_flg_value();` |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | CALL | `return getReset_flg_enabled();` |
| 5 | ELSE-IF | `subkey.equalsIgnoreCase("state")` |
| 6 | CALL | `return getReset_flg_state();` |

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

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | CALL | `return getDtl_dsp_flg_value();` |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | CALL | `return getDtl_dsp_flg_enabled();` |
| 5 | ELSE-IF | `subkey.equalsIgnoreCase("state")` |
| 6 | CALL | `return getDtl_dsp_flg_state();` |

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

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | CALL | `return getSearch_err_flg_zero_value();` |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` |
| 4 | CALL | `return getSearch_err_flg_zero_state();` |

**Block 14** — [ELSE-IF] `keyElement.equals("処理区分")` (Processing Type) (L882)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | CALL | `return getProcess_kbn_value();` |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | CALL | `return getProcess_kbn_enabled();` |
| 5 | ELSE-IF | `subkey.equalsIgnoreCase("state")` |
| 6 | CALL | `return getProcess_kbn_state();` |

**Block 15** — [ELSE-IF] `keyElement.equals("検索ボタン使用可否")` (Search Button Enabled/Disabled) (L891)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | CALL | `return getSearch_btn_disabled_value();` |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` |
| 4 | CALL | `return getSearch_btn_disabled_state();` |

**Block 16** — [ELSE-IF] `keyElement.equals("登録ボタン使用可否")` (Registration Button Enabled/Disabled) (L899)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | CALL | `return getAdd_cfm_btn_disabled_value();` |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` |
| 4 | CALL | `return getAdd_cfm_btn_disabled_state();` |

**Block 17** — [ELSE-IF] `keyElement.equals("削除ボタン使用可否")` (Delete Button Enabled/Disabled) (L908)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | CALL | `return getDel_cfm_btn_disabled_value();` |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` |
| 4 | CALL | `return getDel_cfm_btn_disabled_state();` |

**Block 18** — [ELSE] Unknown keyElement — fallthrough (L917)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null;` // unknown keyElement or unhandled subkey — no match |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `代理店コード` (search_agnt_cd) | Field | Agent Code — the code identifying a sales agent or dealer in the telecom distribution network |
| `表示用データ抽出項目コード` (search_campaign_cd) | Field | Display Data Extraction Item Code — the campaign/condition code used to filter and extract search results for display |
| `データ抽出項目コード（登録用）` (search_dchskm_cd) | Field | Data Extraction Item Code (for Registration) — the condition code used when registering new data extraction filters |
| `データ抽出項目名` (search_campaign_nm) | Field | Data Extraction Item Name — human-readable label for a data extraction condition |
| `受付開始年月日时分` (agnt_set_campaign_staymd) | Field | Acceptance Start Date/Time — the date and time when a campaign's registration period begins |
| `受付終了年月日时分` (agnt_set_campaign_endymd) | Field | Acceptance End Date/Time — the date and time when a campaign's registration period ends |
| `データ抽出項目設定条件一覧照会（イベントBP）詳細` (dchskm_sete_jkn_list) | Field | Data Extraction Item Settings Conditions List Inquiry (Event BP) Details — a nested list of compound data-view items representing active search/filter settings in an Event Business Process context |
| `変更前データ抽出項目設定条件一覧照会（イベントBP）詳細` (bf_dchskm_sete_jkn_list) | Field | Pre-Modification Data Extraction Item Settings Conditions List Inquiry (Event BP) Details — snapshot of settings before any user changes were applied (bf = "before") |
| `データ抽出項目一覧照会詳細` (dchskm_list) | Field | Data Extraction Item List Inquiry Details — a list of registered data extraction items with nested sub-fields |
| `検索フラグ` (search_flg) | Field | Search Flag — controls whether a search operation is active |
| `削除フラグ` (del_flg) | Field | Delete Flag — indicates whether a record is marked for deletion |
| `リセットフラグ` (reset_flg) | Field | Reset Flag — controls whether form fields should be reset to defaults |
| `明細表示フラグ` (dtl_dsp_flg) | Field | Detail Display Flag — controls visibility of detail rows/sections in the UI |
| `検索エラーフラグ（0件）` (search_err_flg_zero) | Field | Search Error Flag (Zero Results) — indicates when a search query returned no matching records |
| `処理区分` (process_kbn) | Field | Processing Type — classifies the type of processing operation (e.g., registration, modification, deletion, inquiry) |
| `検索ボタン使用可否` (search_btn_disabled) | Field | Search Button Enabled/Disabled — whether the search button should be enabled in the UI |
| `登録ボタン使用可否` (add_cfm_btn_disabled) | Field | Registration Button Enabled/Disabled — whether the registration confirm button should be enabled |
| `削除ボタン使用可否` (del_cfm_btn_disabled) | Field | Delete Button Enabled/Disabled — whether the delete confirm button should be enabled |
| イベントBP (Event BP) | Business term | Event Business Process — a business process unit triggered by user events (e.g., button clicks) that manages a set of related data operations |
| X33VDataTypeBeanInterface | Interface | Base interface for data-type beans — all nested compound data views implement this and must provide their own `loadModelData()` method for recursive field access |
| `value` | Subkey | Request for the actual data value of a field |
| `state` | Subkey | Request for the UI state descriptor of a field (e.g., display mode, visibility) |
| `enable` | Subkey | Request for the enabled/disabled toggle state of a field (used with flag fields) |
| `//` | Convention | Prefix indicating a shared/common info view field — delegates to parent superclass `loadCommonInfoData()` |
| `*` | Convention | Wildcard for list size requests — when used as the index element in a nested path, returns the list's element count |
