# Business Logic — KKW22501SFBean.storeModelData() [280 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.KKW22501SF.KKW22501SFBean` |
| Layer | Controller / View Bean (Web layer — MVCP framework view component) |
| Module | `KKW22501SF` (Package: `eo.web.webview.KKW22501SF`) |

## 1. Role

### KKW22501SFBean.storeModelData()

This method is the central **model data dispatch router** for the KKW22501SF screen bean. It acts as the single entry point for populating the bean's internal model state from serialized key-based data streams — typically used when a view framework restores or initializes form data by iterating over field identifiers and their associated metadata. The method resolves a hierarchical `key` string (which encodes the field identity and optional path for nested list items) into a **17-field switch dispatch table**. Each field branch routes incoming values to type-specific setter methods following a consistent `value` / `state` / `enable` subkey convention that mirrors the MVCP framework's model-binding pattern.

For simple scalar fields, the method directly calls typed setters (`setField_value()`, `setField_state()`, `setField_enabled()`). For fields that represent **detail list views** (three data extraction list types), it recursively delegates to nested `X33VDataTypeBeanInterface.storeModelData()` calls, using a path-based index resolution scheme (`parentPath/index/fieldName`) to navigate into the correct list element.

When the key string begins with `"//"`, the method delegates entirely to `super.storeCommonInfoData()`, which handles shared/common information fields defined in the parent class. The `subkey == null` edge case normalizes `subkey` to an empty string to prevent downstream `NullPointerException` on equality checks. The `isSetAsString` flag is passed through to nested delegates, controlling whether `Long`-type properties receive their values as `String` conversions.

In the larger system, this method is the **primary data-binding contract** for the service data extraction list inquiry screen (KKW22501SF). Any screen-level code that iterates over form fields and calls `storeModelData` per-field will route through this method. It is the mirror counterpart of a hypothetical `retrieveModelData` method that serializes state back to keys.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["storeModelData key, subkey, in_value, isSetAsString"])

    START --> CHECK_NULL["key is null"]
    CHECK_NULL -->|Yes| RETURN["Return (early exit)"]
    CHECK_NULL -->|No| CHECK_SUBKEY["subkey is null"]

    CHECK_SUBKEY -->|Yes| SET_EMPTY_SUBKEY["subkey = \"\""]
    CHECK_SUBKEY -->|No| CHECK_SUBKEY_END["subkey OK"]
    SET_EMPTY_SUBKEY --> CHECK_SUBKEY_END

    CHECK_SUBKEY_END --> COMMON_CHECK["key starts with '//'"]
    COMMON_CHECK -->|Yes| DELEGATE_COMMON["Call super.storeCommonInfoData(key, in_value, isSetAsString)"]
    DELEGATE_COMMON --> PARSE_KEY["Parse key by '/'"]

    COMMON_CHECK -->|No| PARSE_KEY
    PARSE_KEY --> IS_ROOT["key has '/' separator"]
    IS_ROOT -->|Yes| EXTRACT_ELEMENT["keyElement = key.substring(0, first '/')"]
    IS_ROOT -->|No| EXTRACT_ELEMENT["keyElement = key (whole key)"]

    EXTRACT_ELEMENT --> ROUTE_AGENT["keyElement = '代理店コード' (Agent Code)"]
    ROUTE_AGENT --> ROUTE_CAMP_CD["keyElement = '表示用データ抽出項目コード' (Display Campaign CD)"]
    ROUTE_CAMP_CD --> ROUTE_DCHSKM_CD["keyElement = 'データ抽出項目コード（登録用）' (Data Extraction CD for Registration)"]
    ROUTE_DCHSKM_CD --> ROUTE_CAMP_NM["keyElement = 'データ抽出項目名' (Data Extraction Name)"]
    ROUTE_CAMP_NM --> ROUTE_STAYMD["keyElement = '受取開始年月日时分' (Receiving Start Date/Time)"]
    ROUTE_STAYMD --> ROUTE_ENDYM["keyElement = '受領終了年月日时分' (Receipt End Date/Time)"]
    ROUTE_ENDYM --> ROUTE_SETE_JKN["keyElement = 'データ抽出項目設定条件一覧照会明細' (Data Extraction Settings List Detail)"]
    ROUTE_SETE_JKN --> ROUTE_BF_SETE["keyElement = '変更前データ抽出項目設定条件一覧照会明細' (Pre-Change Settings List Detail)"]
    ROUTE_BF_SETE --> ROUTE_LIST["keyElement = 'データ抽出項目一覧照会明細' (Data Extraction List Detail)"]
    ROUTE_LIST --> ROUTE_FLG["keyElement = '検索フラグ' (Search Flag)"]
    ROUTE_FLG --> ROUTE_DEL["keyElement = '削除フラグ' (Delete Flag)"]
    ROUTE_DEL --> ROUTE_RESET["keyElement = 'リセットフラグ' (Reset Flag)"]
    ROUTE_RESET --> ROUTE_DTL["keyElement = '明細表示フラグ' (Detail Display Flag)"]
    ROUTE_DTL --> ROUTE_ERR["keyElement = '検索エラーフラグ（0件）' (Search Error Flag for Zero Results)"]
    ROUTE_ERR --> ROUTE_PROC["keyElement = '処理区分' (Process Type)"]
    ROUTE_PROC --> ROUTE_SRCHBTN["keyElement = '検索ボタン使用可否' (Search Button Availability)"]
    ROUTE_SRCHBTN --> ROUTE_ADDBTN["keyElement = '登録ボタン使用可否' (Register Button Availability)"]
    ROUTE_ADDBTN --> ROUTE_DELBTN["keyElement = '削除ボタン使用可否' (Delete Button Availability)"]
    ROUTE_DELBTN --> END_NODE(["Return / Next"])

    subgraph AgentRoute ["代理店コード (search_agnt_cd)"]
        AGENT_V["subkey='value' -> setSearch_agnt_cd_value"]
        AGENT_S["subkey='state' -> setSearch_agnt_cd_state"]
        AGENT_V --> END_NODE
        AGENT_S --> END_NODE
    end

    subgraph CampCdRoute ["表示用データ抽出項目コード (search_campaign_cd)"]
        CC_V["subkey='value' -> setSearch_campaign_cd_value"]
        CC_S["subkey='state' -> setSearch_campaign_cd_state"]
        CC_V --> END_NODE
        CC_S --> END_NODE
    end

    subgraph DchskmCdRoute ["データ抽出項目コード（登録用） (search_dchskm_cd)"]
        DCH_V["subkey='value' -> setSearch_dchskm_cd_value"]
        DCH_S["subkey='state' -> setSearch_dchskm_cd_state"]
        DCH_V --> END_NODE
        DCH_S --> END_NODE
    end

    subgraph CampNmRoute ["データ抽出項目名 (search_campaign_nm)"]
        CNM_V["subkey='value' -> setSearch_campaign_nm_value"]
        CNM_S["subkey='state' -> setSearch_campaign_nm_state"]
        CNM_V --> END_NODE
        CNM_S --> END_NODE
    end

    subgraph StayMdRoute ["受取開始年月日时分 (agnt_set_campaign_staymd)"]
        STAY_V["subkey='value' -> setAgnt_set_campaign_staymd_value"]
        STAY_S["subkey='state' -> setAgnt_set_campaign_staymd_state"]
        STAY_V --> END_NODE
        STAY_S --> END_NODE
    end

    subgraph EndYmRoute ["受領終了年月日时分 (agnt_set_campaign_endymd)"]
        END_V["subkey='value' -> setAgnt_set_campaign_endymd_value"]
        END_S["subkey='state' -> setAgnt_set_campaign_endymd_state"]
        END_V --> END_NODE
        END_S --> END_NODE
    end

    subgraph ListBeanRoute ["データ抽出項目設定条件一覧照会明細 (dchskm_sete_jkn_list)"]
        LIST_EXTRACT["keyRemain = key.substring(separaterPoint + 1)"]
        LIST_INDEX["Extract index from keyRemain"]
        LIST_BOUNDS["index >= 0 && index < list.size()?"]
        LIST_DELEGATE["Delegates to X33VDataTypeBeanInterface.storeModelData"]
        LIST_EXTRACT --> LIST_INDEX --> LIST_BOUNDS -->|Yes| LIST_DELEGATE --> END_NODE
        LIST_BOUNDS -->|No| END_NODE
    end

    subgraph BfListRoute ["変更前データ抽出項目設定条件一覧照会明細 (bf_dchskm_sete_jkn_list)"]
        BF_EXTRACT["keyRemain = key.substring(separaterPoint + 1)"]
        BF_INDEX["Extract index from keyRemain"]
        BF_BOUNDS["index >= 0 && index < list.size()?"]
        BF_DELEGATE["Delegates to X33VDataTypeBeanInterface.storeModelData"]
        BF_EXTRACT --> BF_INDEX --> BF_BOUNDS -->|Yes| BF_DELEGATE --> END_NODE
        BF_BOUNDS -->|No| END_NODE
    end

    subgraph ListDetailRoute ["データ抽出項目一覧照会明細 (dchskm_list)"]
        DET_EXTRACT["keyRemain = key.substring(separaterPoint + 1)"]
        DET_INDEX["Extract index from keyRemain"]
        DET_BOUNDS["index >= 0 && index < list.size()?"]
        DET_DELEGATE["Delegates to X33VDataTypeBeanInterface.storeModelData"]
        DET_EXTRACT --> DET_INDEX --> DET_BOUNDS -->|Yes| DET_DELEGATE --> END_NODE
        DET_BOUNDS -->|No| END_NODE
    end

    subgraph FlagRoute ["検索フラグ (search_flg)"]
        FLG_V["subkey='value' -> setSearch_flg_value"]
        FLG_E["subkey='enable' -> setSearch_flg_enabled"]
        FLG_S["subkey='state' -> setSearch_flg_state"]
        FLG_V --> END_NODE
        FLG_E --> END_NODE
        FLG_S --> END_NODE
    end

    subgraph DelFlagRoute ["削除フラグ (del_flg)"]
        DEL_V["subkey='value' -> setDel_flg_value"]
        DEL_E["subkey='enable' -> setDel_flg_enabled"]
        DEL_S["subkey='state' -> setDel_flg_state"]
        DEL_V --> END_NODE
        DEL_E --> END_NODE
        DEL_S --> END_NODE
    end

    subgraph ResetRoute ["リセットフラグ (reset_flg)"]
        RST_V["subkey='value' -> setReset_flg_value"]
        RST_E["subkey='enable' -> setReset_flg_enabled"]
        RST_S["subkey='state' -> setReset_flg_state"]
        RST_V --> END_NODE
        RST_E --> END_NODE
        RST_S --> END_NODE
    end

    subgraph DtlRoute ["明細表示フラグ (dtl_dsp_flg)"]
        DTL_V["subkey='value' -> setDtl_dsp_flg_value"]
        DTL_E["subkey='enable' -> setDtl_dsp_flg_enabled"]
        DTL_S["subkey='state' -> setDtl_dsp_flg_state"]
        DTL_V --> END_NODE
        DTL_E --> END_NODE
        DTL_S --> END_NODE
    end

    subgraph ErrFlgRoute ["検索エラーフラグ（0件） (search_err_flg_zero)"]
        ERR_V["subkey='value' -> setSearch_err_flg_zero_value"]
        ERR_S["subkey='state' -> setSearch_err_flg_zero_state"]
        ERR_V --> END_NODE
        ERR_S --> END_NODE
    end

    subgraph ProcRoute ["処理区分 (process_kbn)"]
        PROC_V["subkey='value' -> setProcess_kbn_value"]
        PROC_E["subkey='enable' -> setProcess_kbn_enabled"]
        PROC_S["subkey='state' -> setProcess_kbn_state"]
        PROC_V --> END_NODE
        PROC_E --> END_NODE
        PROC_S --> END_NODE
    end

    subgraph SrchBtnRoute ["検索ボタン使用可否 (search_btn_disabled)"]
        SBTN_V["subkey='value' -> setSearch_btn_disabled_value"]
        SBTN_S["subkey='state' -> setSearch_btn_disabled_state"]
        SBTN_V --> END_NODE
        SBTN_S --> END_NODE
    end

    subgraph AddBtnRoute ["登録ボタン使用可否 (add_cfm_btn_disabled)"]
        ABTN_V["subkey='value' -> setAdd_cfm_btn_disabled_value"]
        ABTN_S["subkey='state' -> setAdd_cfm_btn_disabled_state"]
        ABTN_V --> END_NODE
        ABTN_S --> END_NODE
    end

    subgraph DelBtnRoute ["削除ボタン使用可否 (del_cfm_btn_disabled)"]
        DBTN_V["subkey='value' -> setDel_cfm_btn_disabled_value"]
        DBTN_S["subkey='state' -> setDel_cfm_btn_disabled_state"]
        DBTN_V --> END_NODE
        DBTN_S --> END_NODE
    end

    ROUTE_AGENT --> AGENT_ROUTE
    ROUTE_CAMP_CD --> CC_ROUTE
    ROUTE_DCHSKM_CD --> DCH_ROUTE
    ROUTE_CAMP_NM --> CNM_ROUTE
    ROUTE_STAYMD --> STAY_ROUTE
    ROUTE_ENDYM --> END_ROUTE
    ROUTE_SETE_JKN --> LIST_ROUTE
    ROUTE_BF_SETE --> BF_ROUTE
    ROUTE_LIST --> DET_ROUTE
    ROUTE_FLG --> FLG_ROUTE
    ROUTE_DEL --> DEL_ROUTE
    ROUTE_RESET --> RST_ROUTE
    ROUTE_DTL --> DTL_ROUTE
    ROUTE_ERR --> ERR_ROUTE
    ROUTE_PROC --> PROC_ROUTE
    ROUTE_SRCHBTN --> SBTN_ROUTE
    ROUTE_ADDBTN --> ABTN_ROUTE
    ROUTE_DELBTN --> DBTN_ROUTE

    classDef startend fill:#f9f,stroke:#333,stroke-width:2px
    classDef process fill:#9cf,stroke:#333
    classDef condition fill:#ff9,stroke:#333
    classDef delegate fill:#9f9,stroke:#333
    class START,RETURN,END_NODE startend
    class CHECK_NULL,CHECK_SUBKEY,CHECK_SUBKEY_END,COMMON_CHECK,PARSE_KEY,IS_ROOT,LIST_BOUNDS,BF_BOUNDS,DET_BOUNDS condition
    class SET_EMPTY_SUBKEY,EXTRACT_ELEMENT,LIST_EXTRACT,LIST_INDEX,BF_EXTRACT,BF_INDEX,DET_EXTRACT,DET_INDEX process
    class DELEGATE_COMMON,LIST_DELEGATE,BF_DELEGATE,DET_DELEGATE delegate
```

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `key` | `String` | **Hierarchical field identifier** — encodes which business field to populate. Format: either a simple Japanese label (e.g., `"代理店コード"`) for scalar fields, or a slash-delimited path (e.g., `"データ抽出項目設定条件一覧照会（イベントB）明細/0/項目名"`) for nested list items. If it begins with `"//"` it signals a common info field delegated to the parent class. |
| 2 | `subkey` | `String` | **Property selector** within the field — determines which attribute of the field to set. Common values: `"value"` (the data value), `"state"` (UI state/visibility), `"enable"` (enabled/disabled), or `"state"` for boolean-flavored flags. If `null`, normalized to `""`. |
| 3 | `in_value` | `Object` | **The data payload** — the actual value to store. Typically a `String` or `Boolean` cast at the receiver. Represents the source data from the view framework's serialization mechanism. |
| 4 | `isSetAsString` | `boolean` | **Type coercion flag** — when `true`, indicates that a `Long`-type property should receive a `String` value. This is passed through unchanged to nested `storeModelData` calls on list element beans. |

**Instance fields read by this method:**

| Field Name | Type | Business Description |
|-----------|------|---------------------|
| `dchskm_sete_jkn_list_list` | `List<X33VDataTypeBeanInterface>` | Detail list for "Data Extraction Settings Conditions Inquiry (Event B) Details" — contains nested view-bean items for event-B data extraction configuration lines. |
| `bf_dchskm_sete_jkn_list_list` | `List<X33VDataTypeBeanInterface>` | Detail list for "Pre-Change Data Extraction Settings Conditions Inquiry (Event B) Details" — contains nested view-bean items for pre-change configuration lines. |
| `dchskm_list_list` | `List<X33VDataTypeBeanInterface>` | Detail list for "Data Extraction List Inquiry Details" — contains nested view-bean items for the main data extraction inquiry lines. |

## 4. CRUD Operations / Called Services

This method performs **no direct CRUD operations** against entities or databases. It is a pure view-model data binding utility. All called methods are setter calls and recursive delegates within the bean hierarchy:

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| - | `super.storeCommonInfoData` | (Parent class method) | - | Delegates common info field storage to the parent bean's store method for fields prefixed with "//" |
| - | `JKKAdEdit.substring` | JKKAdEdit | - | Internal `substring` utility — called indirectly via framework (not directly in this method body) |
| - | `JKKAdEditCC.substring` | JKKAdEditCC | - | Internal `substring` utility — called indirectly via framework |
| - | `JKKTelnoInfoAddMapperCC.substring` | JKKTelnoInfoAddMapperCC | - | Internal `substring` utility — called indirectly via framework |
| - | `JDKejbStringEdit.substring` | JDKejbStringEdit | - | Internal `substring` utility — called indirectly via framework |
| U | `setSearch_agnt_cd_value` | KKW22501SFBean | - | Sets search agent code value (scalar field) |
| U | `setSearch_agnt_cd_state` | KKW22501SFBean | - | Sets search agent code UI state |
| U | `setSearch_campaign_cd_value` | KKW22501SFBean | - | Sets search campaign code value (scalar field) |
| U | `setSearch_campaign_cd_state` | KKW22501SFBean | - | Sets search campaign code UI state |
| U | `setSearch_dchskm_cd_value` | KKW22501SFBean | - | Sets search data extraction code value for registration |
| U | `setSearch_dchskm_cd_state` | KKW22501SFBean | - | Sets search data extraction code UI state |
| U | `setSearch_campaign_nm_value` | KKW22501SFBean | - | Sets search campaign name value |
| U | `setSearch_campaign_nm_state` | KKW22501SFBean | - | Sets search campaign name UI state |
| U | `setAgnt_set_campaign_staymd_value` | KKW22501SFBean | - | Sets agent campaign stay start date/time value |
| U | `setAgnt_set_campaign_staymd_state` | KKW22501SFBean | - | Sets agent campaign stay start date/time UI state |
| U | `setAgnt_set_campaign_endymd_value` | KKW22501SFBean | - | Sets agent campaign receipt end date/time value |
| U | `setAgnt_set_campaign_endymd_state` | KKW22501SFBean | - | Sets agent campaign receipt end date/time UI state |
| U | `X33VDataTypeBeanInterface.storeModelData` (dchskm_sete_jkn_list) | X33VDataTypeBeanInterface | - | Recursively stores data in list element 1 (settings conditions Event B) |
| U | `X33VDataTypeBeanInterface.storeModelData` (bf_dchskm_sete_jkn_list) | X33VDataTypeBeanInterface | - | Recursively stores data in list element 2 (pre-change settings Event B) |
| U | `X33VDataTypeBeanInterface.storeModelData` (dchskm_list) | X33VDataTypeBeanInterface | - | Recursively stores data in list element 3 (main data extraction list) |
| U | `setSearch_flg_value` | KKW22501SFBean | - | Sets search flag value |
| U | `setSearch_flg_enabled` | KKW22501SFBean | - | Sets search flag enabled state |
| U | `setSearch_flg_state` | KKW22501SFBean | - | Sets search flag UI state |
| U | `setDel_flg_value` | KKW22501SFBean | - | Sets delete flag value |
| U | `setDel_flg_enabled` | KKW22501SFBean | - | Sets delete flag enabled state |
| U | `setDel_flg_state` | KKW22501SFBean | - | Sets delete flag UI state |
| U | `setReset_flg_value` | KKW22501SFBean | - | Sets reset flag value |
| U | `setReset_flg_enabled` | KKW22501SFBean | - | Sets reset flag enabled state |
| U | `setReset_flg_state` | KKW22501SFBean | - | Sets reset flag UI state |
| U | `setDtl_dsp_flg_value` | KKW22501SFBean | - | Sets detail display flag value |
| U | `setDtl_dsp_flg_enabled` | KKW22501SFBean | - | Sets detail display flag enabled state |
| U | `setDtl_dsp_flg_state` | KKW22501SFBean | - | Sets detail display flag UI state |
| U | `setSearch_err_flg_zero_value` | KKW22501SFBean | - | Sets search error (zero results) flag value |
| U | `setSearch_err_flg_zero_state` | KKW22501SFBean | - | Sets search error (zero results) flag UI state |
| U | `setProcess_kbn_value` | KKW22501SFBean | - | Sets process type value |
| U | `setProcess_kbn_enabled` | KKW22501SFBean | - | Sets process type enabled state |
| U | `setProcess_kbn_state` | KKW22501SFBean | - | Sets process type UI state |
| U | `setSearch_btn_disabled_value` | KKW22501SFBean | - | Sets search button disabled value |
| U | `setSearch_btn_disabled_state` | KKW22501SFBean | - | Sets search button disabled UI state |
| U | `setAdd_cfm_btn_disabled_value` | KKW22501SFBean | - | Sets registration confirmation button disabled value |
| U | `setAdd_cfm_btn_disabled_state` | KKW22501SFBean | - | Sets registration confirmation button disabled UI state |
| U | `setDel_cfm_btn_disabled_value` | KKW22501SFBean | - | Sets deletion confirmation button disabled value |
| U | `setDel_cfm_btn_disabled_state` | KKW22501SFBean | - | Sets deletion confirmation button disabled UI state |

## 5. Dependency Trace

No screen/batch entry points found within 8 hops. Direct callers found: 2 methods (all internal to KKW22501SFBean).

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Internal: KKW22501SFBean | `KKW22501SFBean.storeModelData` | `substring [-]`, `setDel_cfm_btn_disabled_state [-]`, `setDel_cfm_btn_disabled_value [-]`, `setAdd_cfm_btn_disabled_state [-]`, `setAdd_cfm_btn_disabled_value [-]`, `setSearch_btn_disabled_state [-]`, `setSearch_btn_disabled_value [-]`, `setProcess_kbn_state [-]`, `setProcess_kbn_enabled [-]`, `setProcess_kbn_value [-]`, `setSearch_err_flg_zero_state [-]`, `setSearch_err_flg_zero_value [-]`, `setDtl_dsp_flg_state [-]`, `setDtl_dsp_flg_enabled [-]`, `setDtl_dsp_flg_value [-]`, `setReset_flg_state [-]`, `setReset_flg_enabled [-]`, `setReset_flg_value [-]`, `setDel_flg_state [-]`, `setDel_flg_enabled [-]`, `setDel_flg_value [-]`, `setSearch_agnt_cd_state [-]`, `setSearch_agnt_cd_value [-]`, `setSearch_campaign_cd_state [-]`, `setSearch_campaign_cd_value [-]`, `setSearch_dchskm_cd_state [-]`, `setSearch_dchskm_cd_value [-]`, `setSearch_campaign_nm_state [-]`, `setSearch_campaign_nm_value [-]`, `setAgnt_set_campaign_staymd_state [-]`, `setAgnt_set_campaign_staymd_value [-]`, `setAgnt_set_campaign_endymd_state [-]`, `setAgnt_set_campaign_endymd_value [-]`, `setProcess_kbn_state [-]`, `X33VDataTypeBeanInterface.storeModelData [-]` |

**Call chain detail:** `KKW22501SFBean` — This method is called internally by other methods within the same class as part of bulk model data population. No external screen or batch entry points reach this method within 8 hops.

## 6. Per-Branch Detail Blocks

### Block 1 — IF (condition: `key == null`) (L942)
Early exit guard. If the field identifier key is `null`, the method returns immediately without any processing. This prevents `NullPointerException` on subsequent string operations and handles cases where the view framework iterates over fields that may not yet exist.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `return;` // key is null — abort processing |

### Block 2 — ELSE-IF (condition: `subkey == null`) (L947)
Normalization branch. If `subkey` is `null`, it is replaced with an empty string to ensure safe downstream `equalsIgnoreCase` comparisons. This prevents `NullPointerException` when subkey is `null` but a valid subkey is expected.

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

### Block 3 — IF (condition: `key.indexOf("//") == 0`) (L956)
Common info delegation branch. When the key starts with `"//"`, this indicates a common information field defined in the parent class. The method delegates entirely to `super.storeCommonInfoData()`.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `separaterPoint = key.indexOf("//");` // Check if key is for common info screen |
| 2 | CALL | `super.storeCommonInfoData(key, in_value, isSetAsString);` // Delegate to parent for common info fields |

**Conditional fallback** (L959 — else branch when key does NOT start with "//")
When the key is not a common info field, the method parses the key to extract the field identifier.

| # | Type | Code |
|---|------|------|
| 1 | SET | `separaterPoint = key.indexOf("/");` // Search for '/' separator for root-level key |
| 2 | IF | `separaterPoint > 0` (root-level key with "/" separator) |
| 2.1 | SET | `keyElement = key.substring(0, separaterPoint);` // Extract field name before first '/' |
| 2.2 | ELSE | `keyElement = key;` // Use the whole key as-is (no separator found) |

### Block 4 — IF-ELSE-IF Chain: Scalar Field Route (代理店コード — Agent Code) (L970)
Routes the `"代理店コード"` (Agent Code / `search_agnt_cd`) field.

| # | Type | Code |
|---|------|------|
| 1 | IF | `keyElement.equals("代理店コード")` |
| 1.1 | IF-ELSE-IF | `subkey.equalsIgnoreCase("value")` (L971) |
| 1.1.1 | CALL | `setSearch_agnt_cd_value((String)in_value);` // Set agent code value |
| 1.2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` (L973) // subkey is "state" — cast in_value and call setter for itemID_state |
| 1.2.1 | CALL | `setSearch_agnt_cd_state((String)in_value);` // Set agent code UI state |

### Block 5 — IF-ELSE-IF Chain: Display Campaign Code Field (表示用データ抽出項目コード) (L979)
Routes the `"表示用データ抽出項目コード"` (Display Data Extraction Item Code / `search_campaign_cd`) field.

| # | Type | Code |
|---|------|------|
| 1 | IF | `keyElement.equals("表示用データ抽出項目コード")` |
| 1.1 | IF-ELSE-IF | `subkey.equalsIgnoreCase("value")` (L980) |
| 1.1.1 | CALL | `setSearch_campaign_cd_value((String)in_value);` // Set campaign code value |
| 1.2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` (L982) // subkey is "state" — cast in_value and call setter |
| 1.2.1 | CALL | `setSearch_campaign_cd_state((String)in_value);` // Set campaign code UI state |

### Block 6 — IF-ELSE-IF Chain: Data Extraction Code for Registration (データ抽出項目コード（登録用）) (L988)
Routes the `"データ抽出項目コード（登録用）"` (Data Extraction Item Code for Registration / `search_dchskm_cd`) field.

| # | Type | Code |
|---|------|------|
| 1 | IF | `keyElement.equals("データ抽出項目コード（登録用）")` |
| 1.1 | IF-ELSE-IF | `subkey.equalsIgnoreCase("value")` (L989) |
| 1.1.1 | CALL | `setSearch_dchskm_cd_value((String)in_value);` // Set registration extraction code value |
| 1.2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` (L991) |
| 1.2.1 | CALL | `setSearch_dchskm_cd_state((String)in_value);` // Set registration extraction code UI state |

### Block 7 — IF-ELSE-IF Chain: Data Extraction Name (データ抽出項目名) (L997)
Routes the `"データ抽出項目名"` (Data Extraction Item Name / `search_campaign_nm`) field.

| # | Type | Code |
|---|------|------|
| 1 | IF | `keyElement.equals("データ抽出項目名")` |
| 1.1 | IF-ELSE-IF | `subkey.equalsIgnoreCase("value")` (L998) |
| 1.1.1 | CALL | `setSearch_campaign_nm_value((String)in_value);` // Set extraction name value |
| 1.2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` (L1000) |
| 1.2.1 | CALL | `setSearch_campaign_nm_state((String)in_value);` // Set extraction name UI state |

### Block 8 — IF-ELSE-IF Chain: Receiving Start Date/Time (受取開始年月日时分) (L1006)
Routes the `"受取開始年月日时分"` (Receiving Start Date and Time / `agnt_set_campaign_staymd`) field.

| # | Type | Code |
|---|------|------|
| 1 | IF | `keyElement.equals("受取開始年月日时分")` |
| 1.1 | IF-ELSE-IF | `subkey.equalsIgnoreCase("value")` (L1007) |
| 1.1.1 | CALL | `setAgnt_set_campaign_staymd_value((String)in_value);` // Set stay start date/time value |
| 1.2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` (L1009) |
| 1.2.1 | CALL | `setAgnt_set_campaign_staymd_state((String)in_value);` // Set stay start date/time UI state |

### Block 9 — IF-ELSE-IF Chain: Receipt End Date/Time (受領終了年月日时分) (L1015)
Routes the `"受領終了年月日时分"` (Receipt End Date and Time / `agnt_set_campaign_endymd`) field.

| # | Type | Code |
|---|------|------|
| 1 | IF | `keyElement.equals("受領終了年月日时分")` |
| 1.1 | IF-ELSE-IF | `subkey.equalsIgnoreCase("value")` (L1016) |
| 1.1.1 | CALL | `setAgnt_set_campaign_endymd_value((String)in_value);` // Set campaign end date/time value |
| 1.2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` (L1018) |
| 1.2.1 | CALL | `setAgnt_set_campaign_endymd_state((String)in_value);` // Set campaign end date/time UI state |

### Block 10 — IF-ELSE-IF Chain: Data Extraction Settings List Detail (Event B) (データ抽出項目設定条件一覧照会（イベントB）明細) (L1024)
Handles the **nested list** field for data extraction settings conditions (Event B). This block performs path parsing, index extraction, bounds checking, and recursive delegation.

| # | Type | Code |
|---|------|------|
| 1 | IF | `keyElement.equals("データ抽出項目設定条件一覧照会（イベントB）明細")` |
| 1.1 | SET | `keyRemain = key.substring(separaterPoint + 1);` // Get remainder after first '/' — extracts "/0/fieldName" style path |
| 1.2 | SET | `separaterPoint = keyRemain.indexOf("/");` // Find next separator in remainder |
| 1.3 | IF | `separaterPoint > 0` (separator properly specified) (L1029) |
| 1.3.1 | SET | `keyElement = keyRemain.substring(0, separaterPoint);` // Extract index string (e.g., "0") |
| 1.3.2 | SET | `tmpIndexInt = null;` // Initialize |
| 1.3.3 | TRY | `tmpIndexInt = Integer.valueOf(keyElement);` (L1033) |
| 1.3.4 | CATCH | `NumberFormatException` — `tmpIndexInt = null;` // Index is not a numeric string (L1037) |
| 1.3.5 | IF | `tmpIndexInt != null` (index value is numeric) (L1039) |
| 1.3.5.1 | SET | `tmpIndex = tmpIndexInt.intValue();` // Convert to int |
| 1.3.5.2 | IF | `tmpIndex >= 0 && tmpIndex < dchskm_sete_jkn_list_list.size()` (index within list bounds) (L1041) |
| 1.3.5.2.1 | SET | `keyElement = keyRemain.substring(separaterPoint + 1);` // Re-extract field name from remainder |
| 1.3.5.2.2 | CALL | `((X33VDataTypeBeanInterface)dchskm_sete_jkn_list_list.get(tmpIndex)).storeModelData(keyElement, subkey, in_value, isSetAsString);` // Recursive delegation to nested list element bean |
| 1.3.5.2.3 | NOTE | // Passes item name, subkey, input value, and isSetAsString flag to nested data type bean (L1043-1044) |

### Block 11 — IF-ELSE-IF Chain: Pre-Change Settings List Detail (Event B) (変更前データ抽出項目設定条件一覧照会（イベントB）明細) (L1050)
Same pattern as Block 10 but for **pre-change** settings list (`bf_dchskm_sete_jkn_list`). Handles the nested list for pre-change data extraction configuration.

| # | Type | Code |
|---|------|------|
| 1 | IF | `keyElement.equals("変更前データ抽出項目設定条件一覧照会（イベントB）明細")` |
| 1.1 | SET | `keyRemain = key.substring(separaterPoint + 1);` // Extract remainder after first '/' |
| 1.2 | SET | `separaterPoint = keyRemain.indexOf("/");` // Find next separator |
| 1.3 | IF | `separaterPoint > 0` (L1055) |
| 1.3.1 | SET | `keyElement = keyRemain.substring(0, separaterPoint);` // Extract index string |
| 1.3.2 | TRY | `tmpIndexInt = Integer.valueOf(keyElement);` |
| 1.3.3 | CATCH | `NumberFormatException` — `tmpIndexInt = null;` |
| 1.3.4 | IF | `tmpIndexInt != null` (L1059) |
| 1.3.4.1 | SET | `tmpIndex = tmpIndexInt.intValue();` |
| 1.3.4.2 | IF | `tmpIndex >= 0 && tmpIndex < bf_dchskm_sete_jkn_list_list.size()` (L1061) |
| 1.3.4.2.1 | SET | `keyElement = keyRemain.substring(separaterPoint + 1);` |
| 1.3.4.2.2 | CALL | `((X33VDataTypeBeanInterface)bf_dchskm_sete_jkn_list_list.get(tmpIndex)).storeModelData(keyElement, subkey, in_value, isSetAsString);` // Recursive delegation |

### Block 12 — IF-ELSE-IF Chain: Data Extraction List Detail (データ抽出項目一覧照会明細) (L1068)
Same pattern as Blocks 10-11 but for the **main** data extraction list (`dchskm_list`). This is the primary list detail field.

| # | Type | Code |
|---|------|------|
| 1 | IF | `keyElement.equals("データ抽出項目一覧照会明細")` |
| 1.1 | SET | `keyRemain = key.substring(separaterPoint + 1);` // Extract remainder after first '/' |
| 1.2 | SET | `separaterPoint = keyRemain.indexOf("/");` // Find next separator |
| 1.3 | IF | `separaterPoint > 0` (L1073) |
| 1.3.1 | SET | `keyElement = keyRemain.substring(0, separaterPoint);` // Extract index string |
| 1.3.2 | TRY | `tmpIndexInt = Integer.valueOf(keyElement);` |
| 1.3.3 | CATCH | `NumberFormatException` — `tmpIndexInt = null;` |
| 1.3.4 | IF | `tmpIndexInt != null` (L1077) |
| 1.3.4.1 | SET | `tmpIndex = tmpIndexInt.intValue();` |
| 1.3.4.2 | IF | `tmpIndex >= 0 && tmpIndex < dchskm_list_list.size()` (L1079) |
| 1.3.4.2.1 | SET | `keyElement = keyRemain.substring(separaterPoint + 1);` |
| 1.3.4.2.2 | CALL | `((X33VDataTypeBeanInterface)dchskm_list_list.get(tmpIndex)).storeModelData(keyElement, subkey, in_value, isSetAsString);` // Recursive delegation |

### Block 13 — IF-ELSE-IF Chain: Search Flag (検索フラグ) (L1086)
Routes the `"検索フラグ"` (Search Flag / `search_flg`) field. This flag supports **3 subkeys**: `value`, `enable`, and `state` (unlike most fields which only support `value` and `state`).

| # | Type | Code |
|---|------|------|
| 1 | IF | `keyElement.equals("検索フラグ")` |
| 1.1 | IF-ELSE-IF | `subkey.equalsIgnoreCase("value")` (L1087) |
| 1.1.1 | CALL | `setSearch_flg_value((String)in_value);` // Set search flag value |
| 1.2 | ELSE-IF | `subkey.equalsIgnoreCase("enable")` (L1089) // subkey is "enable" — call itemID_enable setter |
| 1.2.1 | CALL | `setSearch_flg_enabled((Boolean)in_value);` // Set search flag enabled/disabled |
| 1.3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` (L1091) // subkey is "state" — cast in_value and call setter |
| 1.3.1 | CALL | `setSearch_flg_state((String)in_value);` // Set search flag UI state |

### Block 14 — IF-ELSE-IF Chain: Delete Flag (削除フラグ) (L1097)
Routes the `"削除フラグ"` (Delete Flag / `del_flg`) field. Supports 3 subkeys: `value`, `enable`, `state`.

| # | Type | Code |
|---|------|------|
| 1 | IF | `keyElement.equals("削除フラグ")` |
| 1.1 | IF-ELSE-IF | `subkey.equalsIgnoreCase("value")` (L1098) |
| 1.1.1 | CALL | `setDel_flg_value((String)in_value);` // Set delete flag value |
| 1.2 | ELSE-IF | `subkey.equalsIgnoreCase("enable")` (L1100) |
| 1.2.1 | CALL | `setDel_flg_enabled((Boolean)in_value);` // Set delete flag enabled/disabled |
| 1.3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` (L1102) |
| 1.3.1 | CALL | `setDel_flg_state((String)in_value);` // Set delete flag UI state |

### Block 15 — IF-ELSE-IF Chain: Reset Flag (リセットフラグ) (L1108)
Routes the `"リセットフラグ"` (Reset Flag / `reset_flg`) field. Supports 3 subkeys: `value`, `enable`, `state`.

| # | Type | Code |
|---|------|------|
| 1 | IF | `keyElement.equals("リセットフラグ")` |
| 1.1 | IF-ELSE-IF | `subkey.equalsIgnoreCase("value")` (L1109) |
| 1.1.1 | CALL | `setReset_flg_value((String)in_value);` // Set reset flag value |
| 1.2 | ELSE-IF | `subkey.equalsIgnoreCase("enable")` (L1111) |
| 1.2.1 | CALL | `setReset_flg_enabled((Boolean)in_value);` // Set reset flag enabled/disabled |
| 1.3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` (L1113) |
| 1.3.1 | CALL | `setReset_flg_state((String)in_value);` // Set reset flag UI state |

### Block 16 — IF-ELSE-IF Chain: Detail Display Flag (明細表示フラグ) (L1119)
Routes the `"明細表示フラグ"` (Detail Display Flag / `dtl_dsp_flg`) field. Supports 3 subkeys: `value`, `enable`, `state`.

| # | Type | Code |
|---|------|------|
| 1 | IF | `keyElement.equals("明細表示フラグ")` |
| 1.1 | IF-ELSE-IF | `subkey.equalsIgnoreCase("value")` (L1120) |
| 1.1.1 | CALL | `setDtl_dsp_flg_value((String)in_value);` // Set detail display flag value |
| 1.2 | ELSE-IF | `subkey.equalsIgnoreCase("enable")` (L1122) |
| 1.2.1 | CALL | `setDtl_dsp_flg_enabled((Boolean)in_value);` // Set detail display flag enabled/disabled |
| 1.3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` (L1124) |
| 1.3.1 | CALL | `setDtl_dsp_flg_state((String)in_value);` // Set detail display flag UI state |

### Block 17 — IF-ELSE-IF Chain: Search Error Flag for Zero Results (検索エラーフラグ（0件）) (L1130)
Routes the `"検索エラーフラグ（0件）"` (Search Error Flag — Zero Results / `search_err_flg_zero`) field. Supports 2 subkeys: `value`, `state`.

| # | Type | Code |
|---|------|------|
| 1 | IF | `keyElement.equals("検索エラーフラグ（0件）")` |
| 1.1 | IF-ELSE-IF | `subkey.equalsIgnoreCase("value")` (L1131) |
| 1.1.1 | CALL | `setSearch_err_flg_zero_value((String)in_value);` // Set zero-results flag value |
| 1.2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` (L1133) |
| 1.2.1 | CALL | `setSearch_err_flg_zero_state((String)in_value);` // Set zero-results flag UI state |

### Block 18 — IF-ELSE-IF Chain: Process Type (処理区分) (L1139)
Routes the `"処理区分"` (Process Type / `process_kbn`) field. Supports 3 subkeys: `value`, `enable`, `state`.

| # | Type | Code |
|---|------|------|
| 1 | IF | `keyElement.equals("処理区分")` |
| 1.1 | IF-ELSE-IF | `subkey.equalsIgnoreCase("value")` (L1140) |
| 1.1.1 | CALL | `setProcess_kbn_value((String)in_value);` // Set process type value |
| 1.2 | ELSE-IF | `subkey.equalsIgnoreCase("enable")` (L1142) |
| 1.2.1 | CALL | `setProcess_kbn_enabled((Boolean)in_value);` // Set process type enabled/disabled |
| 1.3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` (L1144) |
| 1.3.1 | CALL | `setProcess_kbn_state((String)in_value);` // Set process type UI state |

### Block 19 — IF-ELSE-IF Chain: Search Button Availability (検索ボタン使用可否) (L1150)
Routes the `"検索ボタン使用可否"` (Search Button Availability / `search_btn_disabled`) field. Supports 2 subkeys: `value`, `state`.

| # | Type | Code |
|---|------|------|
| 1 | IF | `keyElement.equals("検索ボタン使用可否")` |
| 1.1 | IF-ELSE-IF | `subkey.equalsIgnoreCase("value")` (L1151) |
| 1.1.1 | CALL | `setSearch_btn_disabled_value((String)in_value);` // Set search button disabled value |
| 1.2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` (L1153) |
| 1.2.1 | CALL | `setSearch_btn_disabled_state((String)in_value);` // Set search button disabled UI state |

### Block 20 — IF-ELSE-IF Chain: Register Button Availability (登録ボタン使用可否) (L1159)
Routes the `"登録ボタン使用可否"` (Registration Button Availability / `add_cfm_btn_disabled`) field. Supports 2 subkeys: `value`, `state`.

| # | Type | Code |
|---|------|------|
| 1 | IF | `keyElement.equals("登録ボタン使用可否")` |
| 1.1 | IF-ELSE-IF | `subkey.equalsIgnoreCase("value")` (L1160) |
| 1.1.1 | CALL | `setAdd_cfm_btn_disabled_value((String)in_value);` // Set register button disabled value |
| 1.2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` (L1162) |
| 1.2.1 | CALL | `setAdd_cfm_btn_disabled_state((String)in_value);` // Set register button disabled UI state |

### Block 21 — IF-ELSE-IF Chain: Delete Button Availability (削除ボタン使用可否) (L1168)
Routes the `"削除ボタン使用可否"` (Delete Button Availability / `del_cfm_btn_disabled`) field. Supports 2 subkeys: `value`, `state`.

| # | Type | Code |
|---|------|------|
| 1 | IF | `keyElement.equals("削除ボタン使用可否")` |
| 1.1 | IF-ELSE-IF | `subkey.equalsIgnoreCase("value")` (L1169) |
| 1.1.1 | CALL | `setDel_cfm_btn_disabled_value((String)in_value);` // Set delete button disabled value |
| 1.2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` (L1171) |
| 1.2.1 | CALL | `setDel_cfm_btn_disabled_state((String)in_value);` // Set delete button disabled UI state |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `search_agnt_cd` | Field | Agent code — the code identifying a sales agent or distributor in the telecom service fulfillment system |
| `search_campaign_cd` | Field | Display data extraction item code — a campaign/program identifier used for filtering and displaying data extraction results |
| `search_dchskm_cd` | Field | Data extraction item code for registration — a data extraction filter code used specifically in the registration (add) workflow |
| `search_campaign_nm` | Field | Data extraction item name — the human-readable name of a campaign used as a search filter criterion |
| `agnt_set_campaign_staymd` | Field | Receiving start date/time — the start date and time when the agent receives or begins a campaign's services |
| `agnt_set_campaign_endymd` | Field | Receipt end date/time — the end date and time for the agent's receipt of campaign services |
| `dchskm_sete_jkn_list` | Field | Data extraction settings conditions inquiry (Event B) details — a detail list bean for event-B data extraction configuration lines |
| `bf_dchskm_sete_jkn_list` | Field | Pre-change data extraction settings conditions inquiry (Event B) details — a detail list bean for pre-change (before modification) configuration lines |
| `dchskm_list` | Field | Data extraction list inquiry details — a detail list bean for the main data extraction inquiry result lines |
| `search_flg` | Field | Search flag — a boolean flag controlling whether the search operation is active |
| `del_flg` | Field | Delete flag — a flag indicating deletion eligibility or status for a record |
| `reset_flg` | Field | Reset flag — a flag controlling whether form fields should be reset to defaults |
| `dtl_dsp_flg` | Field | Detail display flag — controls whether detail information is displayed on the screen |
| `search_err_flg_zero` | Field | Search error flag for zero results — set when a search query returns no matching records |
| `process_kbn` | Field | Process type — classifies the type of processing being performed (e.g., inquiry, registration, modification) |
| `search_btn_disabled` | Field | Search button availability — controls whether the search button is enabled or disabled on the UI |
| `add_cfm_btn_disabled` | Field | Registration confirmation button availability — controls whether the register/confirm button is enabled |
| `del_cfm_btn_disabled` | Field | Delete confirmation button availability — controls whether the delete confirmation button is enabled |
| `storeModelData` | Method | Model data storage — the MVCP framework method that populates bean fields from serialized key-value data streams |
| `storeCommonInfoData` | Method | Common info data storage — parent class method that handles shared/common information fields (identified by "//" prefix) |
| `X33VDataTypeBeanInterface` | Interface | Data type bean interface — the contract implemented by nested list element beans that support recursive `storeModelData` delegation |
| `keyElement` | Variable | Extracted field name — the first path segment of the hierarchical key, used to determine which field route to take |
| `subkey` | Parameter | Property selector — specifies which attribute of a field to set (value, state, enable) |
| `isSetAsString` | Parameter | String coercion flag — when true, Long-type properties receive values as String conversions |
| MVCP | Acronym | Model-View-Controller-Processor — the framework architecture pattern used in this system for web screen development |
| 代理店 | Japanese term | Agent / Distributor — a sales agent or partner organization in the telecom business |
| 受取開始 | Japanese term | Receiving start — the start point of service receipt/delivery |
| 受領終了 | Japanese term | Receipt end — the end point of service receipt/delivery |
| 削除 | Japanese term | Delete — removal of a record or item |
| 登録 | Japanese term | Registration — creating or adding a new record |
| 処理区分 | Japanese term | Process type / processing category — classification of the current operation mode |
| エラーフラグ | Japanese term | Error flag — a flag indicating an error condition |
| 明細 | Japanese term | Detail / line item — individual records within a list or table |
| フラグ | Japanese term | Flag — a boolean indicator |
| 区分 | Japanese term | Classification / category — a field used to classify items into categories |
| ボタン使用可否 | Japanese term | Button availability — whether a UI button is enabled or disabled for user interaction |
