# Business Logic — KKW01034SF01DBean.storeModelData() [105 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.KKW01034SF.KKW01034SF01DBean` |
| Layer | Controller (Web View Data Bean) |
| Module | `KKW01034SF` (Package: `eo.web.webview.KKW01034SF`) |

## 1. Role

### KKW01034SF01DBean.storeModelData()

This method is a **model data dispatcher** for a Web screen data bean in the telecom service order system. Its role is to store incoming key-value data pairs into the appropriate field properties of the bean based on a **routing key** and a **subkey** (value vs state). It implements the **dispatch/routing pattern**, where the `key` parameter determines which business data category is being set, and the `subkey` determines whether to store a raw **value** or an **edit state** flag.

The method handles seven distinct business data categories: (1) System ID (`SYSID`), (2) Service Contract Number (`サービス契約番号`), (3) Migration Classification (`異動区分`), (4) Migration Reason Code (`異動理由コード` — list-based with recursive dispatch), (5) Migration Reason Memo (`異動理由メモ`), (6) Application Number (`申請番号`), and (7) Application Detail Number (`申請明細番号`). For the Migration Reason Code category, the key may include a **list index suffix** (e.g., `異動理由コード/0`), triggering a recursive call into a typed child bean (`X33VDataTypeStringBean`) from a configurable list.

This method serves as a **shared utility** called by many screen-level processes to populate bean model data from screen input or backend responses, without the caller needing to know the internal field structure of the bean. It is the primary data-binding mechanism used during screen initialization and form submission.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["storeModelData key, subkey, in_value, isSetAsString"])
    CHECK_NULL["key == null || subkey == null?"]
    EARLY_RETURN(["Early return"])
    FIND_SEP["separaterPoint = key.indexOf('/')"]
    CHECK_SYSID["key.equals('SYSID')?"]
    CHECK_SUBKEY_S["subkey.equalsIgnoreCase('value')?"]
    CHECK_SUBKEY_ST["subkey.equalsIgnoreCase('state')?"]
    SET_SYSID_VAL["setSysid_value((String)in_value)"]
    SET_SYSID_STATE["setSysid_state((String)in_value)"]
    CHECK_SVC["key.equals('サービス契約番号')?"]
    SET_SVC_VAL["setSvc_kei_no_value((String)in_value)"]
    SET_SVC_STATE["setSvc_kei_no_state((String)in_value)"]
    CHECK_IDO_DIV["key.equals('異動区分')?"]
    SET_IDO_DIV_VAL["setIdo_div_value((String)in_value)"]
    SET_IDO_DIV_STATE["setIdo_div_state((String)in_value)"]
    CHECK_IDO_RSN_CD["key.equals('異動理由コード')?"]
    EXTRACT_IDX["key = key.substring(separaterPoint + 1)"]
    PARSE_INT["tmpIndexInt = Integer.valueOf(key)"]
    CATCH_NFE["catch NumberFormatException -> null"]
    CHECK_IDX_NONNULL["tmpIndexInt != null?"]
    CHECK_IDX_RANGE["tmpIndex >= 0 && tmpIndex < ido_rsn_cd_list.size()?"]
    RECURSIVE_CALL["((X33VDataTypeStringBean)ido_rsn_cd_list.get(tmpIndex)).storeModelData(subkey, in_value)"]
    CHECK_IDO_RSN_MEMO["key.equals('異動理由メモ')?"]
    SET_IDO_RSN_MEMO_VAL["setIdo_rsn_memo_value((String)in_value)"]
    SET_IDO_RSN_MEMO_STATE["setIdo_rsn_memo_state((String)in_value)"]
    CHECK_MSKM_NO["key.equals('申請番号')?"]
    SET_MSKM_NO_VAL["setMskm_no_value((String)in_value)"]
    SET_MSKM_NO_STATE["setMskm_no_state((String)in_value)"]
    CHECK_MSKM_DTL["key.equals('申請明細番号')?"]
    SET_MSKM_DTL_VAL["setMskm_dtl_no_value((String)in_value)"]
    SET_MSKM_DTL_STATE["setMskm_dtl_no_state((String)in_value)"]
    END_NODE(["Return / Next"])

    START --> CHECK_NULL
    CHECK_NULL -->|true| EARLY_RETURN
    CHECK_NULL -->|false| FIND_SEP
    FIND_SEP --> CHECK_SYSID
    CHECK_SYSID -->|true| CHECK_SUBKEY_S
    CHECK_SYSID -->|false| CHECK_SVC
    CHECK_SVC -->|true| SET_SVC_VAL
    CHECK_SVC -->|false| CHECK_IDO_DIV
    CHECK_IDO_DIV -->|true| SET_IDO_DIV_VAL
    CHECK_IDO_DIV -->|false| CHECK_IDO_RSN_CD
    CHECK_IDO_RSN_CD -->|true| EXTRACT_IDX
    CHECK_IDO_RSN_CD -->|false| CHECK_IDO_RSN_MEMO
    CHECK_IDO_RSN_MEMO -->|true| CHECK_IDO_RSN_MEMO_S
    CHECK_IDO_RSN_MEMO -->|false| CHECK_MSKM_NO
    CHECK_MSKM_NO -->|true| SET_MSKM_NO_VAL
    CHECK_MSKM_NO -->|false| CHECK_MSKM_DTL
    CHECK_MSKM_DTL -->|true| SET_MSKM_DTL_VAL
    CHECK_MSKM_DTL -->|false| END_NODE
    CHECK_SUBKEY_S -->|true| SET_SYSID_VAL
    CHECK_SUBKEY_S -->|false| CHECK_SUBKEY_ST
    CHECK_SUBKEY_ST -->|true| SET_SYSID_STATE
    CHECK_SUBKEY_ST -->|false| END_NODE
    SET_SYSID_VAL --> END_NODE
    SET_SYSID_STATE --> END_NODE
    SET_SVC_VAL --> END_NODE
    SET_SVC_STATE --> END_NODE
    SET_IDO_DIV_VAL --> END_NODE
    SET_IDO_DIV_STATE --> END_NODE
    EXTRACT_IDX --> PARSE_INT
    PARSE_INT -->|success| CHECK_IDX_NONNULL
    PARSE_INT -->|NumberFormatException| CATCH_NFE
    CATCH_NFE --> CHECK_IDX_NONNULL
    CHECK_IDX_NONNULL -->|false| END_NODE
    CHECK_IDX_NONNULL -->|true| CHECK_IDX_RANGE
    CHECK_IDX_RANGE -->|false| END_NODE
    CHECK_IDX_RANGE -->|true| RECURSIVE_CALL
    RECURSIVE_CALL --> END_NODE
    CHECK_IDO_RSN_MEMO_S -->|true| SET_IDO_RSN_MEMO_VAL
    CHECK_IDO_RSN_MEMO_S -->|false| SET_IDO_RSN_MEMO_STATE
    SET_IDO_RSN_MEMO_VAL --> END_NODE
    SET_IDO_RSN_MEMO_STATE --> END_NODE
    SET_MSKM_NO_VAL --> END_NODE
    SET_MSKM_NO_STATE --> END_NODE
    SET_MSKM_DTL_VAL --> END_NODE
    SET_MSKM_DTL_STATE --> END_NODE

    subgraph SYSID_SVC["SYSID / Service Contract Number Handling"]
        CHECK_SYSID
        CHECK_SUBKEY_S
        CHECK_SUBKEY_ST
        SET_SYSID_VAL
        SET_SYSID_STATE
        CHECK_SVC
        SET_SVC_VAL
        SET_SVC_STATE
    end
    subgraph IDO_DIV["Migration Classification Handling"]
        CHECK_IDO_DIV
        SET_IDO_DIV_VAL
        SET_IDO_DIV_STATE
    end
    subgraph IDO_RSN_CD["Migration Reason Code (List-Based)"]
        CHECK_IDO_RSN_CD
        EXTRACT_IDX
        PARSE_INT
        CATCH_NFE
        CHECK_IDX_NONNULL
        CHECK_IDX_RANGE
        RECURSIVE_CALL
    end
    subgraph IDO_RSN_MEMO["Migration Reason Memo"]
        CHECK_IDO_RSN_MEMO
        CHECK_IDO_RSN_MEMO_S
        SET_IDO_RSN_MEMO_VAL
        SET_IDO_RSN_MEMO_STATE
    end
    subgraph MSKM_NO["Application Number"]
        CHECK_MSKM_NO
        SET_MSKM_NO_VAL
        SET_MSKM_NO_STATE
    end
    subgraph MSKM_DTL_NO["Application Detail Number"]
        CHECK_MSKM_DTL
        SET_MSKM_DTL_VAL
        SET_MSKM_DTL_STATE
    end
```

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `key` | `String` | The **field identifier** that determines which business property is being set. Can be a simple field name (e.g., `"SYSID"`, `"サービス契約番号"`) or a composite key with a list index suffix (e.g., `"異動理由コード/0"` where `0` is the list index). Each key maps to a specific domain concept: system identifier, service contract, migration classification, migration reason code (list), migration reason memo, application number, or application detail number. |
| 2 | `subkey` | `String` | Specifies whether to set the **data value** or the **edit state flag**. Acceptable values: `"value"` to store the actual data, `"state"` to store the edit state. The comparison is case-insensitive (`equalsIgnoreCase`). |
| 3 | `in_value` | `Object` | The **data to store**, cast to `String` at assignment time. Carries the actual business data (e.g., a system ID string, a contract number, a migration reason code from the list). |
| 4 | `isSetAsString` | `boolean` | Flag indicating whether to set a Long-type item's value property as a String value. Passed through to recursive child bean calls (`X33VDataTypeStringBean.storeModelData`). |

**Instance fields read by this method:**
| Field | Type | Business Description |
|-------|------|---------------------|
| `ido_rsn_cd_list` | `ArrayList` | List of typed data beans for migration reason code entries. Each element is cast to `X33VDataTypeStringBean` during recursive dispatch. |

## 4. CRUD Operations / Called Services

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| U | `KKW01034SF01DBean.setSysid_value` | KKW01034SF01DBean | - | Sets the SYSID value field |
| U | `KKW01034SF01DBean.setSysid_state` | KKW01034SF01DBean | - | Sets the SYSID edit state field |
| U | `KKW01034SF01DBean.setSvc_kei_no_value` | KKW01034SF01DBean | - | Sets the Service Contract Number value field |
| U | `KKW01034SF01DBean.setSvc_kei_no_state` | KKW01034SF01DBean | - | Sets the Service Contract Number edit state field |
| U | `KKW01034SF01DBean.setIdo_div_value` | KKW01034SF01DBean | - | Sets the Migration Classification value field |
| U | `KKW01034SF01DBean.setIdo_div_state` | KKW01034SF01DBean | - | Sets the Migration Classification edit state field |
| U | `X33VDataTypeStringBean.storeModelData` | X33VDataTypeStringBean | - | Recursively delegates to a typed list child bean to store subkey/value in the migration reason code list entry |
| U | `KKW01034SF01DBean.setIdo_rsn_memo_value` | KKW01034SF01DBean | - | Sets the Migration Reason Memo value field |
| U | `KKW01034SF01DBean.setIdo_rsn_memo_state` | KKW01034SF01DBean | - | Sets the Migration Reason Memo edit state field |
| U | `KKW01034SF01DBean.setMskm_no_value` | KKW01034SF01DBean | - | Sets the Application Number value field |
| U | `KKW01034SF01DBean.setMskm_no_state` | KKW01034SF01DBean | - | Sets the Application Number edit state field |
| U | `KKW01034SF01DBean.setMskm_dtl_no_value` | KKW01034SF01DBean | - | Sets the Application Detail Number value field |
| U | `KKW01034SF01DBean.setMskm_dtl_no_state` | KKW01034SF01DBean | - | Sets the Application Detail Number edit state field |
| U | `JKKAdEditCC.substring` | JKKAdEditCC | - | Calls `substring` in `JKKAdEditCC` |
| U | `JKKAdEdit.substring` | JKKAdEdit | - | Calls `substring` in `JKKAdEdit` |
| U | `JKKTelnoInfoAddMapperCC.substring` | JKKTelnoInfoAddMapperCC | - | Calls `substring` in `JKKTelnoInfoAddMapperCC` |
| U | `JDKejbStringEdit.substring` | JDKejbStringEdit | - | Calls `substring` in `JDKejbStringEdit` |
| U | `KKW01034SF01DBean.storeModelData` | KKW01034SF01DBean | - | Recursive self-call on child bean |

**Classification reasoning:** All operations are **Update (U)** operations — they set bean properties (value or state fields). No Create, Read, or Delete database operations occur in this method. The recursive call to `X33VDataTypeStringBean.storeModelData` is also an update to a child bean's internal fields.

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | KKW01034SF01DBean.storeModelData | `KKW01034SF01DBean.storeModelData` | `setMskm_dtl_no_state [U] -` |
| 2 | KKW01034SF01DBean.storeModelData | `KKW01034SF01DBean.storeModelData` | `setMskm_dtl_no_value [U] -` |
| 3 | KKW01034SF01DBean.storeModelData | `KKW01034SF01DBean.storeModelData` | `setMskm_no_state [U] -` |
| 4 | KKW01034SF01DBean.storeModelData | `KKW01034SF01DBean.storeModelData` | `setMskm_no_value [U] -` |
| 5 | KKW01034SF01DBean.storeModelData | `KKW01034SF01DBean.storeModelData` | `setIdo_rsn_memo_state [U] -` |
| 6 | KKW01034SF01DBean.storeModelData | `KKW01034SF01DBean.storeModelData` | `setIdo_rsn_memo_value [U] -` |
| 7 | KKW01034SF01DBean.storeModelData | `KKW01034SF01DBean.storeModelData` | `storeModelData (recursive) [U] -` |
| 8 | KKW01034SF01DBean.storeModelData | `KKW01034SF01DBean.storeModelData` | `substring [U] JKKAdEditCC` |
| 9 | KKW01034SF01DBean.storeModelData | `KKW01034SF01DBean.storeModelData` | `substring [U] JKKAdEdit` |
| 10 | KKW01034SF01DBean.storeModelData | `KKW01034SF01DBean.storeModelData` | `substring [U] JKKTelnoInfoAddMapperCC` |
| 11 | KKW01034SF01DBean.storeModelData | `KKW01034SF01DBean.storeModelData` | `substring [U] JDKejbStringEdit` |
| 12 | KKW01034SF01DBean.storeModelData | `KKW01034SF01DBean.storeModelData` | `setIdo_div_state [U] -` |
| 13 | KKW01034SF01DBean.storeModelData | `KKW01034SF01DBean.storeModelData` | `setIdo_div_value [U] -` |
| 14 | KKW01034SF01DBean.storeModelData | `KKW01034SF01DBean.storeModelData` | `setSvc_kei_no_state [U] -` |
| 15 | KKW01034SF01DBean.storeModelData | `KKW01034SF01DBean.storeModelData` | `setSysid_state [U] -` |

**Notes:** No external screen (KKSV) or batch entry points were found within 8 hops. The direct callers are all internal `storeModelData` invocations within the same bean class, indicating this method is called repeatedly during model data population — likely from a screen initialization or response-processing handler that iterates over key-value pairs.

## 6. Per-Branch Detail Blocks

**Block 1** — [IF] Early return on null (L433)

Guard clause: if either `key` or `subkey` is `null`, processing is aborted immediately.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `key == null || subkey == null` // Early return guard (key, subkey がnullの場合、処理を中止) |
| 2 | RETURN | `return` |

**Block 2** — [EXEC] Separator point extraction (L437)

| # | Type | Code |
|---|------|------|
| 1 | SET | `separaterPoint = key.indexOf("/")` // Find slash position for potential index extraction in list-based keys |

**Block 3** — [IF/ELSE-IF/ELSE] Key-based dispatch for SYSID (L440)

Handles the **System ID** field (`SYSID`). Dispatches to value or state setter based on `subkey`.

**Block 3.1** — [IF] subkey = "value" (L441)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `setSysid_value((String)in_value)` // Sets SYSID value (データタイプがStringの項目"SYSID"(項目ID:sysid)) |

**Block 3.2** — [ELSE-IF] subkey = "state" (L444)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `setSysid_state((String)in_value)` // Sets SYSID edit state (subkey が"state"の場合、ステータスを返す) |

**Block 4** — [ELSE-IF] Key = "サービス契約番号" (Service Contract Number) (L449)

Handles the **Service Contract Number** field (`svc_kei_no`).

**Block 4.1** — [IF] subkey = "value" (L450)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `setSvc_kei_no_value((String)in_value)` // Sets Service Contract Number value (データタイプがStringの項目"サービス契約番号"(項目ID:svc_kei_no)) |

**Block 4.2** — [ELSE-IF] subkey = "state" (L453)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `setSvc_kei_no_state((String)in_value)` // Sets Service Contract Number edit state (subkey が"state"の場合、ステータスを返す) |

**Block 5** — [ELSE-IF] Key = "異動区分" (Migration Classification) (L458)

Handles the **Migration Classification** field (`ido_div`).

**Block 5.1** — [IF] subkey = "value" (L459)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `setIdo_div_value((String)in_value)` // Sets Migration Classification value (データタイプがStringの項目"異動区分"(項目ID:ido_div)) |

**Block 5.2** — [ELSE-IF] subkey = "state" (L462)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `setIdo_div_state((String)in_value)` // Sets Migration Classification edit state (subkey が"state"の場合、ステータスを返す) |

**Block 6** — [ELSE-IF] Key = "異動理由コード" (Migration Reason Code — List-Based) (L477)

This is the most complex branch. The Migration Reason Code is a **list-based field** where each entry has its own bean. The `key` may contain an index suffix (e.g., `異動理由コード/0`), and the method extracts the index, validates it, and recursively delegates to the child bean.

**Block 6.1** — [EXEC] Key extraction (L480)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `key = key.substring(separaterPoint + 1)` // Extract substring after the first "/" (key の次の要素を取得。"ido_rsn_cd/0" から最初の "/" より後を取得) |

**Block 6.2** — [EXEC] Index parsing with error handling (L481-L492)

Attempts to parse the extracted key portion as an integer index.

| # | Type | Code |
|---|------|------|
| 1 | SET | `tmpIndexInt = null` // Initialize to null |
| 2 | TRY | `tmpIndexInt = Integer.valueOf(key)` // Parse extracted key as integer |
| 3 | CATCH | `NumberFormatException e` -> `tmpIndexInt = null` // If index value is not a numeric string, return null here (インデックス値が数値文字列でない場合は、ここでnullを返す) |

**Block 6.3** — [IF] Index is not null (L493)

| # | Type | Code |
|---|------|------|
| 1 | SET | `tmpIndex = tmpIndexInt.intValue()` // Unbox Integer to int (インデックス値が数値文字列の場合) |

**Block 6.3.1** — [IF] Index is within list bounds (L495)

| # | Type | Code |
|---|------|------|
| 1 | SET | `tmpIndex >= 0 && tmpIndex < ido_rsn_cd_list.size()` // Index is less than list count minus 1 (インデックス値がリスト個数-1以下の場合) |
| 2 | CALL | `((X33VDataTypeStringBean)ido_rsn_cd_list.get(tmpIndex)).storeModelData(subkey, in_value)` // Recursive delegation to typed child bean. The cast target depends on item type: X33VDataTypeStringBean, X33VDataTypeLongBean, or X33VDataTypeBooleanBean. For X33VDataTypeLongBean, subkey and input value and isSetAsString flag are specified as arguments. (キャスト部分は、項目定義型に合わせてX33VDataTypeStringBean, X33VDataTypeLongBean, X33VDataTypeBooleanBeanのうち1つを指定。) |

**Block 7** — [ELSE-IF] Key = "異動理由メモ" (Migration Reason Memo) (L503)

Handles the **Migration Reason Memo** field (`ido_rsn_memo`).

**Block 7.1** — [IF] subkey = "value" (L504)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `setIdo_rsn_memo_value((String)in_value)` // Sets Migration Reason Memo value (データタイプがStringの項目"異動理由メモ"(項目ID:ido_rsn_memo)) |

**Block 7.2** — [ELSE-IF] subkey = "state" (L507)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `setIdo_rsn_memo_state((String)in_value)` // Sets Migration Reason Memo edit state (subkey が"state"の場合、ステータスを返す) |

**Block 8** — [ELSE-IF] Key = "申請番号" (Application Number) (L512)

Handles the **Application Number** field (`mskm_no`).

**Block 8.1** — [IF] subkey = "value" (L513)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `setMskm_no_value((String)in_value)` // Sets Application Number value (データタイプがStringの項目"申請番号"(項目ID:mskm_no)) |

**Block 8.2** — [ELSE-IF] subkey = "state" (L516)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `setMskm_no_state((String)in_value)` // Sets Application Number edit state (subkey が"state"の場合、ステータスを返す) |

**Block 9** — [ELSE-IF] Key = "申請明細番号" (Application Detail Number) (L521)

Handles the **Application Detail Number** field (`mskm_dtl_no`).

**Block 9.1** — [IF] subkey = "value" (L522)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `setMskm_dtl_no_value((String)in_value)` // Sets Application Detail Number value (データタイプがStringの項目"申請明細番号"(項目ID:mskm_dtl_no)) |

**Block 9.2** — [ELSE-IF] subkey = "state" (L525)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `setMskm_dtl_no_state((String)in_value)` // Sets Application Detail Number edit state (subkey が"state"の場合、ステータスを返す) |

**Block 10** — [ELSE] No matching key (implicit) (L527)

If none of the seven key patterns match, the method falls through to the end with no operation performed — effectively a no-op.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | (implicit fall-through — no matching key pattern, method returns without side effect) |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `sysid` | Field | System ID — internal system identifier for the service order or transaction |
| `svc_kei_no` | Field | Service Contract Number — the contract line number for a telecom service (サービス契約番号) |
| `ido_div` | Field | Migration Classification — indicates the type of migration/change (異動区分). Values typically include add, change, cancel |
| `ido_rsn_cd` | Field | Migration Reason Code — the code specifying why a migration occurred. Stored as a list of typed beans to support multiple entries |
| `ido_rsn_memo` | Field | Migration Reason Memo — free-text description of the migration reason (異動理由メモ) |
| `mskm_no` | Field | Application Number — the application/order number (申請番号) |
| `mskm_dtl_no` | Field | Application Detail Number — the detail line number within an application (申請明細番号) |
| `key` | Parameter | Field identifier used as a routing key to dispatch to the correct bean property. Can include a "/"-separated index suffix for list-based fields |
| `subkey` | Parameter | Specifies whether to set `"value"` (the actual data) or `"state"` (the edit state/status flag) |
| `separaterPoint` | Local Variable | Index of the "/" character in `key`, used to extract index suffix from composite keys |
| `tmpIndex` | Local Variable | Integer index extracted from a composite key, used to select the correct entry from `ido_rsn_cd_list` |
| `ido_rsn_cd_list` | Instance Field | ArrayList of typed data beans holding migration reason code entries. Each element is cast to `X33VDataTypeStringBean` during dispatch |
| `isSetAsString` | Parameter | Flag indicating whether to set a Long-type item's value property as a String value |
| `X33VDataTypeStringBean` | Class | Typed data bean for string-type list items. Receives recursive `storeModelData` calls for list-based fields |
| `X33VDataTypeLongBean` | Class | Typed data bean for long-type list items (referenced in comment as alternative cast target) |
| `X33VDataTypeBooleanBean` | Class | Typed data bean for boolean-type list items (referenced in comment as alternative cast target) |
| `state` | Concept | Edit state flag indicating whether a field is editable, modified, or in a particular UI state. Stored alongside the data value for each field |
